数字频率计设计
一、任务
设计并制作一台数字显示的简易频率计。
二、要求
1.基本要求
(1) 采用单片机技术制作一个数字频率计
(2) a.测量信号:方波,正弦波,三角波
b.测量范围: 频率:100Hz~1MHz,TTL
三角波幅度:5mv~5v
正弦波幅度: 5mv~5v
c.功能实现:测量频率(方波,三角波,正弦波)
测量周期(方波,三角波,正弦波)
测量占空比(方波)
d.测量误差≤1%
(3)显示器 十进制数字显示,显示刷新时间1~10秒连续可调。
(4)自行设计并制作满足本设计任务要求的稳压电源。
2.发挥部分
(1)扩展频率测量范围为10Hz~15MHz(信号幅度0.05V~5V)
测量误差降低为0.01%(最大闸门时间≤10s)。
三、原理及硬件设计
本设计采用单片机89S51为核心,兼用74LS191计数器和4052四选一数据
选择器,显示部分接2个集成数码LED,信号放大和整形部分用放大器081,
导通二极管及其他部分电路组成.
(1)显示部分
本显示部分采用2个集成的LED8位数码显示管,其中
其中2个 com(1-4)分别对应单片机P0端口(p0.0~p0.7)
2个LED端口的8个引脚a,b,c,d,e,f,g,db对应P1端口.
(2) 分频部分
由于要求需要能测量到1MHZ的信号,所以需要分频功能的电路,这里采用的
是74LS191 的计数器,其中置数功能LD接高电平,不参加工作,D/U口是加法
减法选择功能,并不起决定性作用,所以本电路中选择接地,D0~D3接地,这样,
OUT部分,Qa是信号2分频,Qb是4分频,Qc是8分频,Qd是16分频,在本电
路中,若采用16分频即可测量到15MHZ
(3) 选择信号部分
利用4选1 功能的4052,为一个16脚的芯片,内部包含2 个4选1功能器件
这里我们只利用其中一个X组,输入部分X0~X3分别对应上述的74LS191的
Qa~Qd.
(4) 小信号输入放大和整形部分
这里有2个理论可行方法,1是采用一个555定时器
2是利用放大器081进行信号放大,放大后的信号通过二极管整形成方波,之后
通过多个反向器稳压,081的放大效果远好于OP07,可达到600KHZ.在实际操作
过程中发现555实现的效果很不理想,因此我设计中采用了第2 种方案.
(5)核心单片机部分
采用的单片机型号为89S51,为40 引脚,常规部分设计不变,X1与X2口接24MHZ
的晶振,RST口通过一个复位键接高电平,TO口接通过放大整形后的方波,P0与P1
部分连LED端,另外,P1端口分别通过510欧姆的上拉电阻到VCC,P0口为节省设计
空间没有接8个三极管,导致LED显示比正常稍暗,但不影响观察.在P2端,P2.0
与P2.1分别接4选1 选择器的A,B选择端.P2.5与P2.6端口接一个2位拨位开关
单片机默认端口为高,当P2.5接地显示的是测量周期,P2.6接地显示是测量占空比,
两者均接地时测量的是频率,这种状态也是现在默认状态.
四.全电路原理图
请见另外PROTEL文件(附件)
五.程序部分设计
本软件部分是放在WAVE6000上使用汇编语言为开发语言设计,调试的
;频率计量程0~16MHZ,当晶振24MHZ外电路16分频时
led1 equ 30h
led2 equ 31h
led3 equ 32h
led4 equ 33h
led5 equ 34h
led6 equ 35h
led7 equ 36h
led8 equ 37h
div1 equ 40h
div2 equ 41h
div3 equ 42h
divc1 equ 43h
divc2 equ 44h
divc3 equ 45h
divy1 equ 46h
divy2 equ 47h
divy3 equ 48h
buff0 equ 49h
buff1 equ 4ah
buff2 equ 4bh
buff3 equ 4ch
buff4 equ 4dh
buff5 equ 4eh
buffth1 equ 3bh
bufftl1 equ 3ch
control equ 3dh ;判断是否需要软件16分频
org 0000h
ajmp main
org 000bh
ajmp cont
org 001bh
ajmp clock
main:
mov sp,#54h
mov led1,#00H ;初始化
mov led2,#00H
mov led3,#00H
mov led4,#00H
mov led5,#00H
mov led6,#00H
mov led7,#00H
mov led8,#00H
mov r5,#32h
mov r3,#10h
mov control,#00h
mov tmod,#15h
mov th0,#00h
mov tl0,#00h
mov buffth1,#63h
mov bufftl1,#0dfh
mov th1,buffth1
mov tl1,bufftl1
clr p2.0
clr p2.1
clr ex1
clr ex0
setb et0
setb tr0
setb et1
setb tr1
setb ea
dis:call display ;重复调用显示子程序
sjmp dis
clock:push psw ;20000u秒定时中断
push acc
clr ea
clr et1
clr tr1
mov th1,buffth1 ;t1初始化
mov tl1,bufftl1
clr ex1
clr ex0
setb et1
setb tr1
djnz r5,over1 ;循环50次为1秒
ajmp goo
over1:
ljmp over
goo:
clr et0
clr tr0
clr c
setb p2.6
jnb p2.6,deal
mov a,th0 ;判断当计数器高位前6位为零频率小于16368时停止16分频
jnz deal
mov buffth1,#63h ;t1初始化
mov bufftl1,#0dfh
mov control,#00h
clr p2.0
clr p2.1
deal:mov a,tl0 ;把频率累加入数据缓冲
addc a,buff0
mov buff0,a
mov a,th0
addc a,buff1
mov buff1,a
mov a,#00h
addc a,buff2
mov buff2,a
mov th0,#00h ;t0初始化
mov tl0,#00h
setb et0
setb tr0
mov r5,#32h
mov a,control
jz divcon
djnz r3,over1
setb p2.6
jnb p2.6,divcon1
MOV R4,#4
loop9:clr c
mov a,buff0
rlc a
mov buff0,a
mov a,buff1
rlc a
mov buff1,a
mov a,buff2
rlc a
mov buff2,a
djnz r4,loop9
ajmp divcon
divcon1:
clr c
mov a,buff2
rrc a
mov buff2,a
mov a,buff1
rrc a
mov buff1,a
mov a,buff0
rrc a
mov buff0,a
divcon:
mov buff5,buff2 ;送数
mov buff4,buff1
mov buff3,buff0
setb p2.5
jb p2.5,clock1 ;判断是否为计算周期否则为计算频率
mov divc1,buff2 ;送数
mov divc2,buff1
mov divc3,buff0
mov div1,#098h ;放入被除数10000000
mov div2,#096h
mov div3,#080h
call BINDIV ;调用除法子程序
mov buff0,div3
mov buff1,div2
mov buff2,div1
clock1:setb p2.6
jb p2.6,bcd1 ;判断是否为计算占空比否则为计算频率或计算周期
mov tmod,#19h
mov buffth1,#0f6h
mov bufftl1,#4ch
mov control,#0ffh
clr p2.0
clr p2.1
ajmp bcd
bcd1:mov tmod,#15h
mov buffth1,#63h ;t1初始化
mov bufftl1,#0dfh
mov control,#000h
clr p2.0
clr p2.1
bcd:call change16bcd
mov r3,#10h
over:setb ea
pop acc
pop psw
reti
BINDIV: ;3位带4舍5入的移位除法
CLR A ;部分余数单元清0
MOV divy1,A
MOV divy2,A
MOV divy3,A
MOV r4,#18H ;除法移位次数(24)
LP: CLR C
MOV A,div3 ;被除数低位字节送到A中
RLC A
MOV div3,A
MOV A,div2
RLC A
MOV div2,A
MOV A,div1
RLC A
MOV div1,A
MOV A,divy3
RLC A
MOV divy3,A
MOV A,divy2
RLC A ;A的内容左移一位(带进位)
MOV divy2,A
MOV A,divy1
RLC A ;A的内容左移一位(带进位)
MOV divy1,A
LP1: MOV A,divy3 ;部分余数减除数
SUBB A,divc3
MOV 38h,A
MOV A,divy2
SUBB A,divc2
MOV 39h,A
MOV A,divy1
SUBB A,divc1
JC SMALL
MOV divy1,A
MOV A,39h
MOV divy2,A
MOV A,38h
MOV divy3,A
INC div3 ;商加1
SJMP LP1
SMALL: DJNZ R4,LP ;除法移位次数完否?未完继续
MOV 20H,divy1 ;四舍五入
JB 07H,ADD1
CLR C
MOV A,divy3
RLC A
MOV divy3,A ;余数低位字节存divy3中
MOV A,divy2
RLC A
mov divy2,a
MOV A,divy1
RLC A
SUBB A,divc1
JC RETURN2
JNZ ADD1
MOV A,divy2
SUBB A,divc2
JC RETURN2
JNZ ADD1
MOV A,divy3
SUBB A,divc3
JC RETURN2
ADD1: MOV A,div3 ;商加1
ADD A,#01H
MOV div3,A ;商的低位字节存div3中
MOV A,div2
ADDC A,#00H
MOV div2,A
MOV A,div1
ADDC A,#00H
MOV div1,A ;商的高位字节存div2中
RETURN2:
ret
change16bcd:
MOV R4,#24 ;16进制转成压缩bcd码
MOV 50H,#00H
MOV 51H,#00H
MOV 52H,#00H
MOV 53H,#00H
LOOP1:CLR C
MOV A,buff0
RLC A
MOV buff0,A
MOV A,buff1
RLC A
MOV buff1,A
MOV A,buff2
RLC A
MOV buff2,A
MOV A,50H
ADDC A,50H
DA A
MOV 50H,A
MOV A ,51H
ADDC A,51H
DA A
MOV 51H,A
MOV A,52H
ADDC A,52H
DA A
MOV 52H,A
MOV A,53H
ADDC A,53H
DA A
MOV 53H,A
DJNZ R4,LOOP1
SWAP A
ANL A,#0FH
MOV DPTR ,#numtab ;译码
MOVC A,@A+DPTR
MOV led8,A
MOV A,53H
ANL A,#0FH
MOVC A,@A+DPTR
MOV led7,A
MOV A,52H
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV led6,A
MOV A,52H
ANL A,#0FH
MOVC A,@A+DPTR
MOV led5,A
MOV A,51H
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV led4,A
MOV A,51H
ANL A,#0FH
MOVC A,@A+DPTR
MOV led3,A
MOV A,50H
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV led2,A
MOV A,50H
ANL A,#0FH
MOVC A,@A+DPTR
MOV led1,A
RET
cont: ;计数器溢出进行16分频
push psw
push acc
clr ea
cont1:
clr et1
clr tr1
clr et0
clr tr0
clr ex1
clr ex0
mov buffth1,#0f6h
mov bufftl1,#4ch
mov control,#0ffh
setb p2.0
setb p2.1
mov r3,#10h
mov th1,buffth1
mov tl1,bufftl1
mov th0,#00h
mov tl0,#00h
setb et0
setb tr0
setb et1
setb tr1
over2:setb ea
pop acc
pop psw
reti
display:
mov r0,#32
dpl1: mov r1,#100
dplop:
mov p0,led8
setb p2.5
jb p2.5,display1
clr p0.6
display1:mov p1,#01h
acall d1ms
mov p0,led7
setb p2.6
jb p2.6,display2
clr p0.6
display2:mov p1,#02h
acall d1ms
mov p0,led6
mov p1,#04h
acall d1ms
mov p0,led5
mov p1,#08h
acall d1ms
mov p0,led4
mov p1,#10h
acall d1ms
mov p0,led3
mov p1,#20h
acall d1ms
mov p0,led2
mov p1,#40h
acall d1ms
mov p0,led1
mov p1,#80h
acall d1ms
djnz r1,dplop
djnz r0,dpl1
ret
D1ms:
MOV R7,#0afh
DJNZ R7,$
RET
numtab: DB 60H, 0fcH, 52H, 58H, 0ccH, 49H,41H, 7cH, 40H, 48H
六.最终测试
本单片机设计的数字频率计经过测试后,基本符合设计要求
能够准确测量频率为1HZ-15MHZ,适用为方波,三角波及正弦波,可在人为的
用拨位开关在测量周期,频率及占空比之间转换,频率精度为1HZ,周期精度为
0.1微秒,占空比计时精度为0.1微秒。
联系客服