基于单片机简易的频率计.docx

上传人:b****2 文档编号:3577554 上传时间:2023-05-06 格式:DOCX 页数:24 大小:284.25KB
下载 相关 举报
基于单片机简易的频率计.docx_第1页
第1页 / 共24页
基于单片机简易的频率计.docx_第2页
第2页 / 共24页
基于单片机简易的频率计.docx_第3页
第3页 / 共24页
基于单片机简易的频率计.docx_第4页
第4页 / 共24页
基于单片机简易的频率计.docx_第5页
第5页 / 共24页
基于单片机简易的频率计.docx_第6页
第6页 / 共24页
基于单片机简易的频率计.docx_第7页
第7页 / 共24页
基于单片机简易的频率计.docx_第8页
第8页 / 共24页
基于单片机简易的频率计.docx_第9页
第9页 / 共24页
基于单片机简易的频率计.docx_第10页
第10页 / 共24页
基于单片机简易的频率计.docx_第11页
第11页 / 共24页
基于单片机简易的频率计.docx_第12页
第12页 / 共24页
基于单片机简易的频率计.docx_第13页
第13页 / 共24页
基于单片机简易的频率计.docx_第14页
第14页 / 共24页
基于单片机简易的频率计.docx_第15页
第15页 / 共24页
基于单片机简易的频率计.docx_第16页
第16页 / 共24页
基于单片机简易的频率计.docx_第17页
第17页 / 共24页
基于单片机简易的频率计.docx_第18页
第18页 / 共24页
基于单片机简易的频率计.docx_第19页
第19页 / 共24页
基于单片机简易的频率计.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于单片机简易的频率计.docx

《基于单片机简易的频率计.docx》由会员分享,可在线阅读,更多相关《基于单片机简易的频率计.docx(24页珍藏版)》请在冰点文库上搜索。

基于单片机简易的频率计.docx

基于单片机简易的频率计

摘要1

1.芯片介绍1

1.1LM324[1]1

1.2AT89S52[2]1

1.2.1AT89S52的主要性能1

1.2.2AT89S52的功能特性描述2

1.2.3AT89S52的引脚功能描述3

1.2.4特殊功能寄存器4

1.2.5存储器结构7

1.2.6定时器0和定时器17

1.2.7定时器27

1.2.8中断8

1.2.9晶振特性9

1.2.10Flash编程―并行模式10

2总体方案设计11

2.1设计要点11

2.2系统方案11

3模块设计与实现12

3.1显示模块12

3.2单片机总控制单元:

12

3.3放大整形电路[4]13

4软件设计[3]14

5测试结果18

6总结与体会19

参考文献20

附录1:

总体电路原理图21

附录2:

元件清单22

摘要

本次设计的简易频率计,是以AT89S52单片机为控制核心,辅以放大整形电路,显示电路构成的。

简易频率计能够根据题目要求能够用4位7段数码管显示待测频率,格式为0000Hz。

测量频率0~9999Hz信号类型:

正弦波、方波和三角波。

测量信号幅值:

0.1~9V。

另外,采用在线编程校准大大提高了频率计的测量精度,在9999Hz的频率范围内,可以把误差控制在0.022%以下。

而且具有灵活的现场可更改性。

在不更改硬件电路的基础上,对系统进行各种改进还可以进一步提高系统的性能。

该数字频率计具有高速、精确、可靠、抗干扰性强和现场可编程等优点。

对所设计的频率计的各项指标进行了测量和记录,满足要求,且在局部某些地方有自己的创新之处,相比用中规模集成器件构成的频率计优点有成本低、原理简单、功能齐全,实现价值高,各项性能较好。

关键字:

数字频率计AT89S52可编程高精度

1.芯片介绍

本次课程设计主要用到的芯片有用于整形电路的集成运放LM324和主控芯片AT89S52,下面对这两块芯片作一下详细的介绍。

1.1LM324[1]

LM324是四运放集成电路,它采用14脚双列直插塑料封装,外形如图1所示。

它的内部包含四组形式完全相同的运算放大器,除电源共用外,四组运放相互独立。

每一组运算放大器可用图2所示的符号来表示,它有5个引出脚,其中“+”、“-”为两个信号输入端,“V+”、“V-”为正、负电源端,“Vo”为输出端。

