用STC89C51写一个定时器中断
时间: 2023-12-29 11:53:45 浏览: 78
AT89C51的练习之定时器中断实例
4星 · 用户满意度95%
以下是使用STC89C51编写定时器中断的示例代码:
```c
#include <reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit LED = P1^0;
void InitTimer0(void);
void Timer0_ISR(void);
void main(void)
{
InitTimer0();
while(1)
{
// do nothing
}
}
void InitTimer0(void)
{
TMOD |= 0x01; // 设置为模式1,16位定时器模式
TH0 = 0xFC; // 定时器初值,定时1ms
TL0 = 0x67;
ET0 = 1; // 允许定时器0中断
EA = 1; // 允许总中断
TR0 = 1; // 启动定时器0
}
void Timer0_ISR(void) interrupt 1
{
static uchar cnt = 0;
TH0 = 0xFC; // 重置定时器初值
TL0 = 0x67;
cnt++;
if(cnt == 500) // 500ms
{
LED = ~LED; // LED翻转
cnt = 0;
}
}
```
代码中使用了定时器0和模式1,该模式为16位定时器模式。在初始化定时器时,设置了定时器初值为0xFC67,即1ms。同时,允许了定时器0中断和总中断。在定时器中断服务程序中,每500次中断(即500ms)翻转一次LED。
阅读全文