C51实现的频率计:源代码与原理介绍

需积分: 16 3 下载量 200 浏览量 更新于2024-09-13 收藏 6KB TXT 举报
本文档是关于基于C51的频率计的C语言源代码实现。C51是一种针对嵌入式系统的低级编程语言,通常用于开发μC/OS-II、Keil μVision等开发环境中的应用。在提供的代码中,主要涉及以下几个关键知识点: 1. **硬件接口与数据存储**: - 使用了P3口的特定引脚(可能是P3^2、P3^3和P3^4)进行信号处理,如 CLR(可能作为清除或中断信号)、GATEout(输出门)和 gatein(输入门)。 - 定义了几个数据寄存器(xdatashu0至xdatashu7)以及xdatakong,用于存储频率计的数据。 - 使用了disbuf数组和temp数组来临时存储和处理测量值。 2. **定时器与计数器**: - 使用了TMOD寄存器设置定时器T0的工作模式(0x09),这可能意味着它被配置为模式1,即13位定时器/计数器。 - 启动定时器T0(TR0=1)和外部中断(ET0=1),并使能全局中断(EA=1)。 - 在主循环中,首先清零TH0和TL0,然后初始化计数器counter。 3. **频率测量算法**: - 通过读取xdatashu0至xdatashu3的值,将它们转换成频率测量结果,并存储到temp数组中。 - 使用一个计时器周期来确定频率,这里设置了30次定时器溢出作为一个周期,这可能是一个简化模型,实际应用中会根据具体硬件和测量需求调整。 4. **显示与转换**: - 提供了一个名为display的函数,可能是用来将测量值转换为可显示的形式,例如ASCII码表,通过table[]数组进行映射。 - 另外,还定义了float类型的变量(如h1、h2、fx0和fx)用于浮点数的处理,可能涉及到频率的计算。 5. **主函数**: - 无限循环结构使得程序持续运行,等待新的频率计数数据,并在适当的时候进行频率测量和显示。 这份代码是一个基本的频率计程序,它利用C51的定时器功能对输入信号进行计数,通过转换和显示模块将计数结果转换为可读的频率值。注意,实际应用中可能需要根据具体硬件配置和需求对代码进行调整和优化。