AT89C51数字频率计的设计与实现.docx

上传人:b****5 文档编号:5786478 上传时间:2023-01-01 格式:DOCX 页数:39 大小:365.57KB
下载 相关 举报
AT89C51数字频率计的设计与实现.docx_第1页
第1页 / 共39页
AT89C51数字频率计的设计与实现.docx_第2页
第2页 / 共39页
AT89C51数字频率计的设计与实现.docx_第3页
第3页 / 共39页
AT89C51数字频率计的设计与实现.docx_第4页
第4页 / 共39页
AT89C51数字频率计的设计与实现.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

AT89C51数字频率计的设计与实现.docx

《AT89C51数字频率计的设计与实现.docx》由会员分享,可在线阅读,更多相关《AT89C51数字频率计的设计与实现.docx(39页珍藏版)》请在冰豆网上搜索。

AT89C51数字频率计的设计与实现.docx

AT89C51数字频率计的设计与实现

摘要

测量是人类认识和改造世界的重要手段,在各个历史时期,测量水平的高低可以反映一个国家科学技术发展的状况。

特别在当今信息时代,通信技术日新月异,对频率准确的测量已成为通讯的基本条件之一。

在电子领域中,频率是最基本的参数之一,在检测技术,常常将一些非电量或其供电参量转换成频率进行测量测量。

另外,在现代信息传输和处理中,在电磁波频谱资源利用技术中,对频率源的稳定度和准确度提出了越来越高的要求,也大大促进了时间频率测量技术的发展

本论文主要阐述了以AT89C51单片机为核心,利用它内部的定时/计数器完成待测信号频率的测量。

单片机AT89C51内部具有2个16位定时/计数器,定时/计数器的工作可以由编程来实现定时、计数和产生计数溢出时中断要求的功能。

其基本模块包括输入、切换逻辑、计数、单片机控制及显示模块,采用汇编语言。

测量采用了直接与间接相结合的方法,它避免了直接测量法对低频精度的不足,同时消除了间接测量方法对高频精度的不足,以达到设计要求。

 

引言

在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此,频率的测量就显得更为重要。

测量频率的方法有多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。

电子计数器测频有两种方式:

一是直接测频法,即在一定闸门时间内测量被测信号的脉冲个数;二是间接测频法,如周期测频法。

直接测频法适用于高频信号的频率测量,间接测频法适用于低频信号的频率测量。

本次设计的数字频率计以AT89C51为核心,在软件编程中采用的是汇编语言,测量采用了直接与间接相结合的方法,它避免了直接测量法对低频精度的不足,同时消除了间接测量方法对高频精度的不足,以达到设计要求。

数字频率计设计的任务与要求

单片机控制的数字频率计

1.测频范围:

10Hz~10KHz。

为保证测量精度分三个频段

10Hz~100Hz,100Hz~1KHz,1KHz~10KHz,有超量程指示。

2.输入波形:

函数信号发生器输出方波,幅度为5V,能产生所需频率的脉冲信号。

3.测量误差:

≤1。

测量方案的论证与分析

测量方法的分析

测量方法通常有三种:

直接测量法、间接测量法、直接与间接测量结合法。

直接测频法

这种方法的测量原理是:

由于频率是单位时间内信号发生周期变化的次数,使得我们可以在给定的单位时间1S内(称为闸门)对被测信号的脉冲数计数,得到的脉冲个数就是被测信号的频率。

经分析,本测量法在低频段的相对测量误差较大,即在低频段不能满足本设计的要求

间接测量法(测周期法)

虽然直接测频法可以测出单位时间内脉冲的个数即频率,但是对于较低频率的信号其检测误差会大大增大,例如1.8Hz的信号,在通过1秒的闸门时间内其0.8会被淹没,这是在设计中所不允许的。

解决这种现象的办法就是改直接测频法为测周期法。

其原理是用被测信号的周期作为闸门,在该闸门时间内允许已知标准的短周期间隔的较高频率的信号通过,通过数字电路或微型计算机的运算,通过闸门的已知信号频率的个数越多,其被测频率就越低。

