毕业设计数字式频率检测装置设计 doc

更新时间:2024-03-30 04:45:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

目 录

前言 ????????????????????????? 摘要: ???????????????????????? 2 关键字: ???????????????????????? 1 芯片介绍 ??????????????????????..2 1.1 10116 ????????????????????..2 1.2 1161 ??????????????????????..3 1.3 74HC04 ????????????????????.?4 1.4 74HC14 ?????????????????????.4 1.5 74HC74 ?????????????????????.4 1.6 74HC164 ?????????????????????.5 1.7 74HC145 ?????????????????????.6 1.8 AT89C2051?????????????????????.6 1.9 562 ???????????????????????.9 2.统概述 ???????????????????????.9 2.1频率计定义 ???????????????????..9 2.2系统的组成 ????????????????????.8 2.3处理方法 ?????????????????????..8 3.系统硬件设计 ????????????????????9 3.1信号预处理 ????????????????????9 3.1.1滤波、衰减、补偿 ????????????????.9 3.1.2放大电路 ????????????????????9 3.2 波形转换电路 ?????????????????..10 3.3 形整形及分频电路 ????????????????.11 3.4 单片机复位电路 ??????????????????11

2 2

1

3.5显示部分????????????????????? 12 3.5.1 显示电路???????????????????.12 3.5.2 模拟串行通信原理???????????????.12 3.6 整机工作原理???????????????????.12 4.系统软件的组成???????????????????.13 4.1 系统软件框图??????????????????..13 4.2 流程图?????????????????????..14 4.3 数据处理过程???????????????????14 4.5 单片机源程序??????????????????..15 5对单片机的优缺点进行分析???????????????30 6 对本设计的心得体会???????????????? ?.30 7 数字频率计原理图??????????????????.39 8 参考文献资料????????????????????.41

2

数字频率计 前 言

数字频率计在电子、通讯等领域中的实验、研究开发、生产用途非常的广泛,它可以由逻辑 电组成,也可以用单片机控制。由逻辑电路组成的频率计,结构复杂,组装、调试比较麻烦;由单片机控制的频率计,数据采集、计算、译码及量程的自动转换,都可以由CPU来完成,简化了电路,提高了系统的可靠性。 摘要:

本设计是以89c2051为核心的单片机设计,在单片机设计中应用单片机的数字运算和控制功能实现了量程的自动切换,满足了时间要求和精度要求。 关键字:

89C2051,频率计,分频,

3

1 芯片介绍 1.1 10116

10116是一个三运算放大器,带有正、反输出端,逻辑图及引脚功能如下:

引脚图

1.2 1161

1161为基于微控器的系统提高了完整的存储和监控方案,运用低功耗CMOSE技术,在片内集成了带硬件存储写保护的串行EEPROM(16K),节能型系统电源监控电路和一个看门狗定时电路。当一个软件或硬件的误操作,一起系统的暂停和挂起时,1.6秒的看门狗电路可将系统恢复到默认状态,1161的定时监控SDA线,这样不需要增加PC板的跟踪功能。第2脚输出高电平的复位信号,第7脚输 出低电平的复位信号

WP 写保护EPRON 就实现写保护 只读

2

将该管脚接地或悬空 可以对

器件进行读写操作串行时钟 串行输入输出资料时 该 脚 用于输入时钟。 SCL:串行时钟,串行输入输出数据时,该脚 用于时钟。

REST:复位I/O口。该 脚为开漏输出脚。可用作复位触发输入。

4

SDA:串行数据地址,用于所以数据得发送和接受。SDA还可以作为看门狗定时器控制器。VCC:电源 GND:接地 NC:空脚 1.3 74HC04 74HC04为六反相器 Y=/A

引脚图

1.4 74HC14

74HC14是六反相器(施密特触发器) Y=/A 引脚如上图。 1.5 74HC74

74HC74是一双D型正 沿触发器,带预和清除端,其引脚及功能如下:

5

功能表 输入 PR CLR CLK D L H X X H L X X L L X X H H ↑ H H H ↑ L H H L X 说明:*为不稳定

输出 Q /Q H L L H H* H* H L L H Q0 /Q0

引脚图

D触发器在这里主要是分频,它的这种接法是一种二分频的接法,对经过562分频的信号再一次分频,进一步降低它的频率,提高单片机的测量范围。 1.6 74HC164

1.引出端排列图和逻辑功能示意图

图3—38所示是8位单相移位积存器74LS164的引出端排列图和功能示意图 。

(a)引出端排列图 (b)逻辑功能示意图

图3-3 8位单向移位积存器74LS164

Ds=Dsa*Dsr是数码串行输入端,/CR是清零端,Q0~Q7是数据并行输出端,CP是时钟脉冲——移位操作信号。 2.逻辑功能

6

表3.1所示是74LS164状态表,由表可知,74LS164具有下列功能; (1)清零功能

当/CR=0时,移位寄存器异步清零。

(2)保持功能

