您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页基于单片机的数字频率计设计报告

基于单片机的数字频率计设计报告

来源:华佗小知识


目 录

1 前言 ........................................................................................................................................... 2 2 频率计原理 ............................................................................................................................... 3 3 设计思想 ................................................................................................................................... 3 4 51单片机系统的硬件连接及调试 .......................................................................................... 3 5 单元程序的设计 ....................................................................................................................... 5

5.1 1s定时 ............................................................................................................................ 5 5.2 T1计数程序 ................................................................................................................... 5 5.3 频率数据采集 ................................................................................................................. 6 5.4 进制转换 ......................................................................................................................... 6 5.5 数码显示 ......................................................................................................................... 8 6 频率计系统总体程序 ............................................................................................................. 10 7 程序的调试 ............................................................................................................................. 10 8 结束语 ..................................................................................................................................... 11 参考文献 ....................................................................................................................................... 12

1

智能数字频率计的设计

专业:通信工程 姓名:*** 指导教师:***

摘 要: 采用单片机智能控制,结合外围电子电路,设计的智能数字频率计具有测量精度高,频率范围宽,稳定性好的特点,可应广泛用于各种测试场所。

关键词: 单片机,控制系统,仿真

Abstracts: Intelligent Control of the use of single-chip, combined with the external electronic circuit, design of intelligent digital frequency meter with a measurement of high precision, wide frequency range, stability, good features, can be widely used in a variety of test sites。

Keywords: Single-chip,control systems,simulation

1 前言

单片机是20世纪中期发展起来的一种面向控制的大规模集成电路模块,

具有功能强、体积小、可靠性高、价格低廉等特点,在工业控制、数据采集、智能仪表、机电一体化、家用电器等领域得到了广泛的应用,极大的提高了这些领域的技术水平和自动化程度。

51系列单片机是国内目前应用最广泛的一种8位单片机之一,随着嵌入式系统、片上系统等概念的提出和普遍接受及应用。51系列及其衍生单片机还会在继后很长一段时间占据嵌入式系统产品的低端市场,因此,作为新世纪的大学生,在信息产业高速发展的今天,掌握单片机的基本结构、原理和使用是非常重要的。本次课程设计主要用于对方波频率的测量。

2

2 频率计原理

频率的测量实际上就是在1s时间内对信号进行计数,计数值就是信号频率。用单片机设计频率计通常采用的办法是使用单片机自带的计数器对输入脉冲进行计数;好处是设计出的频率计系统结构和程序编写简单,成本低廉,不需要外部计数器,直接利用所给的单片机最小系统就可以实现。缺陷是受限于单片机计数的晶振频率,输入的时钟频率通常是单片机晶振频率的几分之一甚至是几十分之一,在本次设计使用的98C51单片机,由于检测一个由“1”到“0”的跳变需要两个机器周期,前一个机器周期测出“1”,后一个周期测出“0”。故输入时钟信号的最高频率不得超过单片机晶振频率的二十四分之一。根据频率检测的原理,很容易想到利用51单片机的T0、T1两个定时/计数器,一个用来定时,另一个用来计数,两者均应该工作在中断方式,一个中断用于1s时间的中断处理,一个中断用于对频率脉冲的计数溢出处理。

3 设计思想

明确频率计工作原理以后,为了思路更清晰地对程序编写,还应该作出程序的总体框图,如图3.1所示。程序的主体可以分为4个模块:定时计数、采集数据、进制转换和数码显示。

1s定时开始同时开始计数定时到读取数据十六进制向十进制转换数码管显示图3.1 频率计系统总体框图

4 51单片机系统的硬件连接及调试

本次课程设计使用的单片机系统是根据老师提供的系统原件,自己焊接而成。焊接完成以后,首先烧写控制LED发光二极管闪烁的程序后,发现发光二极管是根据自己的设计而闪烁,烧写程序控制发光数码管显示时,数码管同样是根据自己的设计而显示的字符,说明本次51单片机的硬件焊接取得成功。

此次设计要求制作一频率计系统,需要使用的硬件主要包括51单片机芯片,ZLG7290数码管管理芯片和数码管。另外还是用到排线若干,下载线及

3

电源线。其中51单片机硬件链接如图4.1所示,ZLG7290芯片连接图如图4.2所示,数码管连接图如图4.3所示。

4.1图 51单片机硬件连接图

图4.2 ZLG7290硬件连接图

4

图4.3 数码管硬件连接图

5 单元程序的设计

5.1 1s定时

本次设计选用定时器T0完成定时功能,选用方式1时最多也只能定时,显然不能满足定时1s的要求,可以用下面这种方法解决:采用T0定时10,连续循环定时100次即可完成1s定时,用一个计数单元20H存放循环的次数,每一次循环20H单元自减1,当20H单元为零时则1s定时到时。