测周期法时序图

经误差分析,可得结论:

用该测量法测量时,被测信号的频率越高,测量误差越大。

直接与间接相结合的方法

该方法的出发点是避开±1量化误差的影响较大的频段,寻找有利因素而产生的。

对信号不采用直接测频法,而是改为测周期,并通过切换求得频率。

该方法可以满足测量误差的要求。

由此可见,为了获得较高的测量精度,在高频段,宜采用直接测频法;在低频段,宜采用测周期法。

把测量工作分为两种方法:

  

(1)当待测信号的频率>100Hz时,定时/计数器构成为计数器,以机器周期为基准,由软件产生计数闸门,计数闸门宽度>1s时,即可满足频率测量结果为4位有效数字;

  

(2)当待测信号的频率<100Hz时,定时/计数器构成为定时器,由频率计的予处理电路把待测信号变成方波,方波宽度等于待测信号的周期。

硬件电路设计方案分析

中小规模数字集成电路

系统测频部分采用中小规模数字集成电路,用机械式功能转换开关换档,完成测频率、测周期及测脉宽等功能。

该方案的特点是中小规模集成电路应用技术成熟,能可靠的完成频率计的基本功能,但由于系统功能要求较高,所以电路过于复杂,而且多量程换档开关使用不便。

原理框图如2.1所示。

2.1原理框图

单片机AT89C51

系统采用51系列单片机AT89C51作为控制核心,实现整个电路的测试信号控制、数据运算处理、键盘扫描和控制数码管的显示输出完成各种时序逻辑控制、计数功能。

系统组成框图如图2.2所示,所有信号包括基准频率信号、被测信号AT89C51单片机的控制下进行计数或定时,单片机将每次测试结果经运算处理后,以十进制的形式送到4位数码管显示电路显示。

按键接口电路,因为按键数量较少,所以采用独立式按键结构,实现测频、测周功能。

 

图2.2原理框图

显然,单片机AT89C51的电路简洁、新颖,数字集成电路从系统要实现的指标上看,要实现频率的测量范围10Hz~10KHz,实现比较困难,还要进行周期换算频率,因此采用单片机AT89C51系统。

 

基于单片机的数字频率计的硬件设计

系统硬件的构成

本频率计的数据采集系统主要元器件是单片机AT89C51,由它完成对待测信号频率的计数和结果显示等功能,外部还要有以下几个模块:

放大整形模块、时钟脉冲产生模块、按键模块、单片机系统、LED显示模块。

各模块关系图如图2所示:

 

显示电路

(静态串行显示方式)

按键电路

(中断扫描方式)

时钟电路

复位电路

总电路图

AT89C51单片机及其引脚说明

89C51是一种高性能低功耗的采用CMOS工艺制造的8位微控制器,它提供下列标准特征:

4K字节的程序存储器,128字节的RAM,32条I/O线,2个16位定时器/计数器,一个5中断源两个优先级的中断结构,一个双工的串行口,片上震荡器和时钟电路。

引脚说明:

·VCC:

电源电压

·GND:

·P0口:

P0口是一组8位漏极开路型双向I/O口,作为输出口用时,每个引脚能驱动8个TTL逻辑门电路。

当对0端口写入1时,可以作为高阻抗输入端使用。

当P0口访问外部程序存储器或数据存储器时,它还可设定成地址数据总线复用的形式。

在这种模式下,P0口具有内部上拉电阻。

在EPROM编程时,P0口接收指令字节,同时输出指令字节在程序校验时。

程序校验时需要外接上拉电阻。

·P1口:

P1口是一带有内部上拉电阻的8位双向I/O口。

P1口的输出缓冲能接受或输出4个TTL逻辑门电路。

当对P1口写1时,它们被内部的上拉电阻拉升为高电平,此时可以作为输入端使用。

当作为输入端使用时,P1口因为内部存在上拉电阻,所以当外部被拉低时会输出一个低电流(IIL)。

·P2口:

P2是一带有内部上拉电阻的8位双向的I/O端口。

P2口的输出缓冲能驱动4个TTL逻辑门电路。

当向P2口写1时,通过内部上拉电阻把端口拉到高电平,此时可以用作输入口。

作为输入口,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出电流(IIL)。

P2口在访问外部程序存储器或16位地址的外部数据存储器(例如MOVX@DPTR)时,P2口送出高8位地址数据。

在这种情况下,P2口使用强大的内部上拉电阻功能当输出1时。

当利用8位地址线访问外部数据存储器时(例MOVX@R1),P2口输出特殊功能寄存器的内容。

当EPROM编程或校验时,P2口同时接收高8位地址和一些控制信号。

·P3口:

P3是一带有内部上拉电阻的8位双向的I/O端口。

P3口的输出缓冲能驱动4个TTL逻辑门电路。

当向P3口写1时,通过内部上拉电阻把端口拉到高电平,此时可以用作输入口。

作为输入口,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出电流(IIL)。

P3口同时具有AT89C51的多种特殊功能,具体如下表1所示:

端口引脚

第二功能

P3.0

RXD(串行输入口)

P3.1

TXD(串行输出口)

P3.2

(外部中断0)

P3.3

(外部中断1)

P3.4

T0(定时器0)

P3.5

T1(定时器1)

P3.6

(外部数据存储器写选通)

P3.7

(外部数据存储器都选通)

表1P3口的第二功能

·RST:

复位输入。

当振荡器工作时,RST引脚出现两个机器周期的高电平将使单片机复位。

·ALE/

:

当访问外部存储器时,地址锁存允许是一输出脉冲,用以锁存地址的低8位字节。

当在Flash编程时还可以作为编程脉冲输出(

)。

一般情况下,ALE是以晶振频率的1/6输出,可以用作外部时钟或定时目的。

但也要注意,每当访问外部数据存储器时将跳过一个ALE脉冲。

·

程序存储允许时外部程序存储器的读选通信号。

当AT89C52执行外部程序存储器的指令时,每个机器周期

两次有效,除了当访问外部数据存储器时,

将跳过两个信号。

·

/VPP:

外部访问允许。

为了使单片机能够有效的传送外部数据存储器从0000H到FFFH单元的指令,

必须同GND相连接。

需要主要的是,如果加密位1被编程,复位时EA端会自动内部锁存。

当执行内部编程指令时,

应该接到VCC端。

·XTAL1:

振荡器反相放大器以及内部时钟电路的输入端。

·XTAL2:

振荡器反相放大器的输出端。

 

信号输入放大和整形电路

放大整形系统包括衰减器、放大器、施密特触发器。

它将正弦输入信号Vx整形成同频率方波Vo,幅值过大的被测信号经过分压器分压送入后级放大器,以避免波形失真。

由运算放大器构成的射级跟随器起阻抗变换作用,使输入阻抗提高。

同相输入的运算放大器的放大倍数为(R1+R2)/R1,改变R1的大小可以改变放大倍数。

系统的整形电路由施密特触发器组成,整形后的方波送到闸门以便计数。

由于输入的信号幅度是不确定、可能很大也有可能很小,这样对于输入信号的测量就不方便了,过大可能会把器件烧毁,过小可能器件检测不到,所以在设计中采用了这个信号调理电路对输入的波形进行阻抗变换、放大限幅和整形,信

号调理部分电路具体实现电路原理图和参数如下图4所示:

图4

时基信号产生电路

时钟是一切微处理器、微控制器内部电路工作的基础。

单片机内部有一个自激振荡电路,它是定时控制部件中的一部分,可以通过内部自激振荡或外部提供振荡源这两种方式,驱动内部时钟电路产生系统时钟信号。

内部方式:

在XTAL1、XTAL2跨接定时元件和两个电容就构成了自激振荡器。

C1、C2取5-30PF,起微调和稳定作用。

晶振频率:

f=1.2~12MHZ,常用频率为6、12、11.0592MHz。

外部方式:

外部振荡脉冲信号直接由XTAL2端输入,此时,XTAL1应接地,而片内振荡电路不起作用,。

常用于单片机同时工作,以便同步,要求信号低于12MHz。

时钟周期:

振荡器输出的时钟脉冲频率的倒数。

为单片机中最小、最基本的时间单位。

状态周期:

振荡信号经2分频后获得的信号周期,称S,显然,S为时钟周期的2倍。

机器周期:

12个时周钟期为一个机器周期,对应计算机执行一个基本操作所需的时间。

指令周期:

执行一条指令所需的时间,至少包含一个机器周期。

指令字节:

指令占用存储空间的字节数,有单字节、双字节、三字节三类。

当时钟频率为12MHz和6MHz时,时钟周期分别为1/12μs和1/6μs,机器周期分别为1μs和2μs。

这里使用12MHz晶振和两个电容就构成的自激振荡器。

复位电路

复位方式有上电自动复位、按键手动复位两种。

如图所示。

在按键手动电平复位电路中,具有上电和按键双重功能

 

按键电路

键盘电路使用中断扫描方式,使用中断方式可大大提高单片机效率。

显示电路

在单片机应用系统中通常使用由八个LED器件组成的七段LED显示器,其中七个LED构成七笔字形,另一个LED构成小数点(故有时称为八段显示器)。

如图所示,其接法共有两种:

共阴极与共阳极,前者是输入高电平有效(LED发光),后者是输入低电平有效。

其工作原理是:

控制其中各段LED的亮与暗即可显示出相应的数字、字母或符号。

七段LED显示器进行显示的信息称为七段代码,不同接法的七段代码显然是不相同的,共阴极和共阳极的七段代码的相同字符相加为FFH。

两种代码分别如图所示:

字符

字形码

字符

字形码

字符

字形码

共阴

共阳

共阴

共阳

共阴

共阳

0

3FH

C0H

8

7FH

80H

u

3EH

C1H

1

06H

F9H

9

6FH

90H

y

6EH

91H

2

5BH

A4H

A

77H

88H

00H

FFH

3

4FH

B0H

B

7CH

83H

4

66H

99H

C

39H

C6H

5

6DH

92H

D

5EH

A1H

6

7DH

82H

E

79H

86H

7

07H

F8H

F

71H

8EH

这里使用静态显示中的串行显示,节省单片机资源,稳定。

图如下所示:

数字频率计软件设计

主程序设计

程序要求:

要能实现量程切换,超量程指示,准确定时。

主程序流程图

子程序设计

子程序主要包括:

按键中断子程序、定时中断子程序、计数中断子程序、周期中断子程序、超量程判断子程序、除法子程序、二进制转BCD子程序、显示程子序。

按键中断子程序

按键中断子程序流程图

定时中断和计数中断子程序

 

 

定时中断和计数子程序流程图

周期中断子程序

周期中断子程序流程图

HAOPAN:

MOVA,32H

CLRC

CJNEA,38H,D1

AJMPN1

N1:

MOVA,31H

CJNEA,37H,D1

AJMPN2

N2:

MOVA,30H

CJNEA,36H,D1

AJMPOUT

D1:

JCMIN

JNCCHAOL

MIN:

MOVA,32H

CLRC

CJNEA,35H,D2

AJMPMN1

MNI:

MOVA,31H

CJNEA,34H,D2

AJMPMN2

MN2:

MOVA,30H

CJNEA,33H,D2

AJMPXIAOL

D2:

JCXIAOL

JNCOUT

XIAOL:

MOVA,#0BFH;"0."编码

AJMPDISPCH;显示输出

CHAOL:

MOVA,#86H;"1."编码

DISPCH:

JBALLOW,OUT;显示更新是否允许

MOVCHAO,#01H;超量程状态存放

CLRP2.0;清除显示

SETBP2.0

MOVSBUF,A;发送

JNBTI,$

CLRTI

OUT:

RET

超量程判断子程序

判断大小,小于量程输出“0.”,大于量程输出“1.”。

 

除法子程序