当/CR=1、CP=0时。移位寄存器保持状态不变,Q n+1i=Qni(i=0~7)。

(3)送数功能

当/CR=1时,CP上升沿将加在Ds=Dsa*Dsb端的二进制数码依次送入移位寄存器中。状态方程为 Qn+10=Qsa*Qsb Qn+11=Qn0 Qn+1n2=Q1 Qn+13=Qn2

Qn+1n 4=Q3CP 上升沿时刻有效 (5.3.7) Qn+1n5=Q4 Qn+16=Qn5 Qn+1n7=Q6

1.7 74HC145

74HC145是一个BCD—十进制译码器/驱动器(OC),用于驱动灯、继电器或MOS电路;能吸收80m电流,LS145典型功耗为35mW;耐压15V

7

1.8 AT89C2051

单片机的管脚排列图,各管脚的功能,关于此单片机的介绍

AT89c2051与Intel的51系列兼容,没有P0口、P2口,所以不能扩充外部程序存储器、外部数据存储器,有些指不能使用或受到一定的限制,如MOVX,MOVC。内部集成一个A/D转换器。它是一个带有2KB可编程只读存储器(EEPROM)的低压高性能8位CMOSE微型计算机。它用ATMEL的高密非易失存储技术制造,并和工业标准MCS—51指令集和引脚结构兼容。通过在单块芯片上组合通用的CPL1和Flash存储器,使AT89C2051成为一强劲的微型计算机。它为许多嵌入式控制应用提供了高度灵活和成本低的解决办法。 1. 主要性能

和MCS-51产品兼容。

2KB可重编程Flash存储器。 耐久性:1000次写/擦除。 2.7~6V的操作范围。

全静态操作:0Hz~24MHz。 2级加密程序存储器。 128*8位内部RAM。 15条可编程I/O引线。 2个16位定时器/计数器。 6个中断源。

可编程串行UART通道。 直接LED驱动输出。 片内模拟比较器。

低功耗空载和掉电方式。 2. 引脚功能说明 AT89C2051的引脚结构

8

89C2051引脚

(1) Vcc电源端。 (2) GND:接地端。

(3) P1口:P1口是一8位双向I/O口。引脚P1.2~P1.7提供内部上拉电阻。P1.0和P1.1要求外部上拉电阻。P1.0和P1.1还分别作为片内精密模拟比较器的同相输入(AIN0)和反相输入(AIN1)。P1口输出缓冲器可吸收20mA电流,并能直接驱动LED显示。当P1口引脚写入“1”时,可用作输入端。当引脚P1.2~P1.7用作输入端并被外部拉低时,将因内部的上拉电阻而输出电流(IIL)。

P1口还在Flash编程和程序效验期间接收代码数据。

(4) 3口:P3口的P3.0~P3.5,P3.7是带有内部上拉电阻的7个双向I/O

引脚。P3.6用于固定输入片内比较器的输出信号,并且作为一通用I/O引脚而不可访问。P3口缓冲器可吸收20mA电流。当P3口引脚写入“1”时,它们被内部上拉电阻拉高并可用作输入端。用表2-6 P3口的功能

9

(5) 口引脚 P3.0 P3.1 P3.2 P3.3 P3.4 功能 RXD(串行输入端口) TXD(串行输出端口) INT0(外中断0) INT1(外中断1) T0(定时器0外部输入) P3.5 T1(定时器1外部输入) 作输入端时,被外部拉低的P3口引脚将用上拉电阻而输出电流(IIL)。 P3口还用于实现AT89C2051的各种功能,如表2-6所列。 P3口还接收一些用于Flash存储器编程和程序效验的控制信号。 (6) RST:复位输入。RST一旦变成高电平,所有的I/O引脚就复位到“1”。当振荡器正在运行时,持续给出RST引脚两个机器周期的高电平便可完成复位。每一个机器周期需12个振荡器或时钟周期。

(7) XTAL1:作为振荡器反相放大器的输入和内部时钟发生器的输入。

(8) 器正在运行时,持续给出RST引脚两个机器周期的高电平便可完成复位。每一个机器周期需12个振荡器或时钟周期。 (9) XTAL1:作为振荡器反相放大器的输入和内部时钟发生器的输入。

(10) XTAL2:作为振荡器反相放大器的输出。

1.9 562

在本计数计中,562主要用于构成64分频的分频器,原理如下图:

10

2.统概述 2.1 频率计定义

频率计为一秒时间内信号变化的次数。数字频率计就是在一秒标准时间内测出信号变化的次数,然后以数字的形式显示出来。 2.2系统的组成

