51单片机定时器0,10毫秒代码
时间: 2024-05-06 07:18:51 浏览: 7
以下是定时器0,10毫秒的51单片机代码:
```
#include <REG51.h>
void timer0_init();
void main() {
timer0_init();
while(1) {
// do something
}
}
void timer0_init() {
TMOD |= 0x01; // 定时器0工作在模式1,16位定时器模式
TH0 = 0xDB; // 65536 - (1/10000)/(1/12*10^6) 的高8位
TL0 = 0xFF; // 65536 - (1/10000)/(1/12*10^6) 的低8位
ET0 = 1; // 允许定时器0中断
EA = 1; // 打开总中断开关
TR0 = 1; // 启动定时器0
}
void timer0_isr() interrupt 1 {
TH0 = 0xDB; // 65536 - (1/10000)/(1/12*10^6) 的高8位
TL0 = 0xFF; // 65536 - (1/10000)/(1/12*10^6) 的低8位
// do something every 10ms
}
```
以上代码使用定时器0在模式1(16位定时器模式)下工作,并设置定时器0的初值为65536-(1/10000)/(1/12*10^6),即每次计数到这个值时就会产生一次定时器0中断。在主函数中调用timer0_init()函数初始化定时器0,然后进入while循环中执行其他任务。在定时器0中断服务程序timer0_isr()中,再次设置定时器0的初值为65536-(1/10000)/(1/12*10^6),并在其中添加需要每10毫秒执行的代码。最后通过打开总中断开关EA和允许定时器0中断ET0,使得定时器0中断服务程序能够被正确执行。