摘 要:在电子技术中,频率是最基本的参数之一,而且与许多电参量的测量方案、测量结果都有十分密切的关系,因此频率的测量就显得更为重要。为了实现智能化的计数测频,实现一个宽领域、高精度的频率计,一种有效的方法是将单片机用于频率计的设计当中。本课题介绍以51单片机作为核心器件,另外还包括信号输入、时钟提供、数据显示的功能模块的数字频率计的设计方法。频率计的硬件电路是用Proteus软件绘制而成,软件部分的单片机控制程序,是用汇编语言编写而成。由于本设计采用了模块化的设计方法,提高了测量频率的范围。
关键词:测量;频率计;单片机;汇编
1系统总述
1.1 89C51单片机
本频率计的设计以AT89C51单片机为核心,频率测量电路选用89C51作为频率计的信号处理核心。89C51包含2个16位定时/计数器、1个具有同步移位寄存器方式的串行输入/输出口和4K×8位片内FLASH程序存储器。16位定时/计数器用于实现待测信号的频率测量或者待测信号的周期测量。同步移位寄存器方式的串行输入/输出口用于把测量结果送到显示电路。
1.1.2 计数
本次设计的计数功能由2个74LS393完成。第一个74LS393作为计数器的低4位,第二个74LS393作为计数器的高4位。2个74LS393采用级联方式连接,第一个74LS393引脚1连接信号源,由信号源提供时钟信号。每当信号源电平由高电平变为低电平时,计数器开始计数。第二个74LS393引脚13连接第一个74LS393的引脚6,由引脚6提供时钟信号。每当第一个74LS393计数满时,在引脚6会产生一个溢出,这时引脚6由高电平变为低电平,使第二个74LS393开始计数。74LS393的输出端口分别连接到单片机的P0口上作为输入。
1.1.3显示器电路
显示器电路采用7SEG LED显示器(共阴)。因为本设计用直接频率测试方法,在标准频率信号为60MHz的情况下,能够显示接近8位有效数字,所以,电路中采用了8位LED显示器。AT89C51以串行通信方式0,即同步移位寄存器方式通过P3.0, P3.1,P3.2实现显示码传送。
1.2系统软件
单片机利用定时器T0通过其控制功能测出输入信号的周期。然后利用单片机读取计数器的计数值。计数值得出后,为方便计算要显示频率值的段码再将其转变成相应的压缩BCD代码后,调用显示消多余零和显示数据存储模块,将要显示的频率值通过查表转换成相应数据的8段码放到显示缓冲区以备显示。当然,在编程时要把十进制数据相应的8段码放在表格中,这样才能进行查表得到相应数值的段码。在此过程中另一个重要的目的是要消除最高有效位前面多余零,使多余的零的段码为不显示状态,从而能保证将频率以通常的格式显示出来。最后,将显示缓冲区的8位8段码经串口送至液晶显示模块,显示出所测的频率。
1.2.1定时
本次设计选用定时器T0完成定时功能,选用方式1时最多也只能定时,显然不能满足定时1的要求,可以用下面这种方法解决:
采用T0定时10,连续循环定时100次即可完成1定时,用R0存放循环的次数,每一次循环R0单元自减1,当R0单元为零时则1定时到时。
定时器T0初始化程序如下:
MOV TMOD,#01H
MOV @R0,#100
SETB TR0
根据流程图设计的1s定时程序如下:
T0INT:
DJNZ @R0,NEXT
NEXT:MOV TH0,#0DCH
MOV TL0,#00H
EXIT:RETI
1.2.2转换显示
采集到的频率还不能直接将这些数送给数码显示,因为七段LED数码管内部由7个条形发光二极管和一个小圆点发光二极管组成,根据各管的亮暗组合成字符。
将十进制数转换为相应的LED显示的代码,最容易实现的编程方法就是查表,因数码管最多只需要显示八位,只需要查八次表就可以了。
编写的程序如下:
MOV R1,#50H
MOV R2,#5FH
MOV DPTR,# B2B_Data
NEXT3:MOV A,@R0
MOVC A,@A+DPTR
INC R1
INC R2
MOV @R2,A
DJNZ R3,NEXT3
B2B_Data: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
2 Proteus仿真
2.1原理图的绘制
1、画导线
Proteus的智能化可以在你想要画线的时候进行自动检测。当鼠标的指针考进一个对象的连接点时,跟着鼠标的指针就会出现一个“X”号,鼠标左键点击元器件的连接点,移动鼠标(不用一直按着左键)就出现了粉红色的连接变成了深绿色。如果你想让软件自动定出线路径,只需左击另一个连接点即可。这就是Proteus的线路自动路径功能(简称WAR),如果你知识在两个连接点用鼠标左击,WAR将选择一个合适的线径。WAR可用过使用工具栏里的“WAR”命令按钮来关闭或打开,叶可以在菜单栏的“Tools”下找到这个图标。如果你想自己决定走线路径,只需在想要拐点处点击鼠标左键即可。在此过程的任何时刻,你都可以按ESC或者电子鼠标的右键来放弃画线。
2、画总线
为了简化原理图,我们可以用一条导线代表数条并行的导线,这就是所谓的总线。点击工具箱的总线按钮,即可在编辑窗口画总线。
3、画总线分支线
点击工具的按钮,画总线分支线,它是用来连接总线和元器件管脚的。画总线的时候为了和一般的导线区分,我们一般喜欢画斜线来表示分支线,但是这时如果WAR功能打开是不行的,需要把WAR功能关闭。画好分支线我们还需要给分支线器个名字。右键点击分支线选中它,接着左键点击选中的分支线就会出现分支线编辑对话框同端是连接在一起的,放置方法是用鼠标单击连线工具条中图标或者执行Place/Net Label菜单命令,这时光标变成十字形并且将有一虚线框在工作区内移动,再按一下键盘上的[Tab]键,系统弹出网络标号属性对话框,在Net项定义网络标号比如PB0,单击[OK],将设置号的网络标号放在第(1)步放置的短导线上(注意一定是上面),单击鼠标左键即可将之定位。
放置总线将各总线分支连接起来,方法是单击放置工具条中图标或执行Place/Bus菜单命令,这时工作平面上将出现十字形光标,将十字光标移至要连接的总线分支处单击鼠标左键,系统弹出十字形光标并拖着一条较粗的线,然后将十字光标移至另一个总线分支处,单击鼠标的左键,一条总线就画好了。
使用技巧。当电路中多根数据线、地址线、控制线并行时使用总线设计。 三、跳线 跳线在电路板设计中经常使用,但在一般的教科书中往往没有谈及这个问题,只有靠设计者在设计中自己去摸索。跳线,简单地说就是在电路板中用
一根将两焊盘连接的导线,也有人把它称为跨接线。多使用于单面板、双面板设计中,特别是单面板设计中使用得更多。在单面板的设计中,当有些铜膜线无法连接,即使给连通了,进行电气检查也是错的,系统会显示错误标志。通常解决的办法是使用跳线,跳线的长度应该选择如下几种:6mm、8mm和10mm。放置跳线的方法是在布线层(底层布线)用人工布线的方式放置,当遇到相交线的时候就用过孔走到背面(顶层)进行布线,跳过相交线然后回到原来层面(底层)布线。值得说明的是为了便于识别,最好在顶层的印丝层(Top Overlay)做上标志,在图3中有两根跳线。在PCB板安装元件的时候,跳线就用短的导线或者就用剪下元件引脚上多余的部分安装。我们在Label标签下的String右边填上所起的分支线的名称
4、放置线路节点
如果在交叉点有电路节点,则认为两条导线在电气上是相连的,否则就认为它们在电气上是不相连的。笔者发现ISIS在画导线时能够智能地判断是否要放置节点。但在两条导线交叉时是不放置节点的,这时要想两个导线电气相连,只有手工放置节点了。点击工具箱的节点放置按钮+,当把鼠标指针移到编辑窗口,指向一条导线的时候,会出现一个“×”号,点击左键就能放置一个节点。
5、将所需元器件加入到对象选择器窗口。
Picking Components into the Schematic 单击对象选择器按钮,
弹出“Pick Devices”页面,在“Keywords”输入AT89C51,系统在对象库中进行搜索查找,并将搜索结果显示在“Results”中
在“Results”栏中的列表项中,双击“AT89C51”,则可将“AT89C51”添加至对象选择器窗口。 接着在“Keywords”栏中重新输入7SEG,如图(5-4)所示。双击“7SEG-MPX8-CC-BLUE”,则可将“7SEG-MPX8-CC-BLUE”(8位共阴7段LED显示器)添加至对象选择器窗口。
2.2 Proteus仿真信号设置
要设定信号源频率的,可以通过双击信号源,弹出对话框(图5-3),可在对话框的右边有Frequency的位置进行频率设置。
图5-3 信号频率设置
2.3Proteus仿真结果
最后,在对仿真图检查无误,信号源频率进行设置后,可以开始进行仿真。分别对频率为25500Hz和12700Hz进行仿真,仿真结果如图(5-4)和图(5-5)所示。
图5-4 25500Hz仿真结果
图5-5 12700Hz仿真结果
由于单片机技术发展已经很成熟,我们更多的是借鉴前人的工作,完善我们的设计。当然,我们在前人的基础上向前走了一步,无论是原器件的选择,还是程序的设计,我们做的比他们复杂,这并不是简单意义上的重复,而是消化吸收和创新。
在设计的过程中,对问题要保持冷静,特别是在程序的编写这一块,要找出程序的错误一定要有一个冷静的头脑,否则很难发现错误甚至是越改越错。另外完成这类设计还需要认识到与他人合作的重要性,虚心向别人学习,吸取别人编写程序的一些好的风格与特点再融入到自己的程序中,都是一些不错的方法。