频率计是以89c2051 、信号预处理电路、波形转换电路、波形整形及分频电路、复位看门狗电路、CPU电路、显示电路和系统软件所组成,其中信号预处理电路包含衰减、低通滤波、高频补偿、其作用是对强信号的衰减;测量低频信号时,对高频进行滤除;测量高频时进行补偿;对待测信号的放大,降低对待测信号的幅度要求。波形转换电路主要由10116及外围元件组成,实现把正负交替的信号波形变换成可被单片机接受的TTL/ CMOS兼容信号;波形整形及分频由74HC04、562、74HC74、74HC14及外围元件等组成,分频电路用于扩展单片机的频率测量范围。复位电路由1161组成,用于保证系统的可靠运行。CPU用Atmel公司的At89c2051芯片。显示电路由74hc164、74ls145、数显、二极管等组成。系统硬件框图如图1 所示。

11

图1 系统硬件框图

系统软软件用汇编语言编写,包括测量初始化模块、显示模块、信号频率测量模块、量程自动转换模块。 2.3 处理方法

本频率计的设计以AT89C2051单片机为核心,利用它内部的定时/计数器完成待测信号频率的测量。单片机AT89C2051内部具有2个16位定时/计数器,定时/计数器的工作可以由编程来实现定时、计数和产生计数溢出中断要求的功能。在构成为定时器时,每个机器周期加1(使用12MHz的时钟时,每1us加1),这样以机器周期为基准可以用来测量时间间隔。在构成为计数器时,在相应的外部引脚发生从1到0的跳变时计数器加1,这样在计数闸门的控制下可以用来测量待测信号的频率。外部输入每个机器周期被采样一次,这样检测一次从1到0的跳变至少需要2个机器周期(24个振荡周期),所以最大计数速率为时钟频率的1/24(使用12MHz的时钟时,最大计数速率为500kHz)。定时/计数器的工作由响应的运行控制位TR控制,当TR置1,定时/计数器开始计数;当TR清0,停止计数。

为提高频率稳定度,本电路采用24M温度补偿晶振,其最大计数为1M,本频率计测频范围为1Hz到10M,以500kHz为分界,待测信号经放大、变换、整形后,一路直接送AT89C2051的P3.5口,一路经128:1(562为64:1,又经74HC74二分频)的分频电路后,送P3.4口,测频时,首先T0为计数器,T1为定时器,控制闸门时间为1秒,1S后,将寄存器数值128倍运算后,判断值大于500k时,经变换处理后送显示,小于500k时,变T0为定时,T1为计数,如此处理,即能提高测量范围,又提高了测量精度,且巧妙的实现量程的自动切换,闸门时间1S采用硬件及软件结合方法实现,计数值用三字节存放,经十六进制到BCD码的变换后送显示。 3.系统硬件设计 3.1信号预处理

信号预处理电路包括滤波、衰减、补偿、放大。

12

3.1.1滤波、衰减、补偿

待测信号经0.47uF的隔直通交电容耦合过来,当输入的信号电压较高时可按下琴键K1衰减,输入的电压信号可达到125V,当输入的信号频率较低时,按下琴键K2,经低通滤波减小干扰信号对后级的影响,信号经高频补偿电路进入放大电路。 3.1.2 放大电路

放大部分采用场效应管,静态功耗低,而且放大之前有稳压二极管保护电路,可以对输入的电压进行嵌位,防止输入到CMOS的电压过高。由于采用零偏置,当输入信号为零或者为负时,场效应管夹断,当输入信号为正电压时,场效应管导通,零偏置放大器将正负交替的输入信号变成单向脉冲信号,使得输入信号在一个周期内,产生一个脉冲信号,以便于对其计数。

13

3.2 波形转换电路

采用差动输入,提高输入阻抗和共模抑制比,输入端提供偏置,使信号预处理电路出来的脉冲信号通过,信号经放大变为幅度足够大的方波脉冲或近似于方波脉冲的信号送波形整形电路 。

14

3.3 形整形及分频电路

由波形转换电路输出的方波信号。从波形转换出来的信号,一路经74HC04整形后去除毛刺又经施密特反相器74HC14整形变为与标准的TTL/CMOS电平兼容的方波。另一路经128:1分频后接入单片机,562接成64:1的分频电路,又经74HC74二分频,实现高于500K时的测量处理电路,扩充了频率计的测量范围。

15

3.4 单片机复位电路

单片机复位电路

当单片机死机或挂起的时候,在1.6秒以内计算机就不会给1161脉冲,这时复位电路就会给单片机以复位信号,使单片机重新开始工作。 3.5显示部分 3.5.1 显示电路

16

由于AT89C2051的I/O口较少,本电路采用特殊的显示方式---由P1.6(数据端)和P1.7(时钟端)组成模拟串行通信口,单片机将要显示的数据用模拟串口发送到74HC74164后,由74HC164转换为并行数据控制数码管显示的数字,实现显示数据的传送,由单片机提供位选的BCD码经74LS145译码后控制每位数码管的选通与消隐,并由两个发光二极管做为Hz及KHz的指示。 3.5.2模拟串行通信原理

