基于单片机频率计的设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1前言

2

单片机是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个模块:定时计数、采集数据、进制转换和数码显示,当然,程序还应该包括很多细节问题,例如为了数码显示通过C

I2通信的方式把需要显示的数据传送给数码管管理芯片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

.

ms

71

1.

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=1s

SETB TR0

根据流程图设计的1s定时程序如下:

T0INT:

DJNZ 20H,NEXT

NEXT:MOV TH0,#0DCH ;1s还未到则置初值继续定时

MOV TL0,#00H

EXIT:RETI

5.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,#00H

MOV TL1,#00H ;计数初值为零

SETB TR1

根据流程图设计的计数程序如下:

MOV 21H,#0

MOV 22H,#0

MOV 23H,#0 ;此三个单元存放采集到的频率

T1INT:

INC 23H ;计数器溢出则23H单元自增1

RETI

5.3 频率数据采集

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

数据采集程序如下:

CLR TR0

MOV 22H,TH1 ;1s定时到则采集数据

MOV 21H,TL1

AJMP EXIT

5.4 进制转换

从计数器采集到的频率数据是十六进制的,如果直接把这些数据送给数码管显示显然很不直观,因此需要把这些数据向十进制转换。转换的算法有两种,第一种算法的思想是对该十六进制数除以100,商为百位,余数再除以10,再得到的商为十位,余数为个位。这种算法虽然程序的编写非常简单,但是它的局限性也非常明显,即它只能对不大于两位的十六进制数进行转换,对于大于两位的十进制数则无能为力。这次设计的频率计频率范

相关文档
最新文档