单片机频率计代码
时间: 2023-07-23 18:21:20 浏览: 60
好的,以下是一个简单的基于单片机的频率计代码:
```
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit Signal = P1^0; // 信号输入引脚
sbit LED = P2^0; // 频率计工作指示灯
uchar count = 0; // 计数器计数值
uchar flag = 0; // 计数器溢出标志
uint freq = 0; // 频率计算值
void main()
{
TMOD = 0x01; // 定时器0工作在模式1
TH0 = 0; // 定时器初始值
TL0 = 0;
TR0 = 1; // 启动定时器0
ET0 = 1; // 允许定时器0中断
EA = 1; // 开启总中断
while(1)
{
if(flag == 1) // 计数器溢出,计算频率
{
flag = 0; // 重置溢出标志
freq = (count * 65536 + TH0 * 256 + TL0) / 1000; // 计算频率,单位为kHz
count = 0; // 重置计数器
}
if(freq > 100) // 频率大于100kHz,工作指示灯亮
{
LED = 1;
}
else // 频率小于等于100kHz,工作指示灯灭
{
LED = 0;
}
}
}
void timer0_isr() interrupt 1
{
count++; // 计数器加1
flag = 1; // 标志计数器溢出
TH0 = 0; // 重置定时器值
TL0 = 0;
}
```
这个代码通过定时器0来计数,每次接收到一个信号就会让计数器加1,当计数器溢出时,就说明已经接收到一定时间内的信号,可以通过计算来得到信号的频率。这个代码会计算出每秒钟接收到的脉冲数,然后再除以1000,得到的值就是频率,单位为kHz。同时,代码还会根据计算出的频率来控制一个指示灯的亮灭。