该子程序用于周期转换频率,因为周期为两到三字节,所以使用移位除法。

移位除法模拟手算方法:

1)从被除数高位开始对齐除数,比较。

2)若前者大于或等于后者,商位为1,并把被除数减除数,形成部分余数。

若前者小于后者,商位为0。

3)部分余数左移一位,商也左移一位。

4)整个余数若小于除数,则退出。

5)部分余数从高位开始与除数比较。

6)到第2)步。

若被除数大于或等于除数,则溢出。

二进制转BCD子程序

二进制转BCD分为小数部分和整数部分。

 

二进制转BCD子程序流程图

显示程子序

先进行查码,然后由串行口发送到移位寄存器中。

程序:

DISP:

JBALLOW,OUT;显示更新是否允许

MOVR2,#04H;位数

MOVR1,#40H;显示数据首地址

DL0:

MOVA,@R1

MOVDPTR,#TAB2

MOVCA,@A+DPTR

MOVSBUF,A;发送

JNBTI,$

CLRTI

INCR1

DJNZR2,DL0

RET

TAB2:

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

系统调试

硬件调试

硬件调试,由大到小,从整体到局部,进行调试。

本设计电路简单,所以不一一调试,就最复杂的显示电路进行调试。

先由仿真器连接显示电路,循环发送四位(1-9)显示编码,

如果四位都不能显示,检查信号传输电路,时钟电路,电源。

如果四位都能显示,但有的位显示不正确,检查LED与移位寄存器的连线顺序是否正确。

如果还显示不正确,与正常的位调换LED数码管。

调换后,正常的位显示不正常,则数码管坏了,换数码管。

调换后,不正常的位显示不正常,则移位寄存器坏了,换移位寄存器。

软件调试

软件调试的步骤

(1)源文件的建立:

使用菜单“File-New”或者点击工具栏的新建文件按钮,即可在项目窗口的右侧打开一个新的文本编辑窗口,在该窗口中输入汇编语言源程序(4.2小节所示)。

保存该文件,加上扩展名(.asm或a51),这里将文件保存为examl.asm。

(2)建立工程文件:

点击“Project-NewProject”菜单,出现以个对话框,要求给工程起一个名字,我们输入examl,不需要扩展名,点击保存按钮,出现第二个对话框。

这个对话框要求选择目标CPU(即我们所使用的芯片型号80C51)点击ATMEL前面的“+”号,展开该层,点击其中的80C51,然后点击确定按钮。

回到主界面,此时,在工程窗口的文件页中,出现了“Target1”,前面有“+”号,点击“+”展开,可以看到下一层的“SourceGroup1”,这时的工程还是一个空工程,里面什么文件也没有,需要手动把刚才编写好的源程序加入,点击“SouceGroup”使其反白显示,然后,点击鼠标右键,出现一个下拉菜单。

选中其中的“AddfiletoGroup”SouceGroup1”,对话框,要求寻找源文件,注意该对话框下面的“文件类型“默认为CSoucefile(*.c),也就是以C为扩展名的文件,而我们的文件是以asm为扩展名的,所以在列表框中找不到examl1.asm,要将文件类型该掉,点击对话框中”文件类型‘后的下拉列表,找到并选中“AsmSouceFile(*.asm,*.a51)”,这样,在列表框中就可以找到examl1.asm文文件了。

双examl1.asm文件,将文件加入项目,注意,在文件加入项目后,该对话框并不消失,等待继续加入其他文件,但初学时常会认为操作没有成功而再次双击同一文件,这时会出现对话框,提示你所选的文件以在列表中,此时点击确定,返回前一对话框,然后,点击”Close”即可返回主界面,返回后,点击“SouceGoup1”前的加号,会发现examl1.asm文件以在其中。

双击文件名,即打开源程序。

(3)工程的详细设置:

首先点击左边Project窗口的Target1,然后使用菜单“Proget-Optionfortarget‘target1’”即出现对工程设置的对话框,对这个对话框可谓非常复杂,共有8个页面,要全部高清可不容易,好在绝大部分设置项取默认值就行了。