模拟串行通信口由P1.6和P1.7组成,其中P1.6作为数据发送端,P1.7作为时钟端,发送数据之前,先用指令将时钟P1.7清0(输出低电平),然后将要发送的一帧数据(8位二进制数)的最高位(第7位)送到数据端P1.6,再将时钟端置位(输出高电平),延时一个机器周期,再将时钟端清0,完成一位二进制数的传送,接着将第6位发送到P1.6端,如此循环,完成一帧数据的传送。其时序图如下

串行通讯时序图

3.6 整机工作原理

待测信号经预处理电路之后,变成直流脉冲信号,经波形转换电路变换,信号变成削顶的脉冲信号,此时的信号已近似于方波脉冲,从波形转换早路出来的信号分成两路,一路直接经过整形,变成方波脉冲,送到89c2051的P3.5端;一路经64分频之后,再经过74HC04整形,再经过74HC74二分频(64*2=128),送到89c2051的P3.4端。89c2051首先对P3.5端进行计数,如果频率低500KHz,则直接将结果显示出来,单位为Hz;若频率高于500KHz,则对P3.4端进行计数,将计数结果*128倍之后,再进行显示,单位为KHz。单位的显示由两个二极管指示。

17

4.系统软件的组成 4.1 系统软件框图

结构框图

系统软件设计采用模块化设计方法。整个系统由初始化模块、显示模块和信号频率测量模块等各种功能模块组成(见图4) 。上电后,进入系统初始化模块,系统软件开始运行。在执行过程中,根据运行流程分别调用各个功能模块完成频率测量、量程自动切换、测量结果显示。

18

4.2 流程图

软件流程图

19

4.3 数据处理过程

计数值用三个字节来存储,经十六进制到BCD码的转换,本频率计测频范围为1Hz到10M,以500kHz为分界,待测信号经放大、变换、整形后,一路直接送AT89C2051的P3.5口,一路经128:1(562为64:1,又经74HC74二分频)的分频电路后,送P3.4口,测频时,首先T0为计数器,T1为定时器,控制闸门时间为1秒,1S后,将寄存器数值128倍运算后,判断值大于500k时,经变换处理后送显示,小于500k时,变T0为定时,T1为计数,如此处理,即能提高测量范围,又提高了测量精度,且巧妙的实现量程的自动切换,闸门时间1S采用硬件及软件结合方法实现,计数值用三字节存放,经十六进制到BCD码的变换后送显示。 4.5 单片机源程序

DA4 EQU P1.2 ;显示位选择端 DA3 EQU P1.3 DA2 EQU P1.4 DA1 EQU P1.5

CLK EQU P1.7 ;时钟端

DAT EQU P1.6 ;串行数据发送端 SCL EQU P3.1 ;看门狗,E2ROM SDA EQU P3.0

PV EQU P3.4 ;计数通道定义 BZ EQU P3.5

MD EQU P3.7 ;门控信号

A153A EQU P3.2 ;分频器选通信号 A153B EQU P3.3

;RXD EQU P3.0 ;通讯口 ;TXD EQU P3.1 BZDIG EQU 2FH

DSPLA_ADD1 EQU 30H ; 显示缓冲区,最低位 DSPLA_ADD2 EQU 31H DSPLA_ADD3 EQU 32H DSPLA_ADD4 EQU 33H DSPLA_ADD5 EQU 34H

DSPLA_ADD6 EQU 35H ;最高位 DSPLA_ADD7 EQU 36H ;单位指示位

TX_TIME EQU 50H ;冲断次数计数器 MOS_BZ EQU 51H ;通道选择寄存器

20

BZ2 EQU 52H ;大小判断标志 LDBZ BIT 10H ;<1Hz标志位 LD1HZ EQU 7BH

JSQ3 EQU 53H ;计数值寄存区 JSQ2 EQU 54H JSQ1 EQU 55H

BCD1 EQU 60H ;压缩BCD码寄存区 BCD2 EQU 61H BCD3 EQU 62H BCD4 EQU 63H CX EQU 64H HUANC1 EQU 65H HUANC2 EQU 66H HUANC3 EQU 67H HUANC4 EQU 68H WSA EQU 77h FDA EQU 78h FDS EQU 79h FDB EQU 7ah PPD EQU 7bh

;================================= ;主程序

;================================= ORG 0000H LJMP MAIN ORG 000BH LJMP TIM0 ORG 001BH LJMP TIM1

MAIN: LCALL RST_WDOG ;复位看门狗 LCALL SETUP ;初始化 MAIN1: LCALL DSPLA ;显示(“123456”) LJMP MAIN1 ;循环,等待中断 ;=================================

DSPLA: NOP ;显示子程序 DSPLATEMP: MOV R7,#7

MOV R0,#DSPLA_ADD1 ;取显示区首地址 MOV DPTR,#TAB ;取表格指针

21

DSP1: MOV A,@R0 ;取数值 MOVC A,@A+DPTR ;查表

DENG: CLR CLK ;模拟串行输出处理 CLR C RLC A

MOV DAT,C ;1 SETB CLK NOP

