AT89S51单片机6位数显频率计数器实验详解

版权申诉
0 下载量 196 浏览量 更新于2024-07-02 收藏 425KB DOC 举报
本篇文档主要介绍了单片机实验31--35的内容,涉及6位数显频率计数器的设计与实现。实验目的是利用AT89S51单片机的T0和T1定时/计数器功能,对输入的0-250kHz信号频率进行精确计数,并通过8位动态数码管显示计数结果,要求计数误差控制在±1HZ以内。 首先,实验电路设计包括以下几个部分: 1. **硬件连接**: - 将单片机系统区的P0.0-P0.7端口连接到动态数码显示区的ABCDEFGH端口,负责数码管的显示; - P2.0-P2.7连接到S1-S8端口,可能用于数码管段选或控制其他功能; - P3.4(T0)端口通过导线连接到频率产生器区域的WAVE端子,作为频率信号的输入。 2. **程序设计**: - 设置定时/计数器T0工作在计数状态,T1工作在定时状态。T0用于计数输入频率,最大计数频率为fOSC/24,考虑到fOSC=12MHz,T0能准确计数到250kHz。 - T1定时50ms,共计20次,达到1秒的计时精度,确保在每个定时周期内停止T0计数并读取计数值。 - 使用C语言编写源程序,定义了数码管的显示代码、缓冲数组、计数变量等,并在`main`函数中实现了定时器中断处理、计数更新、数码管显示等功能。 程序的关键部分包括定时器中断服务程序,其中可能涉及以下步骤: - 初始化定时器T0和T1的计数器; - 设置中断触发条件,当T1定时结束时,中断标志位flag被置位; - 在中断服务程序中,检查中断标志,更新T0计数,并将计数值传递给处理函数; - 清除中断标志,然后根据计数值计算频率并更新数码管显示。 此外,文档还提到了C语言源程序的部分结构,如`dispbit`和`dispcode`数组用于编码数码管的段码和位码,`dispbuf`和`temp`数组用于存储当前显示的数据,`dispcount`和`T0count`分别记录当前计数值和T0的计数,`timecount`记录定时时间,以及`flag`和`x`作为全局变量用于控制程序流程。 这个实验着重训练了学生如何运用单片机的定时器功能进行频率计数,并通过数字接口技术将结果显示在动态数码管上,体现了基础的硬件编程和实时性控制能力。