51单片机C语言等精度频率计程序实现与初始化

需积分: 13 6 下载量 132 浏览量 更新于2024-09-11 1 收藏 5KB TXT 举报
该程序是针对51单片机设计的一个等精度频率计,使用C语言编写。它主要利用定时器0(TIMER0)实现对输入信号频率的精确测量,并通过选择不同的中断方式来适应不同频率范围的测量。程序的关键部分包括初始化定时器、设置中断触发条件、读取输入信号以及处理中断后进行计数。 1. **硬件配置**: - 定义了多个引脚变量,如GATE、CLR、RGATE、SEL0、SEL1和SEL2,分别用于控制外部输入信号的门控、清除、复位以及频率选择。 - P1口被定义为数据输入,包含两个数组Nx和Ns,用于存储接收到的信号周期数。 2. **定时器0的配置**: - 在`system_init()`函数中,将TMOD寄存器设置为0x01,表示定时器工作在模式1,即13位自动重载定时器模式,以提高计数精度。 - ET0被置位,启用外部中断请求。 - 设置TH0和TL0寄存器的值,使得当外部时钟脉冲到来5000次时,定时器溢出,从而计算出一个周期的时间(12MHz时钟频率下大约0.01秒)。 - TR0置位,启动定时器。 3. **中断服务程序**: - `TIMER0_SCANkey()`函数是定时器0溢出中断服务子程序,当定时器计满后,程序会在这里执行,读取输入信号的状态并更新计数。 - `PRE_judge`标志变量用于判断是否已经发生过一次中断,防止重复计数。 4. **数据获取与处理**: - 通过`read_result`函数,程序读取并记录输入信号的周期数,存储在Nx和Ns数组中。这部分操作应配合中断服务程序进行,确保数据的准确性。 5. **等精度测量**: - 通过设置不同的频率选择位(SEL0, SEL1, SEL2),该程序能够适应不同频率范围的信号测量,实现等精度计数。 总结起来,此程序利用51单片机的定时器功能,通过中断机制实时监测输入信号,计算信号的周期,实现了等精度的频率计功能。用户可以根据实际需求调整定时器参数和中断触发条件,以适应不同的应用场景。