5.2 T1计数程序

设计中T1采用计数功能,需要注意的一个问题是,输入的待测时钟信号的频率最高可以达到460800Hz,但计数器最多只能计数65536次,显然需要对计数单元进行扩展,扩展的思路是除了计数器T1的TH1和TL1用于计数外,再选用一个计数单元23H,每当计数器T1溢出回零时产生中断,中断程序执行23H单元自增1,这样,当一秒到时时采集的计数数据,23H单元存放的是数据的最高位,TH1存放的是数据的次高位,TL1存放的是数据的最低位。当然,这里所说的“最高位”“次高位”以及“最低位”都是针对十六进制而言的。T1计数程序的流程图如图5.1所示。

5

开始23H=0T1初始化置初值0计数开始计数溢出产生中断Y23H=23H+11s到时否?N采集数据结束图5.1 T1计数流程图

5.3 频率数据采集

到1s定时时,存储计数器T1以及扩充计数单元23H记录的数据即为输入时钟信号的频率,为了保证记录的频率精确度,到1s定时后应立即停止T1的计数,因为指令的执行也需要时间,并且待测的时钟信号频率越高,指令执行所需要的时间就越不能忽略,这里采用的指令为CLR TR1。

5.4 进制转换

从计数器采集到的频率数据是十六进制的,如果直接把这些数据送给数码管显示显然很不直观,因此需要把这些数据向十进制转换。转换的算法有两种,第一种算法的思想是对该十六进制数除以100,商为百位,余数再除以10,再得到的商为十位,余数为个位。这种算法虽然程序的编写非常简单,

6

但是它的局限性也非常明显,即它只能对不大于两位的十六进制数进行转换,对于大于两位的十进制数则为力。这次设计的频率计频率范围远不止两位十六进制数就能记得下,所以这里采用第二种方法。

第二种方法算法的编程实现非常复杂,但是可以对任意长度的十六进制数向十进制转换。这种算法的基本思路是:第一步将最高位的高半字节提出来,除以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.2详细的展示了这种进制转换算法的过程。

7

(23H)=07H07H/10商0余7

(22H)=08H70H/10商B余228H/10商4余000H/10商0余0(21H)=00H00H/10商0余0 个位为00BH/10商1余114H/10商2余000H/10商0余000H/10商0余0十位为012H/10商1余880H/10商C余81CH/10商2余82E/10商4余68CH/10商E余080H/10商C余8百位为8千位为0万位为6十万位为4图5.2 进制转换说明图

5.5 数码显示

将采集到的频率转换为十进制数后,还不能直接将这些数送给数码显示,因为七段LED数码管内部由7个条形发光二极管和一个小圆点发光二极管组成,根据各管的亮暗组合成字符。本次设计所给数码管十进制数显示代码如下所示。

表5.1 LED十进制字形显示代码表

0 --------------------------- FC 1 --------------------------- 60 2 --------------------------- DA 3 -------------------------- F2 4 --------------------------- 66 5 -------------------------- B6 6 --------------------------- BE 7 --------------------------- E0 8 --------------------------- FE 9 --------------------------- E6 将十进制数转换为相应的LED显示的代码,最容易实现的编程方法就是查表,因数码

8

管最多只需要显示六位,只需要查六次表就可以了,图5.4是将十进制数对应的LED显示代码存入以60H为首单元的流程图。

开始R0=#50HR1=#5FHR2=#6DPTR=#TAB@R0→A

@A+DPTR→AR0+1→R0R1+1→R1A→@R1NR2-1=0?Y结束

图5.3 十进制数转换为显示代码流程图

MOV @R1,A ;把即将数码管显示的数据送入以60H为首的单元 DJNZ R2,NEXT3

TAB:DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H 得到十进制数的LED显示代码以后,就可以把这些代码送入数码管显示了,方法是50单片机先通过I2C通信的方式把显示代码发送给数码管管理芯片ZLG7290相应的显示区域,就可以通过数码管显示频率了。51单片机通过

I2C通信传送数据的过程如图5.5所示。

9

图5.4 IC通信过程框图

2发送起始位发送控制字并检查应答位发送地址并检查应答位多字节发送并检查应答位发送停止位6 频率计系统总体程序

各单元子程序已经设计完毕,将各子程序通过适当的指令链接起来,总程序的第一部分为T0、T1初始化,第二部分为1s定时,第三部分为计数,第四部分为采集频率,第五福分为进制转化,第六部分为数码显示,这几各部分即构成了频率计系统的总体程序,如附录所示。

7 程序的调试

