keil代码at89c51两位计时器
时间: 2023-07-02 16:10:03 浏览: 100
秒表_keil_秒表_AT89C51秒表_
5星 · 资源好评率100%
以下是基于 Keil C51 编译器的 AT89C51 两位计时器的代码:
```c
#include <REGX51.H> // 包含 AT89C51 寄存器定义
#define FREQ_OSC 11059200UL // 定义外部晶体振荡器频率
unsigned int timer_count = 0; // 定义计时器计数器
void timer0_isr(void) interrupt 1 // Timer 0 中断服务程序
{
TH0 = (65536 - (FREQ_OSC / 12 / 1000)); // 重新设置计时器初值
TL0 = (65536 - (FREQ_OSC / 12 / 1000)) & 0xFF; // 低 8 位
timer_count++; // 计时器计数器加 1
}
void main()
{
TMOD = 0x01; // Timer 0 工作在模式 1
TH0 = (65536 - (FREQ_OSC / 12 / 1000)); // 设置计时器初值
TL0 = (65536 - (FREQ_OSC / 12 / 1000)) & 0xFF; // 低 8 位
TR0 = 1; // 启动 Timer 0
ET0 = 1; // 允许 Timer 0 中断
EA = 1; // 开启全局中断
while(1)
{
if(timer_count >= 1000) // 如果计时器计数器达到 1000
{
timer_count = 0; // 重置计数器
// 执行需要每秒执行的操作
}
}
}
```
上述代码中,使用定时器 0 进行计时,每 1ms 产生一次中断,中断服务程序中重置计时器初值并让计时器计数器加 1。在主程序中,通过判断计时器计数器是否达到 1000 来实现每秒执行一次特定操作。
阅读全文