CLR CLK RLC A

MOV DAT,C ;2 SETB CLK NOP

CLR CLK RLC A

MOV DAT,C ;3 SETB CLK NOP

CLR CLK RLC A

MOV DAT,C ;4 SETB CLK NOP

CLR CLK RLC A

MOV DAT,C ;5 SETB CLK NOP

CLR CLK RLC A

MOV DAT,C ;6 SETB CLK NOP

CLR CLK RLC A

MOV DAT,C ;7 SETB CLK NOP

22

CLR CLK RLC A

MOV DAT,C ;8 SETB CLK NOP

CLR CLK

LCALL WAY ;显示位选择 ;=============

LCALL DELAY10 ;延时 CLR DA1 ;关闭 SETB DA2 CLR DA3 SETB DA4

DSP2: INC R0 ;指向下一位 DJNZ R7,DSP1 ;显示完否? DSPLAEND: RET

TAB: DB 0F3H,90H,79H,0B9H,9AH,0ABH,0EBH,91H ;显示数码编码表,0~7

DB 0FBH,0BBH ;8,9

DB 0F7H,94H,7DH,0BDH,9EH,0AFH,0EFH,95H,0FFH,0BFH ;0.~7. DB 10H,01H ;8.,9. DB 0FFH,0EFH,0F7H,0FCH,0B9H,0DEH,0F9H,0F1H DB 40H,73H,76H,00H,00H,00H,00H,00H,00H,00H ; 初始化子程序

WAY: MOV A,R7 ;第一位(最低位) CJNE A,#7,WAY1 SETB DA1 CLR DA2 CLR DA3 CLR DA4 RET

WAY1: CJNE A,#6,WAY2 ;第二位 CLR DA1 CLR DA2 SETB DA3 CLR DA4 RET

WAY2: CJNE A,#5,WAY3 ;第三位

23

CLR DA1 SETB DA2 CLR DA3 CLR DA4 RET

WAY3: CJNE A,#4,WAY4 ;第四位 SETB DA1 CLR DA2 SETB DA3 CLR DA4 RET

WAY4: CJNE A,#3,WAY5 ;第五位 SETB DA1 SETB DA2 CLR DA3 CLR DA4 RET

WAY5: CJNE A,#2,WAY6 ;第六位(最高位) CLR DA1 SETB DA2 SETB DA3 CLR DA4 RET

WAY6: CJNE A,#1,WAY7 ;单位位 SETB DA1 SETB DA2 SETB DA3 CLR DA4 WAY7: RET ;==============

SETUP: CLR TR0 ;初始化程序 CLR TR1 CLR LDBZ MOV MOS_BZ,#1 MOV LD1HZ,#10 CLR DA1 SETB DA2 CLR DA3

24

SETB DA4

MOV TX_TIME,#50 ;50*20ms MOV JSQ1,#0

;============定时器初始化

MOV TMOD,#51H ;T1计数,模式1 ;T0定时,模式1 ;MOV SCON,#50H

MOV TH0,#69H ;20mS MOV TL0,#0ccH MOV TH1,#00H MOV TL1,#00H ; SETB TR0 ; SETB TR1

SETB ET0 ;充许T0中断 SETB ET1 ;充许T1中断 MOV BZDIG,#1

SETB EA ;开中断 CLR ES ;不许可串口 CLR EX1 ;不许可中断1 CLR EX0 ;不许可中断0 MOV WSA,#3

SETB TR0 ;启动定时器 SETB TR1 ;启动计数器 RET

;;============================================================ ;;以下为1161存储芯片操作子程序

;;-----------------------------------------------------------------RST_WDOG: CLR SDA ;复位看门狗

DB 0,0,0,0 SETB SDA RET

;============================== DELAY10: NOP ;延时子程序 DELAY5: MOV R6,#0FFH LCALL RST_WDOG DJNZ R6,$ RET

25

TIM0END1: LJMP TIM0END

;===============================

LDSJ: MOV TX_TIME,#50 ;<1Hz数据处理程序 DJNZ LD1HZ,TIM0END1 CLR TR1;关闭计数器 MOV A,TH1 MOV JSQ2,A MOV A,TL1 MOV JSQ3,A ;================== ;判断是否大于10 MOV A,JSQ1 JNZ PY1 MOV A,JSQ2 JNZ PY1 MOV A,JSQ3 CLR C SUBB A,#10 JNC PY1

LCALL BMBCD ;调BCD转换程序 MOV R0,#BCD1

MOV A,@R0 ;取BCD码

ANL A,#0FH ;化成有效BCD码

MOV DSPLA_ADD6,A ;数值送到第一位(最低位) MOV DSPLA_ADD1,#0 ;其它位清0 MOV DSPLA_ADD2,#0 MOV DSPLA_ADD3,#0 MOV DSPLA_ADD4,#0

MOV DSPLA_ADD5,#10 ;第二位显示“0.” MOV DSPLA_ADD7,#21 ;单位Hz SETB LDBZ MOV LD1HZ,#10 LJMP TIM07