设置完成以后安确认返回主界面,工程建立、设置完毕。

(4)编译、连接:

在设置好工程后,既可以进行编译、连接。

选择菜单Project-Buildtarget,对当前工程进行连接,如果当前文件已修改软件会先对该文件进行比阿尼,然后在连接以产生目标代码。

编译过程中的信息将出现在输出窗口中的Build页中,如果源程序有语法错误,会有错误报告出现,双击该行,可以定到出错的位置,对源程序反复修改后,最终会得到如图5-1所示的结果,提示获得了名为examl.hex的文件,该文件即可被编程器读入并写到芯片中,同时还产生了一些其他相关文件可被用于KEIL的仿真与调试。

 

正确编译之后的结果

调试过程中遇到的问题及解决方法

在进入环境以后,遇到了很多问题,总结如下:

(1)提示无asm文件

编译时候提示:

F:

\...\XX.asm

Filehasbeenchangedoutsidetheeditor,reload?

解决方法:

重新生成项目,产生examl.asm即可。

(2)在进入Keil的调试环境以后,发现程序有错

解决方法:

将光标定位于需要修改的程序上,用菜单,Debug》InlineAssambly…即可出现对话框,EnterNew后面的编辑框内直接输入需要修改的程序语句,输入完之后键入回车将自动指向下一条语句,可以继续修改,如果不在需要修改,可以点击右上角的关闭按钮关闭窗口。

(3)程序调试时,一些程序必须满足一定的条件才能被执行到

解决方法:

这些条件往往是异步发生或难以预先设定的,这类问题使用的单步实行方法是很难调试的,这时就要使用发哦程序调试中的另一种非常重要是方法---断点设置。

断点设置的方法有多种,常用的是在某一程序行设置断点,设置好断点后可以全速运行程序,一旦执行到该程序行即停止,可在此观察有关变量值,以确定问题所在。

在程序行设置/移除断点的方法是将光标定位于需要设置断点的程序行,使用菜单Debug/Insert/RemoveBreakPoint设置或移除断点(也可以用鼠标在该行双击实现同样的功能);Debug/Enable/DisableBreakPoint是开启或暂停光标所在懂行的断点功能;Dubug/DisaleAllBreakPoint暂停所有断点;Debug/KillAllBreakPoint清除所有的断点设置。

这些功能也可以用工具条上的快捷键进行设置。

(4)输入程序时,有中文标点,用keil编译时出现错误

解决方法:

程序里有带中文标点,用英文重输入一遍

(5)汇编出现数字、字母混淆

解决方法:

字母“O”和数字“0”。

主要错在这里。

注意细节!

 

参考文献

[1]李全利,单片机原理及应用技术。

北京:

高等教育出版社,2004

[2]王曙霞,单片机实验与实训指导。

西安:

西安电子科技大学出版社,2007

[3]及力,Protel2004原理图与PCB设计教程。

北京:

电子工业出版社,2007

[4]何利民,单片机高级教程。

北京:

航空航天大学出版社,2000

[5]李朝青,单片机原理与接口技术。

北京:

航空航天大学出版社,1999

[6]张毅刚,MCS-51单片机应用设计。

哈尔滨:

哈尔滨工业大学出版社,1997

[7]李华,MCS-51系列单片机实用接口技术。

北京:

航空航天出版社,2000

[8]陈光东,单片微型计算机原理接口技术。

武汉:

华中理工大学出版社,1999

[9]王福瑞,单片机测控系统大全,北京:

航空航天大学出版社,1998

附录A程序

ORG0000H

AJMPMAIN;主程序

ORG0003H

LJMPKAYBOARD;键盘中断入口

ORG000BH

LJMPTIME;定时中断入口

ORG0013H

LJMPZHOU;周期测量入口

ORG002BH

LJMPJSH;计数中断入口

LCEQU50H;量程存放

TOEQU51H;定时溢出次数存放

NEWEQU52H;量程切换状态存放

CHAOEQU53H;超量程状态存

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1