51单片机定时器0,10毫秒代码
时间: 2024-05-16 17:17:23 浏览: 80
单片机51定时器
以下是51单片机定时器0的10毫秒延时代码:
```c
#include <reg52.h>
void timer0_init() {
TMOD &= 0xF0; // 设置定时器0为模式1(16位定时器)
TL0 = 0x9C; // 定时器初值为0x9C36
TH0 = 0x36;
ET0 = 1; // 开启定时器0中断
TR0 = 1; // 启动定时器0
EA = 1; // 开启总中断
}
void timer0_isr() interrupt 1 {
static unsigned int cnt = 0;
TL0 = 0x9C;
TH0 = 0x36;
if (++cnt >= 10) { // 10次中断后,计数器清零
cnt = 0;
}
}
void delay_ms(unsigned int ms) {
while (ms--) {
unsigned int i, j;
for (i = 0; i < 100; i++) {
for (j = 0; j < 110; j++);
}
}
}
void main() {
timer0_init();
while (1) {
delay_ms(100); // 延时1秒
// 执行其他操作
}
}
```
在上面的代码中,我们设置了定时器0为16位定时器模式,并将初值设置为0x9C36,使得定时器每计数65536-0x9C36=37400个机器周期,就会向CPU发出一个中断信号。在中断服务函数中,我们通过计数器cnt来计数,当cnt累计到10时,就表示定时器已经计数了10次,即10毫秒,此时我们将计数器清零。在主函数中,我们调用delay_ms函数实现了10毫秒的延时。
阅读全文