编写的频率计总体程序编译成HEX文件,烧写入51单片机内,P3.5角输入一定频率(较小)的时钟信号,观察数码管显示的频率与输入信号的频率相符,逐渐增大输入信号的频率,数码显示的频率开始出现误差,并且误差随着输入信号频率的增加而增加,当输信号达到频率计所允许输入的最高频率时,误差达到了650Hz,即误差

650100%0.14% 460800此误差很小可以认误差在允许的范围内,即频率计的计频功能满足要求。 另外在观察数码管显示的时候,发现高位的“0”仍然能够显示,而通常十进制的高位的“0”通常是省略的。显示“0”的原因是没有考虑到频率值小于六位十进制数的情况,当频率小于六位十进制数时,传送到ZLG7290显示区的数据仍然是六位,高位由“0”填充,因此会出现高位显示“0”的情况。为了解决这个问题,需要另外添加一段屏蔽高位的“0”的程序。解决的

10

思想是把高位“0”的个数记下,设为n,那么只需要传送给管理芯片的数据位数为6-n。程序流程图如图7.1所示。

图7.1 屏蔽高位“0”流程图

开始R3=#0R0=#55H@R0→AR0-1→R0A=0?NA=#6YR3+1→R3A-R3→R2结束程序经过调试以后,数码管从高位第一位不为“0”的数开始显示。至此,本次课程设计制作的频率计系统无论是计频功能还是显示功能都取得成功。

8 结束语

11

本次课程设计有较强的综合性,不仅要求设计者能灵活使用单片机的各种指令,熟练使用单片计计数器余定时器,熟练编写顺序结构程序,循环结构程序以及分支结构程序,还要求对单片机的电路连接结构,对数码管管理芯片有明确清晰的了解与认识,否则在设计的第一步就会遇到障碍。

经过一个多星期的资料收集与查询,又经过几天的总体构思,再脑中对频率计的设计有了一个总体的框架,对程序的流程图也有一个基本的结构,最后结合参考资料,结合自己对单片机知识的认识,又经过两天对程序的编写以及程序的改进,最后终于完成了本次课程设计各各项内容。通过设计学到了很多,例如面对问题要保持冷静,特别是在程序的编写这一块,要找出程序的错误一定要有一个冷静的头脑,否则很难发现错误甚至是越改越错。另外我还认识到与他人合作的重要性,虚心向别人学习,吸取别人编写程序的一些好的风格与特点再融入到自己的程序中,都是一些不错的方法。

参考文献

12

[1] 李群芳.单片微型计算机与接口技术(第二版).北京:电子工业出版社,2005 [2] 蒋立培.单片危机系统使用教程.北京:机械工业出版社,2004 [3] 凌玉华.单片机原理及应用系统设计.长沙:中南大学出版社,2006 [4] 王琼.单片机原理及应用实践教程.合肥:合肥工业大学出版社,2005 [5] 刘丹.例说8051.北京:人民邮电出版社,2006

附录 汇编源程序代码

;ydg于2001年,第1秒显示012345

;T0用于产生秒信号

;T1用于计数,溢出送5FH,1秒后取出,5FH-62H,TH1-61H,TL1-60H ;1MHZ频率计

P_B1 EQU P3.7 P_B2 EQU P3.1 P_B3 EQU P3.0 P_B4 EQU P3.2 P_B5 EQU P3.3 P_B6 EQU P3.4

ORG 000H ;

AJMP MAIN ;转主程序 ORG 00BH

AJMP T0_ ;转中断T0程序 ORG 01BH ;

AJMP T1_ ;转中断T1程序 ORG 30H ;

MAIN: MOV SP,#20H ; MOV P1,#000H ; MOV P3,#0FFH ;

MOV R0,#30H ;首地址 MOV R1,#006 ;字节数 MOV A,#000H ;首字节 KN: MOV @R0,A ; INC R0 ; INC A ; DJNZ R1,KN ;

13

ACALL T0_0 ;中断初始化 XS1: CLR A ;装显示第一位 MOV R0,#30H ;

MOV A,@R0 ; ACALL OUT ; CLR P_B1 ;

ACALL KL0 ;1位显示(高) SETB P_B1 ;

INC R0 ; MOV A,@R0 ; ACALL OUT ; CLR P_B2 ;

ACALL KL0 ;2 SETB P_B2 ;

INC R0 ; MOV A,@R0 ; ACALL OUT ;

CLR P_B3 ; ACALL KL0 ;3 SETB P_B3 ;

INC R0 ; MOV A,@R0 ; ACALL OUT ; CLR P_B4 ;

ACALL KL0 ;4 SETB P_B4 ;

INC R0 ; MOV A,@R0 ; ACALL OUT ; CLR P_B5 ;

