用C52单片机的第三个定时器写一个定时20mS的中断程序
时间: 2023-09-22 17:06:41 浏览: 88
C52单片机的第三个定时器是定时器2,它与定时器0和定时器1不同,是一个16位的定时器。下面是一个使用定时器2实现20ms定时中断的程序:
```c
#include <reg52.h> // 51单片机头文件
void timer2_init(void);
void main(void)
{
timer2_init(); // 初始化定时器2
while (1)
{
// 在这里可以执行其他操作
}
}
// 定时器2初始化函数
void timer2_init(void)
{
T2CON = 0x04; // 设置定时器2为模式1,不用预分频器
RCAP2H = 0xFF; // 设置定时器2的重载值为0xFFFF
RCAP2L = 0xD1;
ET2 = 1; // 开启定时器2中断
TR2 = 1; // 启动定时器2
EA = 1; // 全局中断使能
}
// 定时器2中断服务函数
void timer2_isr(void) interrupt 5
{
TF2 = 0; // 清除定时器2中断标志
// 在这里可以执行需要定时执行的操作
TH2 = 0xFF; // 重新设置定时器2的重载值
TL2 = 0xD1;
}
```
在这个程序中,定时器2使用了模式1,不用预分频器,因此它的计数频率是系统时钟频率(一般为12MHz)除以12。设置定时器2的重载值为0xFFFF,使得它每计数65536次就会溢出产生中断。由于定时器2是16位的,所以在中断服务函数中需要重新设置定时器2的重载值和初值(通过TH2和TL2寄存器设置),以保证中断周期为20ms。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)