打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
数字频率计设计

数字频率计设计

                                  数字频率计设计

一、任务

设计并制作一台数字显示的简易频率计。

二、要求

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微秒。

  

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
单片机和Pc机串口通信<转>_飞鸟留痕
学习型红外遥控8路输出端—巧妙利用家里的旧遥控器
用单片机模拟2272软件解码
时钟芯片PCF8583应用
ISD1420使用的单片机控制
51单片机红外遥控解码程序[综合电子]
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服