利用定时/计数器to产生定时时钟,由p1口控制8个指示灯。编一个程序,当STC单片机工作于6T模式时,使8个指示灯依次一个一个闪动,闪动频率为20次/s(8个指示灯依次亮一遍为一个周期)
时间: 2024-05-12 14:19:51 浏览: 10
```c
#include <stc89c5xrc.h>
// 定义常量
#define FREQ_OSC 11059200UL
#define TIMER_INTERVAL (65536UL - FREQ_OSC / 12 / 20)
// 定义变量
unsigned char light = 0x01; // 指示灯状态
unsigned char count = 0; // 计数器
// 定时器0中断服务程序
void timer0_isr() __interrupt 1 {
TH0 = TIMER_INTERVAL / 256;
TL0 = TIMER_INTERVAL % 256;
count++;
if (count == 20) {
count = 0;
light <<= 1;
if (light == 0) { // 循环
light = 0x01;
}
}
P1 = ~light; // 更新指示灯状态
}
// 主函数
void main() {
TMOD = 0x01; // 定时器0,模式1
TH0 = TIMER_INTERVAL / 256;
TL0 = TIMER_INTERVAL % 256;
ET0 = 1; // 开启定时器0中断
EA = 1; // 开启总中断
TR0 = 1; // 启动定时器0
while (1); // 等待中断
}
```