;================================= PY1: CLR LDBZ LJMP TIM0END

;=============================== TIM0: PUSH PSW

26

PUSH ACC

MOV A,MOS_BZ ;判断通道

CJNE A,#1,TIMJS ;若为PV通道(T0计数),跳出中断

MOV TH0,#63H MOV TL0,#0c0H

DJNZ TX_TIME,TIM0END ;若定时未到1s,则退出中断 JB LDBZ,LDSJ ;若小于1, 转<1处理程序 MOV TX_TIME,#50 ;50*20=1000mS CLR TR1 ;关闭计数器 MOV A,TH1

MOV JSQ2,A ;计数高位送到JSQ2 MOV A,TL1

MOV JSQ3,A ;计数低位送JSQ3 ;===============================

;判断是否小于1,如果小于1则再循环9次 MOV A,JSQ1

JNZ PY ;若T1已发生中断,说明计数大于1 MOV A,JSQ2 ;计数器计数值是否大于1 JNZ PY MOV A,JSQ3 JNZ PY

SETB LDBZ ;小于1,<1标志位置位 MOV LD1HZ,#10

;===============================

;是否大于500000

PY: LCALL JSPD2 ;调判断子程序

MOV A,BZ2 ;判断是否小于500000

CJNE A,#0,KTR ;若大于500000,则换量程 ;========================

PPPTR: LCALL BMBCD ;调BCD码转换程序

LCALL BCDZH ;压缩BCD码转为非压缩BCD码 MOV DSPLA_ADD7,#21 ;单位:Hz TIM07: MOV TH1,#00H MOV TL1,#00H MOV JSQ1,#0 MOV WSA,#1 TIM0END: POP ACC

27

POP PSW SETB TR1 SETB TR0 RETI

PPL: DEC BZDIG MOV TH1,#00H MOV TL1,#00H MOV JSQ1,#0

LJMP TIM0END ;========================= TIMJS: MOV TH0,#00H MOV TL0,#00H

INC JSQ1 ;中断计数加1 TIMJSEND: POP ACC POP PSW RETI

;===============================

KTR: LCALL SETUP1 ;调初始化程序,转换量程 POP ACC POP PSW RETI

;===================================== JSPD2: MOV A,JSQ1 CLR C

SUBB A,#0ch JC Z2 MOV A,JSQ2 JNZ B2 CLR C

SUBB A,#35H JC Z2 JNC B2 MOV A,JSQ3 CLR C

SUBB A,#00H JC Z2 JNC B2 Z2: MOV BZ2,#0

28

RET

B2: MOV BZ2,#1 RET

;================================== TIM1: PUSH PSW ;T1中断处理程序 PUSH ACC MOV A,MOS_BZ

CJNE A,#1,TIM1DS ;通道判断 MOV TH1,#00H MOV TL1,#00H INC JSQ1 TIM2END:POP ACC POP PSW RETI ;==============

TIM1DS: MOV TH1,#63H MOV TL1,#0a0H

DJNZ TX_TIME,TIM1END ;50*20ms

MOV TX_TIME,#50 ;50*20=1000mS CLR TR0 MOV A,TH0 MOV JSQ2,A MOV A,TL0 MOV JSQ3,A

;若果小于500000则转移

LCALL SJPD ;调判断子程序 MOV A,BZ2 CJNE A,#1,DET MOV A,BZDIG

CJNE A,#0,PPL1

LCALL MUL4 ;调×128倍子程序 LCALL BMBCD5 ;调BCD转换 MOV DSPLA_ADD7,#20 ;单位:KHz MOV TH0,#00H MOV TL0,#00H MOV JSQ1,#0 TIM1END:POP ACC POP PSW

29

SETB TR0 SETB TR1 RETI

DET: LCALL SETUP POP ACC POP PSW RETI

PPL1: DEC BZDIG MOV TH0,#00H MOV TL0,#00H MOV JSQ1,#0

LJMP TIM1END ;=======

SJPD: MOV A,JSQ1 ;是否小于500000 CLR C SUBB A,#0 JC Z1 JNZ B1 MOV A,JSQ2 CLR C

SUBB A,#16H JC Z1 JNC B1 MOV A,JSQ3 CLR C

SUBB A,#0e3H JC Z1 JNC B1 RET

Z1: MOV BZ2,#0 RET

B1: MOV BZ2,#1 RET ;==========

BMBCD: MOV R0,#JSQ3 ;寄存器及指针设定 MOV R7,#3 MOV R1,#BCD1 MOV A,R0

30

MOV R5,A MOV A,R1 MOV R6,A MOV A,R7 MOV R3,A INC R3 CLR A

CLBCD: MOV @R1,A ;清BCD码区 INC R1

DJNZ R3,CLBCD MOV A,R7 MOV B,#08 MUL AB MOV R3,A