两个信号输入端中,Vi-(-)为反相输入端,表示运放输出端Vo的信号与该输入端的相位相反;Vi+(+)为同相输入端,表示运放输出端Vo的信号与该输入端的相位相同。

LM324的引脚排列见图3。

图2运算放大器的符号图3LM324的引脚排图

由于LM324四运放电路具有电源电压范围宽,静态功耗小,可单电源使用,价格低廉等优点,因此被广泛应用在各种电路中。

1.2AT89S52[2]

1.2.1AT89S52的主要性能

●与MCS-51单片机产品兼容

●8K字节在系统可编程Flash存储器

●1000次擦写周期

●全静态操作:

0Hz~33Hz

●三级加密程序存储器

●32个可编程I/O口线

●三个16位定时器/计数器

●八个中断源

●全双工UART串行通道

●低功耗空闲和掉电模式

●掉电后中断可唤醒

●看门狗定时器

●双数据指针

●掉电标识符

1.2.2AT89S52的功能特性描述

AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。

使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。

片上Flash允许程序存储器在系统可编程,亦适于常规编程器。

在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

AT89S52具有以下标准功能:

8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。

另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。

空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

其引脚结构图如图4所示。

图4AT89S52的引脚结构

1.2.3AT89S52的引脚功能描述

VCC:

电源

GND:

P0:

P0口是一个8位漏极开路的双向I/O口。

作为输出口,每位能驱动8个TTL逻辑电平。

对P0端口写“1”时,引脚用作高阻抗输入。

当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。

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

在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。

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

P1:

P1口是一个具有内部上拉电阻的8位双向I/O口,p1输出缓冲器能驱动4个TTL逻辑电平。

对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。

作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。

此外,P1.0和P1.2分别作定时器/计数器2的外部计数输(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),具体如下表1所示。

在flash编程和校验时,P1口接收低8位地址字节。

表1P1口部分引脚的第二功能

P2:

P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。

对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。

作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。

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

在这种应用中,P2口使用很强的内部上拉发送1。

在使用8位地址(如MOVX@RI)访问外部数据存储器时,P2口输出P2锁存器的内容。

在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。

P3:

P3口是一个具有内部上拉电阻的8位双向I/O口,p2输出缓冲器能驱动4个TTL逻辑电平。

对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。

作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。

P3口亦作为AT89S52特殊功能(第二功能)使用,如表2所示。

在flash编程和校验时,P3口也接收一些控制信号。

表2P3口引脚的第二功能

RST:

复位输入。

晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。

看门狗计时完成后,RST脚输出96个晶振周期的高电平。

特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。

DISRTO默认状态下,复位高电平有效。

ALE/PROG:

地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。

在flash编程时,此引脚(PROG)也用作编程输入脉冲。

在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。

然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。

如果需要,通过将地址为8EH的SFR的第0位置“1”,ALE操作将无效。

这一位置“1”,ALE仅在执行MOVX或MOVC指令时有效。

否则,ALE将被微弱拉高。

这个ALE使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。

PSEN:

外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。

当AT89S52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。

EA/VPP:

访问外部程序存储器控制信号。

为使能从0000H到FFFFH的外部程序存储器读取指令,EA必须接GND。

为了执行内部程序指令,EA应该接VCC。

在flash编程期间,EA也接收12伏VPP电压。

XTAL1:

振荡器反相放大器和内部时钟发生电路的输入端。

XTAL2:

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

1.2.4特殊功能寄存器

特殊功能寄存器(SFR)的地址空间映象如表3所示。

并不是所有的地址都被定义了。

片上没有定义的地址是不能用的。

读这些地址,一般将得到一个随机数写入的数据将会无效。

用户不应该给这些未定义的地址写入数据“1”。

由于这些寄存器在将来可能被赋予新的功能,复位后,这些位都为“0”。

表3AT89S52特殊寄存器映象及复位值

定时器2寄存器:

寄存器T2CON和T2MOD包含定时器2的控制位和状态位(如表4和表5所示),寄存器对RCAP2H和RCAP2L是定时器2的捕捉/自动重载寄存器。

中断寄存器:

各中断允许位在IE寄存器中,六个中断源的两个优先级也可在IE中设置。

双数据指针寄存器:

为了更有利于访问内部和外部数据存储器,系统提供了两路16位数据指针寄存器:

位于SFR中82H~83H的DP0和位于84H~85。

