单片机频率计代码,范围在10hz到4khz
时间: 2024-02-23 19:59:28 浏览: 24
好的,这里提供一个基于单片机的频率计代码,可以测量10Hz到4kHz范围内的频率:
```
#include <reg52.h>
sbit Signal = P1^0; // 信号输入引脚
sbit LED = P2^0; // 频率计工作指示灯
unsigned int freq; // 频率计算值
void main()
{
TMOD = 0x09; // 定时器0和1工作在模式1和模式2
TH0 = 0; // 定时器0初始值
TL0 = 0;
TH1 = 0; // 定时器1初始值
TL1 = 0;
TR0 = 1; // 启动定时器0
ET0 = 1; // 允许定时器0中断
EA = 1; // 开启总中断
while(1)
{
if(freq >= 10 && freq <= 4000) // 频率在10Hz到4kHz范围内,工作指示灯亮
{
LED = 1;
}
else // 频率不在10Hz到4kHz范围内,工作指示灯灭
{
LED = 0;
}
}
}
void timer0_isr() interrupt 1
{
TH0 = 0; // 重置定时器0值
TL0 = 0;
Signal = !Signal; // 产生一个脉冲,用于测试
TR1 = 1; // 启动定时器1
}
void timer1_isr() interrupt 3
{
TR1 = 0; // 停止定时器1
TH1 = 0; // 重置定时器1值
TL1 = 0;
freq = 65536 - (TH1 * 256 + TL1); // 计算频率
TH0 = 0; // 重置定时器0值
TL0 = 0;
}
```
这个代码通过定时器0来产生一个脉冲,每次接收到一个信号就会让定时器1开始计数,当信号的一个周期结束时,定时器1就会停止计数,此时可以通过计算来得到信号的频率。这个代码会计算出每秒钟接收到的脉冲数,然后再除以65536,得到的值就是频率,单位为Hz。同时,代码还会根据计算出的频率来控制一个指示灯的亮灭。在这个代码中,由于使用了两个定时器,因此可以比较准确地测量10Hz到4kHz范围内的频率。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)