LP0: MOV A,R5 ;BCD码转换 MOV R0,A MOV A,R7 MOV R2,A CLR C LP1: MOV A,@R0 RLC A MOV @R0,A INC R0

DJNZ R2,LP1 MOV A,R6 MOV R1,A MOV A,R7 MOV R2,A INC R2 LP2: MOV A,@R1

ADDC A,@R1 ;位权加法 DA A MOV @R1,A INC R1 DJNZ R2,LP2 DJNZ R3,LP0 MOV A,R6 MOV R1,A

31

RET

BCDZH: MOV R0,#BCD1 ;压缩BCD码转为非压缩BCD码 MOV A,@R0 ANL A,#0FH

MOV DSPLA_ADD6,A MOV A,@R0 ANL A,#0F0H SWAP A

MOV DSPLA_ADD5,A INC R0 MOV A,@R0 ANL A,#0FH

MOV DSPLA_ADD4,A MOV A,@R0 ANL A,#0F0H SWAP A

MOV DSPLA_ADD3,A INC R0 MOV A,@R0 ANL A,#0FH

MOV DSPLA_ADD2,A MOV A,@R0 ANL A,#0F0H SWAP A

MOV DSPLA_ADD1,A RET

;========

SETUP1: MOV DSPLA_ADD1,#1 MOV DSPLA_ADD2,#2 MOV DSPLA_ADD3,#3 MOV DSPLA_ADD4,#4 MOV DSPLA_ADD5,#5 MOV DSPLA_ADD6,#6

MOV DSPLA_ADD7,#20;kHZ MOV MOS_BZ,#2 MOV WQT,#15 MOV CX,#4 MOV LD1HZ,#10

32

CLR LDBZ CLR DA1 SETB DA2 CLR DA3 SETB DA4

MOV TX_TIME,#50 MOV JSQ1,#0

============定时器初始化

MOV TMOD,#15H ;T0计数,模式1 ;T1定时,模式1 MOV SCON,#50H MOV TH1,#63H;20mS MOV TL1,#0A0H MOV BZDIG,#1 MOV TH0,#00H MOV TL0,#00H SETB TR0 SETB TR1 SETB ET0 SETB ET1 SETB EA

CLR ES ;不许可串口 CLR EX1 ;不许可中断1 CLR EX0 ;不许可中断0 MOV WSA,#3 RET

;==================×128倍

MUL4: MOV R1,#JSQ3 ;指针设置 MOV CX,#128 MOV R0,#CX MOV R2,#3 MOV R3,#1 MOV R4,#65h DOMUL: MOV A,R1 MOV R6,A MOV A,R0 MOV R5,A MOV A,R2 ADD A,R3

33

MOV 26H,A MOV R7,A MOV A,R4 MOV R0,A

CLEAR: MOV @R0,#00H ;清数据缓冲区 INC R0

DJNZ R7,CLEAR MOV A,R4 MOV R7,A MOV 27H,R7 MOV 20H,R2 LP3: MOV A,R5 MOV R0,A

MOV A,@R0 MOV B,@R1 MUL AB ACALL ADDM INC R1 DJNZ R2,LP3 MOV R2,20H MOV A,R6 MOV R1,A MOV A,R7 INC A MOV R7,A MOV R4,A INC R5 DJNZ R3,LP3 MOV R6,27H MOV R5,26H RET

ADDM: MOV 21H,A MOV A,R4 MOV R0,A MOV A,21H

ADD A,@R0 MOV @R0,A MOV A,B

;取倍数(128)送到A ;取计数值送到B ;计数值×128 ;乘积加处理子程序 ;高位乘积低位+低位乘积低位34

;乘积加处理 INC R0

ADDC A,@R0 ;乘积高位+进位1+进位2 MOV @R0,A INC R0 MOV A,@R0

ADDC A,#00H ;保存进位 MOV @R0,A DEC R0 MOV A,R0 MOV R4,A RET

;=============BCD码转换

BMBCD5: MOV R0,#HUANC1 MOV R7,#4 MOV R1,#BCD1 MOV A,R0 MOV R5,A MOV A,R1 MOV R6,A MOV A,R7 MOV R3,A INC R3 CLR A

CLBCD2: MOV @R1,A ;清BCD码区 INC R1

DJNZ R3,CLBCD2 MOV A,R7 MOV B,#08 MUL AB MOV R3,A LP7: MOV A,R5 MOV R0,A MOV A,R7 MOV R2,A CLR C LP8: MOV A,@R0

RLC A ;从高至低逐位(bit)取出 MOV @R0,A

35

INC R0

DJNZ R2,LP8 MOV A,R6 MOV R1,A MOV A,R7 MOV R2,A INC R2 LP6: MOV A,@R1

ADDC A,@R1 ;位权加法 DA A MOV @R1,A INC R1 DJNZ R2,LP6 DJNZ R3,LP7 MOV A,R6 MOV R1,A

;=============压缩BCD码转非压缩BCD码 MOV R0,#BCD2 MOV A,@R0 ; ANL A,#0FH

