51单片机用定时器1方式1定时100毫秒循环120次总定时12秒轮流亮led灯,定时时间到,亮灯,然后熄灭,再定时12秒之后亮另一个灯,轮流亮的代码
时间: 2023-12-22 19:06:41 浏览: 85
下面是51单片机用定时器1方式1定时100毫秒循环120次总定时12秒轮流亮led灯的代码:
```c
#include <reg51.h>
sbit LED1 = P1^0;
sbit LED2 = P1^1;
void initTimer1() {
TMOD |= 0x10; // 设置定时器1为方式1
TH1 = 0xEC; // 设置定时器初值,定时100ms
TL1 = 0xAF;
ET1 = 1; // 允许定时器1中断
EA = 1; // 允许总中断
TR1 = 1; // 启动定时器1
}
void main() {
unsigned char count = 0;
LED1 = 1; // 先点亮第一个灯
initTimer1();
while (1) {
if (count >= 120) { // 循环120次,即12秒
count = 0;
LED1 = !LED1; // 灯亮了就熄灭,灯灭了就亮
LED2 = !LED2;
}
}
}
void timer1_isr() interrupt 3 {
TH1 = 0xEC; // 重新设置定时器初值
TL1 = 0xAF;
Count++; // 计数器加1
}
```
上述程序中,使用了定时器1的方式1,设置定时器初值为0xEC和0xAF,即定时100ms。同时,允许定时器1中断,计数器count记录循环次数,当循环120次(即12秒)时,翻转LED1和LED2的状态。
需要注意的是,因为该程序使用了中断,必须在程序中定义中断处理函数`timer1_isr()`,其中通过重新设置定时器初值和计数器加1来实现定时。
阅读全文