基于单片机的频率计设计[1].doc
- 格式:doc
- 大小:821.50 KB
- 文档页数:23
基于单片机控制的数字频率计设计1. 简介在电子领域中,频率对于信号处理和电路设计至关重要。
频率计是一种测量电信号频率的仪器,它可以帮助工程师们更好地理解信号的特性,并在电路设计和调试中起到至关重要的作用。
在本文中,我将详细探讨基于单片机控制的数字频率计的设计原理和实现方法,希望能帮助读者全面理解这一主题。
2. 频率计原理频率计的原理在于对输入信号的周期进行测量,并通过适当的算法将其转换为频率。
基于单片机的数字频率计设计采用计数的方法来测量信号周期,然后利用计数的结果和时间基准来计算频率。
在这个过程中,单片机起到了关键的控制和计算作用,能够精准地对输入信号进行测量和处理。
3. 单片机选择在设计数字频率计时,单片机的选择至关重要。
一般情况下,我们会选择性能稳定、计算能力强、易于编程的单片机作为核心控制芯片。
常用的单片机包括STC系列、STM32系列和PIC系列等,它们都具有较好的性能和可靠性,适合用于数字频率计的设计和实现。
4. 系统设计数字频率计系统一般由信号输入、单片机控制、显示模块和电源模块等部分组成。
在系统设计中,信号输入模块用于接收待测信号,并将其转换为数字信号输入到单片机中;单片机控制模块负责对输入信号进行计数和处理,并输出结果到显示模块;显示模块一般采用数码管或液晶显示屏,用于显示测量的频率数值。
电源模块需要为整个系统提供稳定的工作电压,确保系统正常运行。
5. 算法设计在数字频率计的设计中,算法的设计对于测量结果的准确性和稳定性至关重要。
一般而言,常见的测频算法包括时间测量法、计数器法和分频计数法等。
这些算法都需要考虑精确的计数和时间基准,以确保测量结果的准确性。
在算法设计中还需要考虑到单片机的计算能力和存储空间,选择合适的算法和数据结构来降低系统的复杂度和成本。
6. 实现方法基于单片机的数字频率计的实现方法有多种,可以根据具体的需求和应用场景选择合适的硬件和软件方案。
在硬件设计方面,需要考虑信号输入电路、计数电路、显示电路和电源电路等部分;在软件设计方面,需要编写相应的程序代码,实现信号测量、数据处理和显示控制等功能。
基于单片机的频率计设计一、频率计的基本原理频率的定义是单位时间内信号周期变化的次数。
要测量一个信号的频率,通常需要对其周期进行测量,然后通过计算得出频率值。
常见的测量频率的方法有直接测频法和间接测频法。
直接测频法是在一定的时间间隔内,对输入信号的脉冲个数进行计数,从而得到频率值。
间接测频法则是先测量信号的周期,然后通过倒数计算出频率。
在基于单片机的频率计设计中,通常采用直接测频法。
通过单片机内部的定时器和计数器功能,对输入信号的脉冲进行计数,并结合定时时间,计算出输入信号的频率。
二、硬件设计1、单片机选择在本设计中,选择一款常见的单片机,如 STC89C52 单片机。
它具有丰富的资源,包括定时器、计数器、I/O 端口等,能够满足频率计的设计需求。
2、信号输入电路为了将外部输入的信号引入单片机,需要设计一个信号调理电路。
该电路包括限幅、滤波和整形等部分,以保证输入信号的稳定性和可靠性。
限幅电路用于限制输入信号的幅度,防止过大的信号损坏单片机。
滤波电路可以去除输入信号中的噪声和干扰。
整形电路将输入的不规则信号整形成标准的方波信号,便于单片机进行计数。
3、显示电路为了将测量得到的频率值显示出来,需要选择合适的显示器件。
常见的显示器件有液晶显示屏(LCD)和数码管。
在本设计中,采用八位共阳极数码管作为显示器件。
通过单片机的 I/O 端口控制数码管的段选和位选,实现频率值的动态显示。
4、电源电路为整个系统提供稳定的电源是保证系统正常工作的关键。
可以使用常见的 5V 直流电源适配器,通过稳压芯片将输入电压转换为单片机和其他器件所需的稳定电压。
三、软件设计1、主程序流程主程序首先进行系统初始化,包括单片机内部资源的初始化、定时器和计数器的初始化、I/O 端口的初始化等。
然后,等待外部输入信号的到来。
当检测到输入信号的上升沿时,启动定时器和计数器开始工作。
在定时时间结束后,读取计数器的值,并计算出频率值。
最后,将频率值转换为十进制,并通过显示电路显示出来。
基于单片机的频率计设计1. 1 系统组成频率计由单片机89C51 、信号予处理电路、串行通信电路、测量数据显示电路和系统软件所组成,其中信号予处理电路包含待测信号放大、波形变换、波形整形和分频电路。
系统软件包括测量初始化模块、显示模块、信号频率测量模块、量程自动转换模块、信号周期测量模块、定时器中断服务模块、浮点数格式化模块、浮点数算术运算模块、浮点数到BCD 码转换模块。
1. 2 处理方法本频率计的设计以AT89C51 单片机为核心,利用它内部的定时/ 计数器完成待测信号周期/ 频率的测量。
单片机AT89C51 内部具有2 个16 位定时/ 计数器,定时/ 计数器的工作可以由编程来实现定时、计数和产生计数溢出中断要求的功能。
设计综合考虑了频率测量精度和测量反应时间的要求。
例如当要求频率测量结果为3 位有效数字,这时如果待测信号的频率为1Hz ,则计数闸门宽度必须大于1000s。
为了兼顾频率测量精度和测量反应时间的要求,把测量工作分为两种方法。
当待测信号的频率大于100Hz 时,定时/ 计数器构成为计数器,以机器周期为基准,由软件产生计数闸门,这时要满足频率测量结果为3 位有效数字,则计数闸门宽度大于1s 即可。
2. 1 信号予处理电路频率计信号予处理电路如图3 所示,它由四级电路构成。
第一级为零偏置放大器,当输入信号为零或者为负电压时,三极管截止,输出高电平;当输入信号为正电压时,三极管导通,输出电压随着输入电压的上升而下降。
零偏置放大器把如正弦波样的正负交替波形变换成单向脉冲,这使得频率计既可以测量任意方波信号的频率,也可以测量正弦波信号的频率。
3. 1 数据处理过程在频率计开始工作,或者完成一次频率测量,系统软件都进行测量初始化。
测量初始化模块设置堆栈指针(SP) 、工作寄存器、中断控制和定时/ 计数器的工作方式。
定时/ 计数器的工作首先被设置为计数器方式, 即用来测量信号频率。
在对定时/ 计数器的计数寄存器清0 后,置运行控制位TR 为1 ,启动对待测信号的计数。
基于单片机简易频率计设计一、前言频率计是一种测量电信号频率的仪器,其应用广泛。
本文将介绍如何基于单片机设计一个简易的频率计。
二、设计思路本次设计采用单片机作为核心控制芯片,通过捕获输入信号的上升沿和下降沿来计算出信号的周期,从而得到信号的频率。
具体实现过程如下:1. 选择合适的单片机选择一款适合本次设计要求的单片机,需要考虑其性能、价格、易用性等因素。
常见的单片机有STC89C52、AT89C51等。
2. 硬件电路设计硬件电路主要包括输入端口、捕获定时器模块、显示模块等。
其中输入端口需要接收待测信号,捕获定时器模块用于捕获信号上升沿和下降沿的时间,显示模块则用于显示测得的频率值。
3. 软件程序设计软件程序主要包括初始化程序、捕获中断服务函数和主函数等。
其中初始化程序用于设置捕获定时器模块和显示模块参数,捕获中断服务函数则是实现对输入信号上升沿和下降沿时间的捕获与计算,主函数则用于控制程序流程和显示结果。
三、硬件设计1. 输入端口设计输入端口需要接收待测信号,一般采用BNC接头。
由于输入信号可能存在较高的电压和噪声,因此需要加入滤波电路以保证输入信号的稳定性。
2. 捕获定时器模块设计捕获定时器模块是本次设计的核心部分,其主要功能是捕获输入信号的上升沿和下降沿时间,并通过计算得到信号周期和频率值。
常见的捕获定时器模块有16位定时器/计数器、32位定时器/计数器等。
在本次设计中,我们选择了16位定时器/计数器。
3. 显示模块设计显示模块主要用于显示测得的频率值。
常见的显示模块有LED数码管、LCD液晶屏等。
在本次设计中,我们选择了LCD液晶屏。
四、软件程序设计1. 初始化程序初始化程序主要包括设置捕获定时器模块参数、设置LCD液晶屏参数等。
2. 捕获中断服务函数捕获中断服务函数是实现对输入信号上升沿和下降沿时间的捕获与计算,其具体实现过程如下:(1)当捕获定时器模块捕获到输入信号上升沿时,记录当前时间值。
题目:基于单片机的数字频率计设计2015年6月19日基于单片机的数字频率计设计摘要随着电子信息产业的不断发展,信号频率的测量在科技研究和实际应用中的作用日益重要。
传统的频率计通常是用很多的逻辑电路和时序电路来实现的,这种电路一般运行缓慢,而且测量频率的范围比较小。
考虑到上述问题,本文设计了一个基于单片机技术的数字频率计。
首先,我们把待测信号经过放大整形;然后把信号送入单片机的定时计数器里进行计数,获得频率值;最后把测得的频率数值送入显示电路里进行显示。
本文从频率计的原理出发,介绍了基于单片机的数字频率计的设计方案,选择了实现系统的各种电路元器件,并对硬件电路用Multisim和Proteus进行了仿真。
关键字:单片机,数字频率计,LED数码管,软件仿真目录一、引言 (1)1.1 数字频率计的发展和意义 (1)1.2 数字频率国内外的发展形势 (1)二、系统总体设计 (3)2.1 系统设计要求 (3)2.2 测频方法 (3)2.3 系统设计思路 (3)2.4 系统设计框图 (4)三、系统硬件设计 (5)3.1 单片机模块 (5)3.1.1 AT89C52介绍 (5)3.1.2 单片机引脚分配 (6)3.1.3 复位电路 (6)3.1.4 定时/计数器 (6)3.2 放大整形模块 (7)3.2.1 与非门74LS00 (8)3.2.2 放大整形模块原理图 (8)3.3 分频模块 (8)3.3.1 分频器74LS161芯片 (9)3.3.2 多路选择器74LS151芯片 (9)3.3.3 分频模块原理图 (10)3.4 显示电路 (10)3.4.1 频率数值显示电路 (11)3.4.2 频率数值单位显示电路 (11)四、系统软件设计 (12)4.1 开始 (12)4.2 初始化模块 (12)4.3 频率测量模块和量程自动切换模块 (13)4.4 显示模块 (14)4.5 延时模块 (14)五、数字频率计仿真 (15)5.1 放大整形电路仿真 (15)5.1.1 仿真软件MULTISIM 10.0仿真整形电路 (15)5.1.2 仿真放大整形电路 (15)5.2 频率计仿真 (16)5.2.1 用KEIL软件编程 (16)5.3.2 使用软件Proteus仿真频率计 (16)5.3.3 频率计仿真运行调试 (17)六、结论 (20)致谢 (21)参考文献 (21)附录A (23)程序源代码: (23)附录B (29)仿真效果图: (29)一、引言1.1 数字频率计的发展和意义随着电子技术的飞速发展,各类分立电子元件及其所构成的相关功能单元,已逐步被功能更强大、性能更稳定、使用更方便的集成芯片所取代。
基于51单片机的频率计的设计频率计是一种测量信号频率的仪器或装置,其原理是通过对信号进行计数和定时来测量信号的周期,并进而计算出信号的频率。
在本篇文章中,我们将设计一个基于51单片机的频率计。
设计方案:1.硬件设计:(1)时钟电路:使用11.0592MHz晶振为主频时钟源。
(2)信号输入:选择一个IO口作为信号输入口,通过外部电平转换电路将信号转换为51单片机能够处理的电平。
(3)显示装置:使用一个数码管或液晶显示屏来输出测量结果。
2.软件设计:(1)初始化:设置51单片机的工作模式、引脚功能、定时器等。
初始化时,将IO口配置为输入模式,用于接收外部信号。
(2)定时器设置:利用定时器来进行时间的测量,可以选择适当的定时器和计数器来实现定时功能。
(3)外部中断设置:使用外部中断来触发定时器,当外部信号边沿发生变化时,触发定时器的启动或停止。
(4)中断处理:通过中断处理程序来对定时器进行启动、停止和计数等操作。
(5)频率计算:将计数结果经过一定的处理和运算,计算出信号的频率。
(6)结果显示:将计算得到的频率结果通过数码管或液晶显示屏输出。
3.工作流程:(1)初始化设置:对51单片机进行初始化设置,包括端口、定时器、中断等的配置。
(2)外部信号输入:通过外部电平转换电路将要测量的信号输入至51单片机的IO口。
(3)定时测量:当外部信号发生边沿变化时,触发外部中断,启动定时器进行定时测量。
(4)停止计时:当下一个信号边沿出现时,中断处理程序停止定时器,并将计数结果保存。
(5)频率计算:根据定时器的设置和计数结果,计算出信号的周期和频率。
(6)结果显示:将计算得到的频率结果通过数码管或液晶显示屏进行显示。
4.注意事项:(1)确保信号输入的稳定性:外部信号输入前需要经过滤波处理,保证稳定且无杂波的输入信号。
(2)测量精度的提高:如有必要,可以通过增加定时器的位数或扩大计数范围来提高测量精度。
(3)显示结果的优化:可以根据需要,通过增加缓冲区、优化数码管显示等方式来改善结果的可读性。
基于单片机的数字频率计设计这个程序是正确的可以在单片机上运行目录1 引言 (1)2 硬件设计 (2)3 软件设计 (7)4 调试过程及问题分析 (11)5 结论 (12)参考文献 (12)附件 (13)一.引言在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案和测量结果都有十分密切的关系,因此频率的测量就显得更为重要。
测量频率的方法有很多种,其中电子计数器测量频率具有精度高,使用方便,测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。
电子计数器测频有两种方式:一是直接测频法,即在一定闸门时间内测量被测信号的脉冲个数;二是间接测频法,如周期测频法。
直接测频法适用月高频信号的频率测量,间接测频法适用于低频信号的测量。
本次为测量方波信号的数字频率计设计,设计要求如下:(1)频率测量:0Hz~250kHz;(2)频率,周期显示切换(3)用图形液晶LCD12864显示数值和单位设计思路由于本次测量范围较大,为保证精度我们分两段进行测量,一是500HZ-250KHZ我们用直接测频法进行测量,测量1秒内得周期个数N,被测量信号的周期为T,定时1秒,则1=NT。
由于单片机系统的标准频率比较稳定,而系统标准信号频率的误差通常情况下很小,系统的量化误差小于1,所以由式1=NT可知频率测量的误差主要取决于N值的大小,N值越大,误差越小,测量的精度越高。
因此,我们也可以取Ts内产生M个方波,则频率为f=M/T。
二是0-500HZ我们用周期测频法测量,计下两个下降沿的时间即测量周期,再计算出测量频率。
对于显示切换我们设置一个标志位,检测当标志位为高电平时为周期显示,低电平时为频率显示基本设计原理500HZ-250KHZ时,若在一定时间间隔T内测得这个周期性信号的重复变化次数N,则其频率可表示为f=N/T。
信号接外部中断,中断方式为下降沿,又程序设置一个变量,外部中断一次则变量加一,当信号来到时,定时器开通,由中断计数;定时器溢出时关闭,中断变量停止计数。
基于单片机的频率计的设计与制作一、设计背景与意义频率是指在单位时间内信号的周期次数或波形的周期数,是电子通信、自动化控制、测量仪器等领域中常用的参数之一、频率计是一种用来测量信号频率的仪器,广泛应用于各个领域。
本文将设计一种基于单片机的频率计,具有结构简单、精度高、易于实现批量生产等特点。
二、设计原理与电路结构本频率计的设计原理基于定时器的计数功能。
具体电路结构如下:1.接收电路:接收被测信号,并经过滤波电路对信号进行滤波处理。
2.方波信号发生电路:采用集成电路产生频率为1MHz的方波信号。
3.单片机控制电路:使用单片机控制定时器1进行计数,并通过串口与PC机进行通信。
三、程序设计与实现1.初始化设置:设置单片机的工作模式和波特率,以及定时器的计数参数。
2.接收输入信号:从信号输入引脚读取信号,并通过滤波电路进行滤波处理。
3.方波信号计数:使用定时器对方波信号进行计数,并保存计数值。
4.系统中断处理:当定时器溢出时,触发中断函数对计数值进行处理。
5.输出结果:将计数值发送到PC机上,通过串口进行通信。
四、制作过程与方法1.电路制作:根据上述电路结构图,选择合适的元器件进行电路制作,焊接完整电路板。
2.程序编写:使用C语言或汇编语言编写单片机的程序,实现频率计的功能。
3.调试测试:将电路板接入供电并连接到PC机上,通过串口与PC机进行通信,测试频率计的测量精度和稳定性。
4.性能优化:对频率计的测量精度和稳定性进行优化,例如增加滤波电路、调整定时器参数等。
五、结论与展望本文设计与制作了一种基于单片机的频率计,实现了对输入信号频率的测量。
经过实际测试,频率计具有测量精度高、稳定性好等优点,能够满足实际应用的需求。
在今后的研究中,可以进一步优化频率计的设计,提高测量精度和稳定性,并拓展其在更多领域的应用。
基于单片机的频率计设计频率计是一种常用仪器,用于测量信号的频率。
本文将介绍一种基于单片机的频率计的设计。
设计思路:1. 选择合适的单片机:由于频率计需要精确测量信号的周期,所以选择一个具有高精度和稳定性的单片机至关重要。
常用的单片机有AT89S51、ATmega328等。
2.连接外部时钟源:为了提高计时的精度,可以选择连接一个外部时钟源,如晶振。
将晶振连接到单片机的计时器输入引脚,通过计时器来计算脉冲信号的周期。
3.配置计时器模式:根据信号的特性,选择合适的计时器模式。
常用的模式有边沿计数模式和脉冲计数模式。
边沿计数模式适用于非连续的信号,脉冲计数模式适用于连续的信号。
4.初始化计时器:在程序中对计时器进行初始化,设置计时器的工作模式、计数范围等参数。
还需设置中断使能和相应的中断处理函数。
5.开始计时:当信号输入到单片机的计时器引脚时,通过中断处理函数开始计时,记录起始时间。
6.结束计时:当信号的周期结束时,再次触发中断,记录结束时间。
7.计算频率:根据起始时间和结束时间,计算出信号的周期,再通过周期计算出频率。
可以选择在显示器上显示频率或者通过串口通信输出。
8.重复计算:根据需要,可以选择连续计算多个信号的频率,以增加测量的准确性。
这个设计是一个基本的频率计,可以测量连续或间断的信号频率。
根据实际需求,还可以进行一些改进和扩展,例如可以加入滤波电路来提高信号的稳定性和抗干扰能力,还可以增加输入和输出接口,方便与其他仪器和设备进行连接和通信。
总结:基于单片机的频率计是一种常见的测量仪器,通过利用计时器来测量信号的周期,从而计算出信号的频率。
这种设计简单易行,稳定性好,可以满足大多数频率测量的需求。
在实际应用中,可以根据具体要求进行相应的改进和扩展。
目录1 前言 (1)2 频率计原理 (1)3 设计思想 (2)4 51单片机系统的硬件连接及调试 (2)5 单元程序的设计 (4)5.1 1s定时 (4)5.2 T1计数程序 (6)5.3 频率数据采集 (7)5.4 进制转换 (7)5.5 数码显示 (11)6 频率计系统总体程序 (15)7 程序的调试 (20)8 设计心得 (22)参考文献 (22)1 前言单片机是20世纪中期发展起来的一种面向控制的大规模集成电路模块,具有功能强、体积小、可靠性高、价格低廉等特点,在工业控制、数据采集、智能仪表、机电一体化、家用电器等领域得到了广泛的应用,极大的提高了这些领域的技术水平和自动化程度。
51系列单片机是国内目前应用最广泛的一种8位单片机之一,随着嵌入式系统、片上系统等概念的提出和普遍接受及应用。
51系列及其衍生单片机还会在继后很长一段时间占据嵌入式系统产品的低端市场,因此,作为新世纪的大学生,在信息产业高速发展的今天,掌握单片机的基本结构、原理和使用是非常重要的。
本次课程设计的内容是使用89C51RC单片机最小系统设计频率计系统,系统以单片机为主控单元,主要用于对方波频率的测量。
2频率计原理频率的测量实际上就是在1s时间内对信号进行计数,计数值就是信号频率。
用单片机设计频率计通常采用两种办法,第一种方法是使用单片机自带的计数器对输入脉冲进行计数;第二种方法是单片机外部使用计数器对脉冲信号进行计数,计数值再由单片机读取。
第一种方法的好处是设计出的频率计系统结构和程序编写简单,成本低廉,不需要外部计数器,直接利用所给的单片机最小系统就可以实现。
这种方法的缺陷是受限于单片机计数的晶振频率,输入的时钟频率通常是单片机晶振频率的几分之一甚至是几十分之一,在本次设计使用的98C51单片机,由于检测一个由“1”到“0”的跳变需要两个机器周期,前一个机器周期测出“1”,后一个周期测出“0”。
故输入时钟信号的最高频率不得超过单片机晶振频率的二十四分之一。
第二种方法的好处是输入的时钟信号频率可以不受单片机晶振频率的限制,可以对相对较高频率进行测量,但缺点是成本比第一种方法高,设计出来的系统结构和程序也比较复杂。
由于成本有限,本次设计中采用第一种方法,因此输入的时钟信号最高频率不得高于11.0592MHz/24=460.8KHz。
对外部脉冲的占空比无特殊要求。
根据频率检测的原理,很容易想到利用51单片机的T0、T1两个定时/计数器,一个用来定时,另一个用来计数,两者均应该工作在中断方式,一个中断用于1s时间的中断处理,一个中断用于对频率脉冲的计数溢出处理,(对另一个计数单元加一),此方法可以弥补计数器最多只能计数65536的不足。
3 设计思想明确频率计工作原理以后,为了更方思路更清晰地对程序编写,还应该作出程序的总体框图,如图3.1所示。
程序的主体可以分为4个模块:定时计数、采集数据、进制转换和数码显示,当然,程序还应该包括很多细节问题,例如为了数码显示通过CI2通信的方式把需要显示的数据传送给数码管管理芯片ZLG7290;为了数码管能清晰的显示数据,需要先对管理芯片对应的显示区域清零;通常十进制数字高位的零时不用显示的,所以还应该对数码显示高位的零屏蔽掉。
4 51单片机系统的硬件连接及调试本次课程设计使用的单片机系统是根据老师提供的系统原件,自己焊接而成。
焊接完成以后,首先烧写控制LED发光二极管闪烁的程序后,发现发光二极管是根据自己的设计而闪烁,烧写程序控制发光数码管显示时,数码管同样是根据自己的设计而显示的字符,说明本次51单片机的硬件焊接取得成功。
此次设计要求制作一频率计系统,需要使用的硬件主要包括51单片机芯片,ZLG7290数码管管理芯片和数码管。
另外还是用到排线若干,下载线及电源线。
其中51单片机硬件链接如图4.1所示,ZLG7290芯片连接图如图4.2所示,数码管连接图如图4.3所示。
图4.1 51单片机硬件连接图图4.2 ZLG7290硬件连接图图4.3 数码管硬件连接图5单元程序的设计5.1 1s定时本次设计选用定时器T0完成定时功能,选用方式1时最多也只能定时/(12⨯,显然不能满足定时1s的要求,可以用下面这种方法解11⨯655366=0592.ms711.10)决:采用T0定时10ms,连续循环定时100次即可完成1s定时,用一个计数单元20H存放循环的次数,每一次循环20H单元自减1,当20H单元为零时则1s定时到时。
其程序流程图如图5.1所示。
图5.1 1s定时流程图定时器T0初始化程序如下:MOV IE,#8AH ;开放T0、T1中断MOV TMOD,#51H ;T0定时,T1计数,都工作于方式一MOV 20H,#100 ;100*10ms=1sSETB TR0根据流程图设计的1s定时程序如下:T0INT:DJNZ 20H,NEXTNEXT:MOV TH0,#0DCH ;1s还未到则置初值继续定时MOV TL0,#00HEXIT:RETI5.2 T1计数程序设计中T1采用计数功能,需要注意的一个问题是,输入的待测时钟信号的频率最高可以达到460800Hz,但计数器最多只能计数65536次,显然需要对计数单元进行扩展,扩展的思路是除了计数器T1的TH1和TL1用于计数外,再选用一个计数单元23H,每当计数器T1溢出回零时产生中断,中断程序执行23H单元自增1,这样,当一秒到时时采集的计数数据,23H单元存放的是数据的最高位,TH1存放的是数据的次高位,TL1存放的是数据的最低位。
当然,这里所说的“最高位”“次高位”以及“最低位”都是针对十六进制而言的。
T1计数程序的流程图如图5.2所示。
图5.2 T1计数流程图计数器T1初始化程序如下:MOV IE,#8AH ;开放T0、T1中断MOV TMOD,#51H ;T0定时,T1计数,都工作于方式一MOV TH1,#00HMOV TL1,#00H ;计数初值为零SETB TR1根据流程图设计的计数程序如下:MOV 21H,#0MOV 22H,#0MOV 23H,#0 ;此三个单元存放采集到的频率T1INT:INC 23H ;计数器溢出则23H单元自增1RETI5.3 频率数据采集到1s定时时,存储计数器T1以及扩充计数单元23H记录的数据即为输入时钟信号的频率,为了保证记录的频率精确度,到1s定时后应立即停止T1的计数,因为指令的执行也需要时间,并且待测的时钟信号频率越高,指令执行所需要的时间就越不能忽略,这里采用的指令为CLR TR1。
数据采集程序如下:CLR TR0MOV 22H,TH1 ;1s定时到则采集数据MOV 21H,TL1AJMP EXIT5.4 进制转换从计数器采集到的频率数据是十六进制的,如果直接把这些数据送给数码管显示显然很不直观,因此需要把这些数据向十进制转换。
转换的算法有两种,第一种算法的思想是对该十六进制数除以100,商为百位,余数再除以10,再得到的商为十位,余数为个位。
这种算法虽然程序的编写非常简单,但是它的局限性也非常明显,即它只能对不大于两位的十六进制数进行转换,对于大于两位的十进制数则无能为力。
这次设计的频率计频率范围远不止两位十六进制数就能记得下,所以这里采用第二种方法。
第二种方法算法的编程实现非常复杂,但是可以对任意长度的十六进制数向十进制转换。
这种算法的基本思路是:第一步将最高位的高半字节提出来,除以10,把商存储起来,余数与最高位的低半字节组合成一个字节,再除以10,再存储商,余数以此类推,直到最后一次计算得到的余数即为十进制数的个位;第二步把第一步存储的商组合成一个字节,依次除以10,仍然把每次得到的商存储起来,以此类推最后一次得到的余数即为十进制数的十位;以后也是以此类推得到十进制数的百位、千位……以上算法必须要注意的一个为题是,每次得到的余数与低位的半字节组合成一个字节时,余数必须放在该字节的高半字节,否则计算错误。
该本次频率计系待测的时钟信号的最高频率为460800Hz,对应的十六进制数为70800H,这里就以70800H转换为十进制数为例来说明这种算法。
第一步:用7H除以10,商0H余7H,把商0存储在24H单元,余数7H与下一个字节08H的高半字节0H组合成一个字节70H。
70H除以10,商BH余2H,把商BH存储在25H单元,余数2H与8H组合成一个字节28H。
28H除以10,商4H余0H,把商4H存储在26H单元,余数0H与0H组合成一个字节00H。
00H除以10,商0H余0H,把商0H 存储在27H单元,余数0H与0H组合成一个字节00H。
00H除以10,商0H余0H,把商0H存储在28H单元,余数0即为所需十进制数的个位。
第二步:把存储在24H与25H单元的商组合成一个字节0BH。
0BH除以10,同第一步,存储商,余数与下一个商组合成一个字节,再除以10,一次类推得到十进制数的十位0。
第三步:方法同第二步,得到十进制数的百位8。
第四步:方法同第三步,得到十进制数的千位0。
第五步:方法同第四步,得到十进制数的万位6和十万位4。
最后得到了十进制数460800。
图5.3详细的展示了这种进制转换算法的过程。
图5.3 进制转换说明图这种算法的编程实现如下,转换后的十进制数由低到高依次存放再50H—60H单元中。
ZHUANHUAN:;向十进制转换MOV A,23HMOV B,#0AHDIV ABMOV 24H,A ;存储第一位商;---------------MOV A,BMOV 30H,22HANL 30H,#0F0HADD A,30HSW AP AMOV B,#0AH DIV ABMOV 25H,A ;存储第二位商;---------------MOV A,BSW AP AANL 22H,#0FHADD A,22HMOV B,#0AHDIV ABMOV 26H,A ;存储第三位商;---------------MOV A,BMOV 30H,21HANL 30H,#0F0HADD A,30HSW AP AMOV B,#0AHDIV ABMOV 27H,A ;存储第四位商;---------------MOV A,BSW AP AANL 21H,#0FHADD A,21HMOV B,#0AHDIV ABMOV 28H,A ;存储第五位商MOV 50H,B ;存储十进制数个位;;;;;;;;;;;;;;;;;MOV A,24HSW AP AADD A,25HMOV B,#0AHDIV ABMOV 24H,A ;存储第一位商;---------------MOV A,BSW AP AADD A,26HMOV B,#0AH DIV ABMOV 25H,A ;存储第二位商;---------------MOV A,BSW AP AADD A,27HMOV B,#0AHDIV ABMOV 26H,A ;存储第三位商;---------------MOV A,BSW AP AADD A,28HMOV B,#0AHDIV ABMOV 27H,A ;存储第四位商MOV 51H,B ;存储十进制数十位;;;;;;;;;;;;;;;;;MOV A,24HSW AP AADD A,25HMOV B,#0AHDIV ABMOV 24H,A ;存储第一位商;---------------MOV A,BSW AP AADD A,26HMOV B,#0AH DIV ABMOV 25H,A ;存储第二位商;---------------MOV A,BSW AP AADD A,27HMOV B,#0AHDIV ABMOV 26H,A ;存储第三位商MOV 52H,B ;存储十进制数百位;;;;;;;;;;;;;;;;;MOV A,24HSW AP AADD A,25HMOV B,#0AHDIV ABMOV 24H,A ;存储第一位商;---------------MOV A,BSW AP AADD A,26HMOV B,#0AHDIV ABMOV 25H,A ;存储第二位商MOV 53H,B ;存储十进制数千位;;;;;;;;;;;;;;;;;MOV A,24HSW AP AADD A,25HMOV B,#0AHDIV ABMOV 54H,B ;存储十进制数万位MOV 55H,A ;存储十进制数十万位5.5 数码显示将采集到的频率转换为十进制数后,还不能直接将这些数送给数码显示,因为七段LED数码管内部由7个条形发光二极管和一个小圆点发光二极管组成,根据各管的亮暗组合成字符。