特殊寄存器AUXR1中DPS=0选择DP0;DPS=1选择DP1。

用户应该在访问数据指针寄存器前先初始化DPS至合理的值。

 

表4T2CON:

定时器/计数器2控制寄存器

表5AUXR:

辅助寄存器

1.2.5存储器结构

MCS-51器件有单独的程序存储器和数据存储器。

外部程序存储器和数据存储器都可以64K寻址。

程序存储器:

如果EA引脚接地,程序读取只从外部存储器开始。

对于89S52,如果EA接VCC,程序读写先从内部存储器(地址为0000H~1FFFH)开始,接着从外部寻址,寻址地址为:

2000H~FFFFH。

数据存储器:

AT89S52有256字节片内数据存储器。

高128字节与特殊功能寄存器重叠。

也就是说高128字节与特殊功能寄存器有相同的地址,而物理上是分开的。

当一条指令访问高于7FH的地址时,寻址方式决定CPU访问高128字节RAM还是特殊功能寄存器空间。

直接寻址方式访问特殊功能寄存器(SFR)。

例如,下面的直接寻址指令访问0A0H(P2口)存储单元MOV0A0H,#data使用间接寻址方式访问高128字节RAM。

例如,下面的间接寻址方式中,R0内容为0A0H,访问的是地址0A0H的寄存器,而不是P2口(它的地址也是0A0H)。

MOV@R0,#data堆栈操作也是简介寻址方式。

因此,高128字节数据RAM也可用于堆栈空间。

1.2.6定时器0和定时器1

在AT89S52中,定时器0和定时器1的操作与AT89C51和AT89C52一样。

为了获得更深入的关于UART的信息,可参考ATMEL网()。

从这个主页,选择“Products”,然后选择“8051-ArchitechFlashMicrocontroller”,再选择“ProductOverview”即可。

1.2.7定时器2

定时器2是一个16位定时/计数器,它既可以做定时器,又可以做事件计数器。

其工作方式由特殊寄存器T2CON中的C/T2位选择(如表2所示)。

定时器2有三种工作模式:

捕捉方式、自动重载(向下或向上计数)和波特率发生器。

如表4所示,工作模式由T2CON中的相关位选择。

定时器2有2个8位寄存器:

TH2和TL2。

在定时工作方式中,每个机器周期,TL2寄存器都会加1。

由于一个机器周期由12个晶振周期构成,因此,计数频率就是晶振频率的1/12。

在计数工作方式下,寄存器在相关外部输入角T2发生1至0的下降沿时增加1。

 

表6定时器2工作模式

在这11种方式下,每个机器周期的S5P2期间采样外部输入。

一个机器周期采样到高电平,而下一个周期采样到低电平,计数器将加1。

在检测到跳变的这个周期的S3P1期间,新的计数值出现在寄存器中。

因为识别1-0的跳变需要2个机器周期(24个晶振周期),所以,最大的计数频率不高于晶振频率的1/24。

为了确保给定的电平在改变前采样到一次,电平应该至少在一个完整的机器周期内保持不变。

1.2.8中断

AT89S52有6个中断源:

两个外部中断(INT0和INT1),三个定时中断(定时器0、1、2)和一个串行中断。

这些中断如图5所示每个中断源都可以通过置位或清除特殊寄存器IE中的相关中断允许控制位分别使得中断源有效或无效。

IE还包括一个中断允许总控制位EA,它能一次禁止所有中断。

如表7所示,IE.6位是不可用的。

对于AT89S52,IE.5位也是不能用的。

用户软件不应给这些位写1。

它们为AT89系列新产品预留。

定时器2可以被寄存器T2CON中的TF2和EXF2的或逻辑触发。

程序进入中断服务后,这些标志位都可以由硬件清0。

实际上,中断服务程序必须判定是否是TF2或EXF2激活中断,标志位也必须由软件清0。

定时器0和定时器1标志位TF0和TF1在计数溢出的那个周期的S5P2被置位。

它们的

值一直到下一个周期被电路捕捉下来。

然而,定时器2的标志位TF2在计数溢出的那个周期的S2P2被置位,在同一个周期被电路捕捉下来。

图5中断源

表7中断允许控制寄存器(IE)

1.2.9晶振特性

如图10所示,AT89S52单片机有一个用于构成内部振荡器的反相放大器,XTAL1和XTAL2分别是放大器的输入、输出端。