ACALL KL0 ;5 SETB P_B5 ;

INC R0 ; MOV A,@R0 ; ACALL OUT ;

CLR P_B6 ; ACALL KL0 ;6

位显示 打开此位 位显示 关闭此位 位显示 位显示 打开此位 位显示(低)

14

SETB P_B6 ;关闭此位

MOV P1,#00H ;关显示器 AJMP XS1 ;

T0_: DJNZ 3AH,END_ ;中断最高位减一,不为零转结束 NOP ;1000,000US 时基修终正细调 CLR TR1 ;时间为1秒,关闭T1计数 MOV 61H,TH1 ;读T1高位 MOV 62H,TL1 ; MOV P1,#000H ; MOV P3,#0FFH ;

ACALL T0_0 ; ACALL BINBCD ; NOP ;(60H,61H,62H)(70H,71H,72H,73H)(77H) ACALL BCD8H ; NOP ;73H74H75H = 30H31H,32H33H,34H35H ACALL H_0 ;END_: RETI

T1_: INC 60H ; RETI ;

T0_0: MOV MOV 60H,#00H ; NOP

MOV 3AH,#01FH ; MOV TMOD,#51H ;T0T116位计数

MOV TH0,#07BH ;T0 MOV TL0,#094H ;T0 MOV TH1,#00H ;T1 MOV TL1,#00H ;T1 SETB TR0 ; SETB ET0 ; SETB TR1 ; SETB ET1 ; SETB EA ;CPU RET ;

OUT: MOV P1,#00H

MOV DPTR,#TAB ; MOVC A,@A+DPTR ; MOV P1,A ; RET

5FH,60H

读T1低位

关闭显示 ; 中断初始化

二进制转十进制数

双字节转单字节

高位无效0消隐 溢出次数加1= 65535,最高字节 中断结束 计数最高位 中断最高位

初始化T0置模式1,16位定时,T1置模式1,高位置初值 H

低位置初值 L 时基修终正粗调 高位置初值 H 低位置初值 L 启动T0计数 允许T0中断 启动T1计数 允许T1中断 开放中断 输出 15

;程序用途:3字节数转换为BCD码

;入口:(60H,61H,62H)为3字节24位二进制数 从高到低

;出口:(70H,71H,72H,73H)为转换的BCD码(压缩的BCD码),字节在数77H 从高到低

BINBCD: CLR A ;A 清零 MOV 70H,A ;70H清零 MOV 71H,A ;71H清零 MOV 72H,A ;72H清零 MOV 73H,A ;73H MOV 74H,A ;74H MOV 75H,A ;75H MOV 77H,#24 ;24 MOV IBTL2: CLR C ; MOV A,62H ; RLC A ; MOV 62H,A ; MOV A,61H ; RLC A ; MOV 61H,A ; MOV A,60H ; RLC A ; MOV 60H,A ; MOV A,73H ; ADDC A,73H ; DA A ; MOV 73H,A ; MOV A,72H ; ADDC A,72H ; DA A ; MOV 72H,A ; MOV A,71H ; ADDC A,71H ; DA A ; MOV 71H,A ; MOV A,70H ; ADDC A,70H ; DA A ; MOV 70H,A ; DJNZ 77H,IBTL2 ; NOP ; RET ;

BCD8H: SETB RS0

清零 清零 清零 位二进制 60H,5FH

清进位位

二进制送累加器 含进位循环左移 返回

二进制送累加器 含进位循环左移 返回

二进制送累加器 含进位循环左移 返回 一字节转换为二字节 16

MOV R0,#71H ;原码位置 MOV R1,#30H ;BCD码位置 MOV R2,#03H ;原码字数 HH: MOV A,@R0 ; SWAP A ; ANL A,#0FH ; MOV @R1,A ;

INC R1 ;BCD码加一 MOV A,@R0 ; ANL A,#0FH ; MOV @R1,A ;

INC R0 ; INC R1 ;BCD DJNZ R2,HH ; CLR RS0

RET ;

H_0: SETB RS1 MOV R0,#2FH

MOV R1,#05H ; H_1: INC R0

MOV A,@R0 ; JZ H_2 ; AJMP H_3 H_2: MOV A,#0AH

MOV @R0,A ; DJNZ R1,H_1 H_3: CLR RS1 RET

KL0: MOV R6,#005H ; KL1: MOV R7,#0FFH ; KL2: DJNZ R7,KL2 ; DJNZ R6,KL1 ; RET

TAB: DB 3FH,06H,5BH,4FH,66H ;0,1,2,3,4, DB 6DH,7DH,07H,7FH,6FH ;5,6,7,8,9, DB 80H ;

END

原码加一 码加一 灭 17

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务