在AT89S51单片机的P1口上接有8只LED,下面采用T0的方式一的定时中断方式,使P1口接的8只LED每0.05秒闪亮一次编写程序
时间: 2023-05-24 18:01:25 浏览: 2090
047、用定时器T1中断控制两个LED以不同周期闪烁 (AT89S52单片机).rar
以下是可以实现这个功能的C代码:
```C
#include <REG51.h>
#define LED P1
int count;
void timer0(void) interrupt 1 {
TH0 = 0x4C;
TL0 = 0x00; // 重新加载初值,定时器中断每 20ms 发生一次
count++;
if(count == 50) {
count = 0;
LED ^= 0xFF; // LED 翻转
}
}
void main() {
TMOD = 0x01; // 定时器0,模式1
TH0 = 0x4C;
TL0 = 0x00; // 设置初值
ET0 = 1; // 开定时器0中断
EA = 1; // 开总中断
TR0 = 1; // 启动定时器0
while(1);
}
```
这个程序使用了定时器0,以每20ms(中断频率50Hz)的间隔触发中断。在中断处理函数中,一个计数器 count 使 LED 每秒闪烁 20 次,即每 0.05 秒,LED 就会翻转一次。在 main 函数中,开启了定时器0中断,并启动了定时器0。因为是裸机程序,所以使用了单片机直接控制 IO 口的方式,通过按位异或运算实现 LED 的翻转。
阅读全文