石英晶体和陶瓷谐振器都可以用来一起构成自激振荡器。

从外部时钟源驱动器件的话,XTAL2可以不接,而从XTAL1接入,如图7所示。

由于外部时钟信号经过二分频触发后作为外部时钟电路输入的,所以对外部时钟信号的占空比没有其它要求,最长低电平持续时间和最少高电平持续时间等还是要符合要求的。

图6内部振荡电路连接图石英晶振图7外部振荡电路连接图

C1,C2=30PF±10PF陶瓷谐振器C1,C2=40PF±10PF

1.2.10Flash编程―并行模式

AT89S52带有用作编程的片上Flash存储器阵列。

编程接口需要一个高电压(12V)编程使能信号,并且兼容常规的第三方*(原文:

third-party,不知道对不对)Flash或EPROM编程器。

AT89S52程序存储阵列采用字节式编程。

编程方法:

对AT89S52编程之前,需根据Flash编程模式表和图13、图14对地址、数据和控制信号设置。

可采用下列步骤对AT89S52编程:

1)在地址线上输入编程单元地址信号

2)在数据线上输入正确的数据

3)激活相应的控制信号

4)把EA/Vpp升至12V

5)每给Flash写入一个字节或程序加密位时,都要给ALE/PROG一次脉冲。

字节写周期时自身定制的,典型值仅仅50us。

改变地址、数据重复第1步到第5步,知道全部文件结束。

 

2总体方案设计

2.1设计要点

本次课程设计有以下要点:

设计一个频率计。

要求用4位7段数码管显示待测频率,格式为0000Hz。

测量频率范围:

10~9999Hz。

③测量信号类型:

正弦波、方波和三角波。

④测量信号幅值:

0.5~5V。

⑤设计的脉冲信号发生器,以此产生闸门信号,闸门信号宽度为1S。

⑥确定设计方案,按功能模块的划分选择元、器件和中小规模集成电路,设计分电路,画出总体电路原理图,阐述基本原理。

2.2系统方案

简易数字频率计可以用中规模集成芯片构建而成,但与用51单片机实现相比,其电路复杂程度要大得多,而且远远不及用单片机实现灵活,其精度也不及用单片机实现的高。

所以我采用用AT89S52单片机去实现。

我采用单片机89S52作为控制核心,用数码管显示所输入信号的频率,具体的系统框图如图8所示:

图8简易频率计的系统总体框图

其中,信号通过整形放大后,输入单片机中的计数器,运用单片机中的定时器设置每隔一秒钟将计数器中死亡数据输出,通过数码管显示。

单片机作为控制中心,随时检测和计录输入信号的频率,并控制输出显示和输入是否超载。

而显示电路用一个四位一体的数码管实现。

为简化硬件电路,用动态显示的方式,依次点亮个数码管,这样不仅仅是简化了电路,而且每一时刻四位数码管只相当于一位数码管的功耗,大大减少了功耗。

3模块设计与实现

3.1显示模块

本次课程设计采用一个四位一体数码管,替显输入信号的平率。

因为频率是一个实时变化量,我用一个的数码管来显示,每隔一秒更换一次数据。

电路原理图如图9所示。

各数码管的显示采用动态扫描的方式,这样,两个数码管共八位的功耗只相当于一位数码管显示的功耗。

与液晶显示相比,既可以实现所要求的功能节省了硬件成本,又大大减小了功耗。

图9显示模块

3.2单片机总控制单元

图10单片机系统原理图

我们用AT89S52作为整个电路的控制中心和数据计算处理中心,其中P0口对应两个数码管的数据位,P1口为LED动态点亮位。

P3.4脚用于信号输入。

具体系统原理图如图10所示

3.3放大整形电路[4]

考虑到所输入的信号有正弦波和三角波,而单片机所能读入的信号只能是数字信号的方波,所以正弦波和三角波在输入单片机之前必须通过整形电路整成方波。

我设计的整形电路是用集成运放搭建而成,运用集成运放的增益非常大,而又受限于运放的电源电压的特点,可以实现将一定幅值的电压信号整成标准的数字信号。

有因为所设计的频率计测量的频率信号的幅值能够达到越小越好,信号在进入整形电路之前设计了一个放大电路将信号放大。

