使用c语言设置堆栈T0为定时器,50ms定时初值送T0,关闭T0中断。设置T0为高级中断设定T1为定时器,20ms定时初值送T1,允许T1中断设定T1为低级中断,开中断
时间: 2024-02-20 14:00:15 浏览: 95
下面是你的要求的代码实现:
```c
#include <reg52.h> // 头文件
void T0_ISR() interrupt 1 { // 定时器T0的中断服务程序
// 在这里添加需要执行的操作
TR0 = 0; // 关闭定时器T0中断
}
void T1_ISR() interrupt 3 { // 定时器T1的中断服务程序
// 在这里添加需要执行的操作
TF1 = 0; // 清除定时器T1的溢出标志
}
void main() {
TMOD &= 0xF0; // 设置定时器T0为模式1
TMOD |= 0x01;
TH0 = 0x3C; // 设置初始值,计数器初值为65535-500=0xFDA3
TL0 = 0xA3;
TR0 = 1; // 启动定时器T0
while (TF0 == 0); // 等待定时器T0溢出
TH0 = 0x00; // 清空计数器
TL0 = 0x00;
TR0 = 0; // 关闭定时器T0中断
TMOD &= 0x0F; // 设置定时器T1为模式0
TMOD |= 0x10;
TH1 = 0xF5; // 设置初始值,计数器初值为65535-200=0xFC17
TL1 = 0x17;
ET1 = 1; // 允许定时器T1中断
PT1 = 0; // 设置定时器T1为低级中断
TR1 = 1; // 启动定时器T1
EA = 1; // 开总中断
while (1); // 程序进入死循环
}
```
在上面的代码中,首先设置定时器T0为模式1,即16位自动重载计数器;设置初值为65535-500=0xFDA3,即50ms;启动定时器T0并等待其溢出后关闭定时器T0的中断。
然后设置定时器T1为模式0,即13位计数器;设置初值为65535-200=0xFC17,即20ms;允许定时器T1中断;设置定时器T1为低级中断;启动定时器T1;开总中断。
程序会不断重复定时的过程,当定时器T0溢出时,会执行T0_ISR()函数中的操作,并关闭定时器T0中断;当定时器T1溢出时,会执行T1_ISR()函数中的操作,并清除定时器T1的溢出标志。
阅读全文