; MOV DSPLA_ADD6,A ; MOV A,@R0 ANL A,#0F0H SWAP A

MOV DSPLA_ADD6,A ;第一位(最低位) INC R0 MOV A,@R0 ANL A,#0FH

MOV DSPLA_ADD5,A ;第二位 MOV A,@R0 ANL A,#0F0H SWAP A

MOV DSPLA_ADD4,A ;第三位 INC R0 MOV A,@R0 ANL A,#0FH

MOV DSPLA_ADD3,A ;第四位 MOV A,@R0

36

ANL A,#0F0H SWAP A

MOV DSPLA_ADD2,A于 ;第五位 INC R0 MOV A,@R0 ANL A,#0FH

MOV DSPLA_ADD1,A ;第六位(最高位) RET

SETUP2: MOV MOS_BZ,#2 MOV WQT,#10 MOV CX,#4 CLR DA1 SETB DA2 CLR DA3 SETB DA4

MOV LD1HZ,#10 MOV TX_TIME,#50 MOV JSQ1,#0 ;============定时器初始化

MOV TMOD,#15H;T0计数,模式1 ;T1定时,模式1 MOV SCON,#50H MOV TH1,#63H;20mS MOV TL1,#0C0H MOV TH0,#00H MOV TL0,#00H SETB TR0 SETB TR1 CLR LDBZ SETB ET0 SETB ET1 SETB EA

MOV BZDIG,#1

CLR ES;不许可串口 CLR EX1;不许可中断1 CLR EX0;不许可中断0 RET END

37

5对单片机的优缺点进行分析

首先本设计的频率计的测量范围不大在1—100M之间,而目前的高端频率计最小可以测量到0.001HZ最大可以到几G ,甚至可以达到更高。本设计的电路是比较传统的电路,没有采用先进的高断芯片,使测量的范围和精度都受到很大的限制,对测量范围以外的频率有较低的测量精度,甚至无法测量。对输入电压也有一定的限制,虽然本电路采用了一定的分压措施,但电压还是不能太高。太高就会对CMOSE造成烧毁。由于电路测量环境的限制,必须有低通滤波和高通匹配,否则就会是测量的准确度降低。由于单片机接受频率范围的影响,对较高的频率(大于500KHZ),要经过分频环节,本电路采用的是1/128的分频。

本设计在解决T0和T1口分配时是比较巧妙的,通过两个口再不同的频率时,T0和T1的功能是不一样的,低频时,在T0做计数器的时候,T1做定时器,高频是正好相反。这样就不要其他的选通芯片了。 6 对本设计的心得体会

本设计的频率在低频段不够精确,如采用等精度测量,经浮点数的数学运算,可满足精度与刷新时间的要求。在整形阶段可以更好的波形整形电路,可以更好的提高输入电压的输入范围,而不需要其它的匹配与保护电路,可以直接测量较高的电压。分频环节也可以用较先进的CPLD芯片,更好的提高分频的范围和分频的质量。单片机芯片可以采用处理速度更高,接受频率更宽的单片机芯片。显示处理电路静态显示,主程序不用扫描显示器,占用CPU过多的时间,利于显示位数的扩展,易于编程处理。

这次的设计是在老师的指导下完成的,虽然只有短短的一星期,但是通过此次的学习,使我再次巩固了关于单片机的应用和汇编语言的运用,提高了我对软硬件知识运用能力,为我在今后的学习和工作奠定了基础。再此感谢老师和许多同事的帮助,特别感谢公司为我提供了学习的机会。

38

7数字频率计原理图

39

40

8 本书参考文献资料

[ 1 ] 程守洙,江之永主编. 普通物理学(第5 版) [ M ]. 北京: 高等教育出版社,1998.

[ 2 ] 王新贤主编,《通用集成电路速查手册》.第二版.山东:科学技术出版社,2003

[ 3 ] 马文蔚改编. 物理学(第3 版) [ M ]. 北京:高等教育出版社,1993.

[ 4 ] 吴百诗主编. 版社,1994.

[ 5 ] 刘国荣主编,《单片微型计算机原理》,机械工业出版社,

大学物理(修订本) [ M ]. 西安:西安交通大学出2003 41

8 本书参考文献资料

[ 1 ] 程守洙,江之永主编. 普通物理学(第5 版) [ M ]. 北京: 高等教育出版社,1998.

[ 2 ] 王新贤主编,《通用集成电路速查手册》.第二版.山东:科学技术出版社,2003

[ 3 ] 马文蔚改编. 物理学(第3 版) [ M ]. 北京:高等教育出版社,1993.

[ 4 ] 吴百诗主编. 版社,1994.

[ 5 ] 刘国荣主编,《单片微型计算机原理》,机械工业出版社,

大学物理(修订本) [ M ]. 西安:西安交通大学出2003 41

本文来源:https://www.bwwdw.com/article/yiqr.html

Top