放大电路也用集成运放构建而成,因集成运放的稳定性较好。

所设计的放大整形电路如图11所示:

图11放大整形电路

 

4软件设计[3]

本系统以AT89S52单片机为核心,用C语言编程[6],可实现题目要求的各种功能,其程序流程图如图12所示。

图12程序流程图

简易频率计的C语言程序:

#pragmadbcode

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitLED_0=P1^0;

sbitLED_1=P1^1;

sbitLED_2=P1^2;

sbitLED_3=P1^3;

/*=====0-9=====A-G=====*/

uchara[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0x86,0x8e,0x82};

ucharb[4]={0x8e,0xc1,0xc7,0xc7};

ucharone,two,three,four;

uintt=8000,j;//时间t

uintm=0,n=0,k=0;//次数

uints3=0,s4;//dt前后次数

time1()interrupt3

{//delay(20);

t=t+0.05*100;//每到0.05s,定时器1产生中断

TH1=0x3e;

TL1=0xff;

if(t%100==0){m=TH0*256+TL0;TH0=0x00;TL0=0x00;/*s3=n;m=(s3-s4);s4=s3;*/}

}

voiddelay(uintx);

voiddisplay(void);

voidled_analyze(uintl);

voidled_add();

voidmain()

{uinta;

IT1=1;//外部中断0下跳沿

EX1=1;

TMOD=0x15;//T1定时方式1,T0计数1

TH1=0x3e;

TL1=0xff;//定时50ms

TR1=1;//T1

ET1=1;

TH0=0x00;

TL0=0x00;//定时50ms

TR0=1;//T0

ET1=1;

EA=1;

while

(1)

{if(m<=9999){led_analyze(m);

for(a=0;a<100;a++)display();}

else{P0=b[0];

LED_0=0;

delay(300);

LED_0=1;

P0=b[1];

LED_1=0;

delay(300);

LED_1=1;

P0=b[2];

LED_2=0;

delay(3);

LED_2=1;

P0=b[3];

LED_3=0;

delay(300);

LED_3=1;

}

}

}

voiddelay(uintx)

{uinti;for(i=0;i

voiddisplay(void)

{P0=a[one];

LED_0=0;

delay(3);

LED_0=1;

P0=a[two];

LED_1=0;

delay(3);

LED_1=1;

P0=a[three];

LED_2=0;

delay(3);

LED_2=1;

P0=a[four];

LED_3=0;

delay(3);

LED_3=1;

}

voidled_analyze(uintl)

{l=l%10000;

one=l/1000;

two=(l/100)%10;

three=(l%100)/10;

four=(l%100)%10;}

本程序是结合理论联系实际设计而成,因为晶振的频率不是百分百的准确,根据单片机的机器周期设计一秒钟的时间也有差异,所以在线编程,一标准的频率对频率计进行校准,这样大大提高了频率计的精确度。

 

5测试结果

在硬件和软件都做好好,为检测频率计的可行性,用各种波形的标准频率信号对频率计进行了测试,测试结果如表8所示。

表8频率计的测试结果

幅值(V)

实际值(Hz)

显示值(Hz)

误差(%)

5.0

1000

1000

0

5.0

5000

5001

0.02

5.0

9000

9002

0.022

0.2

1000

1000

0

0.2

5000

5001

0.02

0.2

9000

9002

0.022

0.1

9000

9002

0.022

0.1

1000

1000

0

0.1

5000

5001

0.02

0.1

9000

9002

0.022

9.0

9000

9002

0.022

从所测试的结果可以看出,此次课程设计所涉及出来的简易频率计的进度是相当高的。

如果对所输入的信号进行分频或增加数码管的位数,可以进一步提高所测频率值的范围。

但误差无法消除,有一部分原因是单片机工作时间的长短,直接影响机器周期的长短。

 

6总结与体会

本文对所设计的简易频率计做了整体和各模块的介绍,及硬件软件设计原理和实现方法的说明。

频率计AT89S52单片机为控制核心,辅以整形电路,显示电路等外围器件,构成了一个单片机系统。

频率计能够根据题目要求能够用4位7段数码管显示待测频率,格式为0000Hz。

测量频率0~9999Hz信号类型:

正弦波、方波和三角波。

测量信号幅值:

0.1~9V。

在9999Hz的频率范围内,可以把误差控制在0.022%以下。

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

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2