2基于AT89C51单片机的简易频率计设计.docx
- 文档编号:23578809
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:25
- 大小:1.03MB
2基于AT89C51单片机的简易频率计设计.docx
《2基于AT89C51单片机的简易频率计设计.docx》由会员分享,可在线阅读,更多相关《2基于AT89C51单片机的简易频率计设计.docx(25页珍藏版)》请在冰豆网上搜索。
2基于AT89C51单片机的简易频率计设计
嵌入式论文
--基于AT89C51单片机的简易频率计设计
学号:
2013101089
姓名:
陈镜宇
专业:
通信工程
课程:
嵌入式系统设计
指导教师:
陈超
摘要
近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此越来越广泛地应用各个领域。
本文的频率计系统是以单片机(AT89C51)为核心,利用AT89C51单片机的T0和T1的定时计数功能来完成对输入的信号进行频率计数,由时基集成电路NE555P、四位共阴极数码管等元器件以及C语言程序组成。
具体介绍应用Proteus的ISIS软件进行单片机系统的频率设计与仿真的实现方法,以及Keil软件的编译与应用。
该方法既能准确验证所设计的系统是否满足技术要求,又能提高系统设计的效率和质量,降低开发成本,具有推广价值。
关键词:
AT89C51、NE555、频率计
1.单片机简介
1.1单片机概述
单片机因将其主要组成部分集成在一个芯片上而得名,具体说就是把中央处理器CPU(Centralprocessingunit)。
随机存储器RAM(Randomaccessmemory)。
只读存储器ROM(Readonlymemory)。
中断系统、定时器/计数器以及I\O(Input/output)接口电路等主要微型机部件集成在一个芯片上。
虽然单片机只是一个芯片,但从组成和功能上看,它已具有了计算机系统的属性。
为此,称它为单片微型计算机SCMC(Singlechipmicrocomputer),简称单片机。
单片机主要应用与控制领域,用以实现各种测试和控制功能,为了强调起控制属性,也可以把单片机称为微控制器MCU(Microcontrollerunit)。
在国际上,“微控制器”的叫法似乎更通用一些,而在我国则比较习惯与“单片机”这一名称。
单片机在应用时,通常是处于控制系统的核心地位并融入其中,即以嵌入的方式进行使用,为了强调其"嵌入"的特点,也常常将单片机称为嵌入式微控制器EMCU(Embeddedmicrocontrollerunit)。
在单片机的电路和结构中,有许多嵌入式应用的特点。
1.2单片机与单片机系统
单片机通常是指芯片本身,它是有芯片制造商生产的,在它上面集成的是一些做为基本组成部分的运算器电路,控制器电路,存储器,中断系统,定时器/计数器以及输入/输出口电路等。
但一个单片机芯片并不能把计算机的全部电路都集成到其中,例如组成谐振电路和复位电路的石英晶体,电阻,电容等,这些元件在单片机系统中只能以散件的形式出现。
此外,在实际的控制应用中,常常需要扩展外围电路和外围芯片。
从中可以看到单片机和单片机系统的差别,即:
单片机只是一块芯片,而单片机系统则是在单片机芯片的基础上扩展其它电路或芯片构成的具有一定应用功能的计算机系统。
通常所说的单片机系统都是为实现某一控制应用需要由用户设计的,是一个围绕单片机芯片而组建的计算机应用系统。
在单片机系统中,单片机处于核心地位,是构成单片机系统的硬件和软件基础。
2.频率计数器概述
2.1简介
频率计数器是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。
它是一种用十进制数字显示被测信号频率的数字测量仪器。
它的基本功能是测量正弦信号,方波信号及其他各种单位时间内变化的物理量。
在进行模拟、数字电路的设计、安装、调试过程中,由于其使用十进制数显示,测量迅速,精确度高,显示直观,经常要用到频率计。
本数字频率计将采用定时、计数的方法测量频率,采用一个四位共阴极数码管显示器动态显示4位数。
测量范围从1Hz—9999Hz的方波、用单片机实现自动测量功能。
基本设计原理是直接用十进制数字显示被测信号频率的一种测量装置。
它以测量周期的方法对正弦波、方波、三角波的频率进行自动的测量。
2.2频率测量仪的设计思路与频率的计算
频率测量仪的设计思路主要是:
对信号分频,测量一个或几个被测量信号周期中已知标准频率信号的周期个数,进而测量出该信号频率的大小,其原理如右图1所示。
图2.1频率测量原理图
若被测量信号的周期为,分频数m1,分频后信号的周期为T,则:
T=m1Tx。
由图可知:
T=NTo(注:
To为标准信号的周期,所以T为分频后信号的周期,则可以算出被测量信号的频率f。
)
由于单片机系统的标准频率比较稳定,而是系统标准信号频率的误差,通常情况下很小;而系统的量化误差小于1,所以由式T=NTo可知,频率测量的误差主要取决于N值的大小,N值越大,误差越小,测量的精度越高。
2.3基本设计原理
基本设计原理是直接用十进制数字显示被测信号频率的一种测量装置。
它以测量周期的方法对正弦波、方波、三角波的频率进行自动的测量。
所谓“频率”,就是周期性信号在单位时间(1s)内变化的次数。
若在一定时间间隔T内测得这个周期性信号的重复变化次数N,则其频率可表示为f=N/T。
其中脉冲形成电路的作用是将被测信号变成脉冲信号,其重复频率等于被测频率fx。
时间基准信号发生器提供标准的时间脉冲信号,若其周期为1s,则门控电路的输出信号持续时间亦准确地等于1s。
闸门电路由标准秒信号进行控制,当秒信号来到时,闸门开通,被测脉冲信号通过闸门送到计数译码显示电路。
秒信号结束时闸门关闭,计数器停止计数。
由于计数器计得的脉冲数N是在1秒时间内的累计数,所以被测频率fx=NHz。
3.系统设计
3.1频率计数器系统硬件组成
频率计数器系统硬件主要由AT89C51单片机、定时电路NE555、LED数码管等元器件组成。
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。
NE555是美国Signetics公司1972年研制的用于取代机械式定时器的中规模集成电路,因输入端设计有三个5kΩ的电阻而得名。
数码管是一种半导体发光器件,其基本单元是发光二极管。
图3.1系统框图
3.2AT89C51单片机简介
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
图3.2AT89C51单片机
3.2.1主要特性
与MCS-51兼容4K字节可编程闪烁存储器寿命:
1000写/擦循环数据保留时间:
10年全静态工作:
0Hz-24Hz三级程序存储器锁定128*8位内部RAM32可编程I/O线两个16位定时器/计数器5个中断源可编程串行通道低功耗的闲置和掉电模式片内振荡器和时钟电路
3.2.2管脚说明
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
P3.0RXD
串行输入口
P3.1TXD
串行输出口
P3.2/INT0
外部中断0
P3.3/INT1
外部中断1
P3.4T0
记时器0外部输入
P3.6/WR
外部数据存储器写选通
P3.7/RD
外部数据存储器读选通
表3.1P3口功能列表
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
3.3定时电路NE555
3.3.1NE555介绍
NE555是属于555系列的计时IC的其中的一种型号,555系列IC的接脚功能及运用都是相容的,只是型号不同的因其价格不同其稳定度、省电、可产生的振荡频率也不大相同;而555是一个用途很广且相当普遍的计时IC,只需少数的电阻和电容,便可产生数位电路所需的各种不同频率之脉波讯号。
3.3.2NE555特点
(1)只需简单的电阻器、电容器,即可完成特定的振荡延时作用。
其延时范围极广,可由几微秒至几小时之久。
(2)它的操作电源范围极大,可与TTL,CMOS等逻辑闸配合,也就是它的输出准位及输入触发准位,均能与这些逻辑系列的高、低态组合。
(3)其输出端的供给电流大,可直接推动多种自动控制的负载。
(4)它的计时精确度高、温度稳定度佳,且价格便宜。
3.3.3NE555引脚位配置说明
图3.3NE555接脚图
图3.4NE555的内部结构框图
3.4数码管
3.4.1数码管介绍
数码管是一种半导体发光器件,其基本单元是发光二极管。
数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管.
如图所示,LED数码管由7个发光二极管组成,此外,还有一个圆点型发光二极管(在图中以dp表示),用于显示小数点。
通过七段发光二极管亮暗的不同组合,可以显示多种数字、字母以及其它符号。
LED数码管中的发光二极管共有两种
图3.5数码管的符号和引脚
3.4.2连接方法
共阴极接法:
把发光二极管的阴极连在一起构成公共阴极。
使用时公共阴极接地,这样阳极端输入高电平的段发光二极管就导通点亮,而输入低电平的则不点亮。
实验中使用的LED显示器为共阴极接法
共阳极接法:
把发光二极管的阳极连在一起构成公共阳极。
使用时公共阳极接+5V。
这样阴极端输入低电平的段发光二极管就导通点亮,而输入高电平的则不点亮。
为了显示数字或符号,要为LED显示器提供代码,因为这些代码是为显示字形的,因此称之为字形代码。
七段发光二极管,再加上一个小数点位,共计八段。
因此提供给LED显示器的字形代码正好一个字节。
若a、b、c、d、e、f、g、dp8个显示段依次对应一个字节的低位到高位,即D0、D1、D2、D3、D4、D5、D6、D7,则用共阴极LED数码管显示十六进制数时所需的字形代码如表3.2所示。
字型
共阴极字形代码
字型
共阴极字形代码
字型
共阴极字形代码
0
3FH
6
7DH
C
39H
1
06H
7
07H
d
5EH
2
5BH
8
7FH
E
79H
3
4FH
9
6FH
F
71H
4
66H
A
77H
灭
00H
5
6DH
b
7CH
表3.2共阴极LED数码管字形代码
4.频率计数器系统设计流程
图4.1基于Proteus的单片机系统设计流程
4.1硬件电路设计
4.1.1频率计数器电路图设计
运行Proteus的ISIS后出现程序主窗口界面,鼠标左键单击窗口左侧的元器件工具栏的component.按钮,接着再点击窗口左侧的元器件选择区的PickDivices.按钮,弹出如图1所示的PickDevices窗口,再在Categ栏里点击MicroprocessorICs项后,在Results栏里会出现各种类型的CPU器件,找到AT89C51后双击,AT89C51就被添加到当前窗口左侧的元器件列表区了。
用同样的方法依次把NE555、数码管、晶振以及多个电阻、电容也添加到器件列表区里。
然后再依次点击列表区里的器件,单击左键把他们放到绘图区,右键选中元件,并编辑其属性,合理布局后,进行连线。
连线时当鼠标的指针靠近一个对象的引脚时,跟着鼠标的指针rICs就会出现一个“×”提示符号,点击鼠标左键即可画线了,需要拐弯时点击一下即可,在终点再点击确认一下就画出了一段导线,所有导线画完后,点击工具栏的Inter-sheeTerminal.按钮,添加上电源和接地符号,原理图的绘制就完成了。
4.1.2频率计数器电路图
(1)NE555方波产生信号电路图:
所产生方波公式:
T1=0.693(RA+RB)*C
T2=0.693RB*C
F=1.433/(RA+2RB)*C
图4.2NE555方波信号产生电路原理图
注:
555不属于频率计,放在这里当信号源,方便验收时演示频率计测频率,制作频率计时频率要专用信号发生器,以便校准自制的频率计
(2)频率计数器系统原理图
方波信号产生电路NE555的Q脚接TO计数器,以使T0完成对方波的计数功能。
AT89C51单片机PO.0-P0.7口接数码管的显示段,P2.0-P2.3接四段的数码管选择口。
XTAL1和XTAL2接上12MHZ的晶振。
即振荡周期=1/12us;时钟周期=1/6us;
机器周期=1us。
图4.3设计频率计数器系统原理图
4.2软件设计
4.2.1程序流程图设计
图4.4系统程序流程图
4.2.2程序设计内容
(1)定时/计数器T0和T1的工作方式设置,由图可知,T0是工作在计数状态下,对输入的频率信号进行计数,但对工作在计数状态下的T0,最大计数值为fOSC/24,由于fOSC=12MHz,因此:
T0的最大计数频率为250KHz。
对于频率的概念就是在一秒只数脉冲的个数,即为频率值。
所以T1工作在定时状态下,每定时1秒中到,就停止T0的计数,而从T0的计数单元中读取计数的数值,然后进行数据处理。
送到数码管显示出来。
(2)T1工作在定时状态下,最大定时时间为65ms,达不到1秒的定时,所以采用定时5ms,共定时200次,即可完成1秒的定时功能。
4.2.3源程序设计
(1)设置定时器工作方式,开中断和定时器:
TMOD=0x15;//设置定时器启动模式
TH0=0;
TL0=0;
TH1=(65536-5000)/256;
TL1=(65536-5000)%256;
TR1=1;
TR0=1;//启动定时器
ET0=1;
ET1=1;//启动两个中断
EA=1;//开中断
由前面可知工作方式寄存器TMOD的值和TH0、TL0的值,ET0是T0溢出中断允许位,所以ET0=1表示允许T0中断;要引入中断,所以必须开总中断,所以EA=1;TR0是T0定时器运行控制位,置1表示启动T0。
(2)TO计数子程序:
voidt0(void)interrupt1using0
{
T0count++;
}
//中断号1
(3)T1定时子程序:
voidt1(void)interrupt3using0
{
TH1=(65536-5000)/256;
TL1=(65536-5000)%256;
timecount++;
if(timecount==200)
{
TR0=0;
timecount=0;
flag=1;
}
P2=0xff;
P0=displaycode[dispbuf[dispcount]];
P2=displaybit[dispcount];
dispcount++;
if(dispcount==4)
{
dispcount=0;
}
}
4.2.4KeilC51进行源程序调试
(1)启动Keilc51
(2)新建一个工程。
Project菜单——〉Newproject,选择好我们要保存的文件夹后,键入Frist保存。
接着弹出CPU类型选择框,我们选择最常用的AT89C51,按确定。
(3)在工程中加入文件。
新建一个文件,文件菜单File——〉New,我们再选择:
文件菜单File——〉SaveAs(另存为)弹出对话框后,我们文件名框中键入f.c(注意文件后缀名是.c)保存。
C文件建好啦。
现在我们把文件加入到工程中去。
点击Target1前面的+号,右键单击SourceGroup1——〉选择AddFilestoGroup,SourceGroup1,选择添加Add。
图4.5KeilC51下编辑成员创建工程与编辑源代码
图4.6编译工程成功并生成Hex文件
4.2.5系统调试与仿真
NE555方波信号产生电路
所产生频率:
F=1/0.693(R21+2RV)*C
图4.7NE555方波信号产生电路图
图4.8虚拟示波器仿真结果
4.2.6实物图
图4.9实物图
4.2.7自己设计的PCB图
图4.10PCB图
参考文献
1.51单片机应用开发范例大全第二版[主编:
宋戈、黄鹤松等]
2.XX百科
附录
5.1附录A仿真图
附录图.1
5.2附录B程序代码
#include
unsignedcharcodedisplaybit[]={0xfe,0xfd,0xfb,0xf7};//四位选择
unsignedcharcodedisplaycode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};//0,1,2,3,4,5,6,7,8,9
unsignedchardispbuf[4]={0,0,0,0};//数据缓冲区,j就是屏幕显示的缓冲数据
unsignedchartemp[4];//显示速度分成显示字符的缓冲区
unsignedchardispcount;//显示位数的定位
unsignedcharT0count;//to计数器的溢出次数
unsignedchartimecount;//定时的次数
bitflag;
unsignedlongx;
voidmain(void)
{
unsignedchari;
TMOD=0x15;//设置定时器启动模式
TH0=0;
TH1=(65536-5000)/256;
TL1=(65536-5000)%256;
TR1=1;
TR0=1;//启动定时器
ET0=1;
ET1=1;//启动两个中断
EA=1;//开中断
while
(1)
{
if(flag==1)
{
flag=0;
x=T0count*65536+TH0*256+TL0;//显示初始化0
for(i=0;i<4;i++)
{
temp[i]=0;
}
i=0;
while(x/10)
{
temp[i]=x%10;
x=x/10;
i++;
}
temp[i]=x;
for(i=0;i<4;i++)
{
dispbuf[i]=temp[i];
}
timecount=0;
T0count=0;
TH0=0;
TL0=0;
TR0=1;
}
}
}
voidt0(void)interrupt1using0
{
T0count++;
}
voidt1(void)interrupt3using0
{
TH1=(65536-5000)/256;
TL1=(65536-5000)%256;
timecount++;
if(timecount==200)
{
TR0=0;
timecount=0;
}
P2=0xff;
P0=displaycode[dispbuf[dispcount]];
P2=displaybit[dispcount];
dispcount++;
if(dispcount==4)
{
dispcount=0;
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 AT89C51 单片机 简易 频率计 设计