51单片机脉冲计数程序
时间: 2023-08-12 18:03:17 浏览: 557
以下是基于51单片机的脉冲计数程序的示例代码:
```c
#include <reg52.h>
sbit CTR = P3^4; // 计数器输入引脚
sbit LED = P1^0; // LED 指示灯引脚
unsigned int count = 0; // 计数器计数值
unsigned char flag = 0; // 标志位
void main()
{
TMOD = 0x05; // 定时器0工作在模式1(16位定时器)下,定时器1工作在模式0(13位定时器)下
TH1 = 0x00; // 定时器1计数初值
TL1 = 0x00;
TR1 = 1; // 启动定时器1
ET0 = 1; // 允许定时器0中断
EA = 1; // 打开总中断开关
while (1)
{
if (flag == 1) // 如果标志位为1,则表示计数器有计数
{
LED = ~LED; // 翻转LED指示灯
flag = 0; // 清除标志位
}
}
}
void Timer0_isr() interrupt 1 // 定时器0中断服务程序
{
TH0 = 0xFC; // 重新赋初值
TL0 = 0x66;
count++; // 计数器计数值加1
if (count == 50000) // 如果计数器计数值达到50000,即计数1秒
{
flag = 1; // 设置标志位,表示计数器有计数
count = 0; // 清零计数器计数值
}
}
```
该示例代码使用定时器0作为脉冲计数器,并且设置定时器0的工作模式为16位定时器,即计数器的计数范围为0-65535。在定时器0的中断服务程序中,每当计数器的计数值达到50000时,即计数1秒,就会设置标志位,表示计数器有计数。在程序的主循环中,不断检测标志位是否为1,如果是,则翻转LED指示灯,并清除标志位。