单片机脉冲信号测量Word下载.docx
《单片机脉冲信号测量Word下载.docx》由会员分享,可在线阅读,更多相关《单片机脉冲信号测量Word下载.docx(22页珍藏版)》请在冰豆网上搜索。
测量按键
图2。
1系统框图
图中给出了整个系统设计的系统框图,系统主要由三个主要部分组成,单片机和晶振电路设计,显示电路设计,复位电路设计.
第三章硬件设计任务
AT89C51基本工作电路设计:
使单片机正常工作;
时钟电路:
为单片机提供时钟信号;
复位电路:
为单片机提供高电平复位信号;
显示电路:
显示当前测量脉冲宽度;
按键电路:
开始测量脉冲信号;
3。
1基于AT89C51脉冲信号测量系统硬件设计详细分析
1。
1AT89C51单片机工作电路
本设计的核心是单片机电路,考虑到需要一个中断输入,存储容量、外部接口对单片机端口的需要以及兼顾到节约成本的原则,选用了常用的AT89C51单片机。
AT89C51是低功耗、高性能、经济的8位CMOS微处理器,工作频率为0-24MHz,内置4K字节可编程只读闪存,128x8位的内部RAM,16位可编程I/O总线。
它采用Atmel公司的非易储器制造技术,与MCS51的指令设置和芯片引脚可兼容.AT89C51可以按照常规方法进行编程,也可以在线编程.其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
AT89C51工作的最简单的电路是其外围接一个晶振和一个复位电路,给单片机接上电源和地,单片机就可以工作了。
其最简单的工作原理图如下图.
图3。
1AT89C51单片机工作电路
3.1。
2基于AT89C51脉冲信号测量系统复位电路
MCS—51的复位是由外部的复位电路来实现的。
MCS—51单片机片内复位,复位引脚RST通过一个斯密特触发器用来抑制噪声,在每个机器周期的S5P2,斯密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。
复位电路通常采用上电自动复位和按钮复位两种方式。
上电自动复位是通过外部复位电路的电容充电来实现的。
只要Vcc的上升时间不超过1ms,就可以实现自动上电复位。
除了上电复位外,有时还需要按键手动复位。
按键手动复位有电平方式和脉冲方式两种。
其中电平复位是通过RST端经电阻与电源Vcc接通而实现的。
按键脉冲复位则是利用RC微分电路产生的正脉冲来实现的。
2上电复位电路
上图兼有上电复位和按钮复位的电路。
在单片机设计中,若有外部扩展的I/O接口电路需初始复位,如果它们的复位端和MCS-51单片机的复位端相连,复位电路中的R、C参数要受到影响,这时复位电路中的R、C参数要统一考虑以保证可靠的复位。
如果单片机MCS-51单片机与外围I/O接口电路的复位电路和复位时间不完全一致,使单片机初始化程序不能正常运行,外围I/O接口电路的复位也可以不和MCS-51单片机复位端相连,仅采用独立的上电复位电路.一般来说,单片机的复位速度比外围I/O快些。
若RC上电复位电路接MCS-51单片机和外围电路复位端,则能使系统可靠地同步复位。
为保证系统可靠复位,在初始化程序中应用到一定的复位延迟时间.
复位电路软件程序跑飞或者硬件发生错误的时候产生一个复位信号,控制MCS—51单片机从0000H单元开始执行程序,重新执行软件程序。
此电路的输出
端RESET接在单片机的复位引脚。
3基于AT89C51脉冲信号测量系统时钟电路
时钟在单片机中非常重要,单片机各功能部件的运行都是以时钟频率为基准。
时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性.常用的时钟电路有两种方式,一种是内部时钟方式,另一种为外部时钟方式.
内部时钟方式:
内部时钟方式电路图如下图所示。
图3.3内部时钟电路
MCS—51单片机内部有一个用与构成振荡器的高增益反相放大器,该高增益反相放大器的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。
这两个引脚接石英晶体振荡器和微调电容,就构成一个稳定的自激振荡器电路。
电路中的电容C1和C2典型值通常选择为33PF左右。
对外接电容的值虽然没有严格的要求,但是电容的大小会影响振荡器频率的高低、振荡器的稳定性和起振的快速性。
晶体的振荡频率的范围通常是在1.2MHz-12MHz之间。
晶体的频率越高,则系统的时钟频率也就越高,单片机的运行速度也就越快。
为了提高温度稳定性,应采用温度稳定性能好的NPO高频电容.MCS-51单片机常选择振荡频率12MHz的石英晶体。
外部时钟方式:
外部时钟方式电路图如下图所示。
4外部时钟电路
外部时钟方式是使用外部振荡脉冲信号,常用于多片MCS-51单片机同时工作,以便于同步.对外部脉冲信号只要求高电平的持续时间大于20us,一般为低于12MHz的方波。
外部的时钟源直接接到XTAL2端,直接输入到片内的时钟发生器上。
由于XTAL2的逻辑电平不是TTL的,因此要外接一个4。
7k~10k的上拉电阻。
这次的设计采用MCS—51的内部时钟方式。
因为外部时钟方式是用外部振荡脉冲信号,用于多片MCS-51单片机同时工作。
在这次设计中只用一个MCS—51单片机,不需要振荡脉冲信号.
4基于AT89C51脉冲信号测量系统按键电路
按键是实现人机对话的比较直观的接口,可以通过按键实现人们想让单片机做的不同的工作.键盘是一组按键的集合,键是一种常开型开关,平时按键的两个触点处于断开状态,按下键是它们闭合。
键盘分编码键盘和非编码键盘,案件的识别由专用的硬件译码实现,并能产生键编号或键值的称为编码键盘,而缺少这种键盘编码电路要靠自编软件识别的称为非编码键盘。
在单片机组成的电路系统及智能化仪器中,用的更多的是非编码键盘。
下图就是一种比较典型的按键电路,在按键没有按下的时候,输出的是高电平,当按键按下去的时候,输出的低电平。
图3.5按键电路
5基于AT89C51脉冲信号测量系统显示电路
本设计采用6位LED数码管动态显示测量值。
动态显示是一位一位地轮流点亮各位数码管,这种逐位点亮显示器的方式称为动态扫描。
各位数码管的段选线相应并联在一起,由P0端口送字形代码,各位LED显示器的位选线(COM端)由P1端口控制。
图中,数码管采用共阴极LED,P1端口输出经过6路反相驱动器75452后接至数码管的COM端。
当位选控制口P1的某位输出:
“1"
时,75452反相器驱动相应的LED位发光。
6LED显示电路
显示缓冲区DISBUF是片内RAM的一个区域,占用片内RAM的70H~75H单元,它的作用是存放要显示的字符,其长度与LED的位数相同。
显示程序的任务是吧显示缓冲区中待显示的字符送往LED显示器显示。
在进行动态扫描显示时,从DISBUF中依次取出待显示的字符,采用查表的方法得到去对应的字形代码,逐个点亮各位数码管每位显示1ms左右,即可是各位数码管显示要显示的字符。
下图给出了动态扫描显示子程序DISPLAY的流程图。
R0指向DISBUF首地址
DISPLAY
R3=01,选右起第一个LED
瞬时关显示器
从DISBUF中取出字符
查表取对应的字形码
输出字形码
点亮当前LED显示位
是第六位?
RET
下一个字符
图3.7显示子程序DISPLAY的流程图
主程序首先设置定时器T0为方式1,门控信号GATE=1,在被测脉冲信号INT0的上升启动T0计数码,被测脉冲信号下降沿停止T0计数,脉宽测量过程见下图.定时器T0以方式1对内部脉冲计数,16位计数值存放在40H(高字节)和41H单元(低字节),调用WDISBUF子程序将该16位计数值换成6位非压缩型BCD码放入显示缓冲区DISBUF中。
主程序流程图如下。
被测脉冲信号
INT0
为高则等待
为低时启动T0
上升沿开始计数
下降沿停止T0计数
脉宽测量过程图
初始化
主程序
启动T0
输入为高?
开始计数
输入为低?
停止T0计数
显示测量值
Y
N
8主程序流程图
第四章软件结论
通过这次学习,我把平时学习的那些理论知识应用到这次的实践之中,锻炼了我的实践能力。
在不懈的努力下,我顺利并按时地完成《基于单片机的脉冲信号测试仪设计》这个课程设计.设计过程中,与老师的短暂交流让我毕生受益匪浅,老师丰富的专业知识、以及严谨细致、一丝不苟的作风,将成为我日后生活中的典范,学习中的榜样,在此谨对老师致以衷心的感谢!
在设计过程中,我将基础理论知识融于实践认真完成每个环节、这不仅很好地巩固了我的理论知识而且也锻炼了我的动手能力。
同时也提高了我独立思考问题能力。
本次设计从选题、编程设计到完成整个过程都倾注了老师的心血,我向老师表示衷心的感谢和诚挚的敬意!
下图是单片机脉冲信号测量程序效果图:
图4.1单片机脉冲信号测量程序效果图
第五章参考文献
[1]李华单片机原理及应用,兰州大学出版社,2001;
[2]兰吉昌51单片机应用设计百例,化学工业出版社,2008;
[3]冯育长单片机系统设计与实例分析,西安电子科技大学出版社,2007;
[4]李学礼基于Proteuse的8051单片机实例教程,电子工业出版社,2008;
[5]魏立峰王宝兴,单片机原理与应用技术,北京大学出版社,2006;
第六章附录
6.1脉冲信号宽度测量设计程序
ORG0000H
LJMPSTART
ORG0040H
COUNTEQU40H;
COUNT,COUNT+1单元存放测量值
START:
MOVSP,#40H
;
MOVTMOD,#00001001B;
T0方式1,GATE=1
AGAIN:
MOVTH0,#00H;
计数初值=0000H
MOVTL0,#00H
WAIT0:
JBP3.2,WAIT0;
INT0输入为高则开始等待
SETBTR0;
INT0为低时启动T0
WAIT1:
JNBP3。
2,WAIT1;
INT0输入为高则开始计数
WAIT2:
JBP3。
2,WAIT2;
等待INT0下降沿
CLRTR0;
下降沿后停止T0计数
MOVA,TH0;
取计数值高字节
MOVCOUNT,A
MOVA,TL0;
取计数值低字节
MOVCOUNT+1,A
LCALLWDISBUF;
写DISBUF
LCALLDISPLAY;
显示测量值
LCALLDISPLAY
LJMPAGAIN
;
写DISBUF子程序、
子程序名称:
WDISBUF
;
子程序功能:
将一个双字节二进制数转换成6位非压缩型BCD码,写入显示缓冲区DISBUF中.
入口参数:
内部RAM的40H(高字节)和41H(低字节)单元中是待转换的数据
出口参数:
转换结果放入DISBUF内部RAM70H~75H单元中,70H单元中为最低位。
HEXEQU40H
DISBUFEQU70H
WDISBUF:
CLRA;
压缩BCD码初始化
MOVR3,A;
R3R4R5暂存压缩BCD码
MOVR4,A
MOVR5,A
MOVR2,#16
HB1:
MOVR6,HEX;
数据高字节暂存于R6中
MOVR7,HEX+1;
数据低字节暂存于R7中
HB2:
MOVA,R7;
从高端移出待转换的一位到CY中
RLCA
MOVR7,A
MOVA,R6
MOVR6,A
MOVA,R5;
BCD码带进位自身相加,相当于乘2
ADDCA,R5
DAA;
十进制调整
MOVA,R4
ADDCA,R4
DAA
MOVR4,A
MOVA,R3
ADDCA,R3
MOVR3,A;
双字节十六进制数的万位数不超过6,不用调整
DJNZR2,HB1;
处理完十六位
MOVR0,DISBUF+5;
转换成分离BCD码存于70H~75H单元中
MOVA,#00H
MOV@R0,A
MOVA,R3:
R3不超过6,不用转换
DECR0
MOV@R0,A
MOVA,R4
SWAPA
ANLA,#0FH
MOVA,R4
SWAPA
ANLA,#0FH
MOV@R0,A
MOVA,R4
ANLA,#0FH
MOV@R0,A
MOVA,R5
RET
动态扫描显示子程序
子程序名:
DISPLAY
子程序功能:
从DISBUF中依次取出待显示的字符,逐个点亮各位数码管
入口参数:
DISBUF(内部RAM70H~75H单元中,70H单元中伟最低位)中是待显示的字符
出口参数:
无
DISPLAY:
MOVR0,#70H;
R0指向DISBUF首地址
MOVR3,#01H;
右起第一个LED的选择字
NEXT:
MOVA,#00H;
取位选控制字为全灭
MOVP1,A;
瞬时关显示器
MOVA,@R0;
从DISBUF中取出字符
MOVDPTR,#DSEG;
取段码表首地址
MOVCA,@A+DPTR;
查表,取对应的字形码
MOVP0,A;
输出字形码
MOVA,R3;
取当前位选控制字
MOVP1,A;
点亮当前LED显示位
LCALLDELAY;
DELAY延时1ms
INCR0;
R0N指向下一个字符
JBACC.5,EXIT;
诺当前显示位是第六位则结束
RLA;
下一个LED的选择字
MOVR3,A
SJMPNEXT
EXIT:
RET;
返回
段码表0~9,A~F,空白,P
DSEG:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH
DB6FH,77H,7CH,39H,5EH,79H,71H,00H,73H
DELAY:
MOVR7,#02H;
延时1ms的子程序
DEL1:
MOVR6,#0FFH
DEL2:
DJNZR6,DEL2
DJNZR7,DEL1
6。
2脉冲信号频率测量设计程序
频率测量实际上就是在1s内对脉冲个数进行计数,计数值就是信号频率。
利用已有的电路可以实现脉冲信号的频率测量。
令定时器T0工作在方式1,得到50ms的定时间隔,在进行软件计数20次,形成一个1s的测量闸门信号,在测量闸门信号期间响应INT0中断,对脉冲信号加1计数来完成对输入信号的频率计数,计数值存入COUNT和COUNT+1单元,计数值通过6位动态数码管显示出来。
程序如下:
频率计程序清单
ORG0000H
LJMPSTART
ORG0003H
LJMPPINT0;
INT0中断入口
ORG000BH;
T0中断入口
LJMPT0INT
ORG0040H
COUNTEQU40H;
定义计数单元
COUNT,COUNT+1对脉冲个数计数,高位在前
COUNT+2为秒计数单元
START;
MOVSP,#40H;
主程序
AGAIN;
MOVCOUNT,#00H;
计数单元清0
MOVCOUNT+1,#00H
MOVCOUNT+2,#00H
MOVTMOD,#01H;
初始化T0
MOVTH0,#3CH;
计数初值,50ms的定时间隔
MOVTL0,#0B0H
SETBTR0;
启动T0
SETBET0;
允许T0中断
SETBEX0
SETBIT0;
INT0为负沿触发方式
SETBEA
WAIT:
JNBF0,WAIT;
不到1s则等待
将双字节计数值转换成6位非压缩型BCD码
LCALLDISPLAY
写WDISBUF子程序
WDISBUF:
CLRA;
MOVR5,A
MOVR2,#16
HB1:
MOVR6,HEX;
MOVA,R7;
MOVR7,A
MOVA,R6
MOVR6,A
BCD码带进位自身相加,相当于乘2
ADDCA,R4
MOVR4,A
MOVA,R3
MOVR3,A;
DJNZR2,HB1;
MOVA,R3:
MOV@R0,A
ANLA,#0FH
ANLA,#0FH
MOVA,R4
ANLA,#0FH
MOV@R0,A
ANLA,#0FH
MOV@R0,A
;
DISPLAY显示子程序
DISPLAY:
MOVR0,#70H;
MOVA,#00H;
MOVP1,A;
MOVA,@R0;
MOVDPTR,#DSEG;
MOVCA,@A+DPTR;
查表,取对应的字形码
MOVP0,A;
LCALLDELAY;
JBACC.5,EXIT;
MOVR3,A
EXIT:
定时器T0中断服务程序
T01NT:
PUSHA
MOVTH0,#3CH;
再次启动计数器
MOVTL0,#0B0H
INCCOUNT+2;
秒计数单元加1
MOVA,COUNT+2
CLRC
SUBBA,#20
JCEXIT
SETBF0;
闸门时间到
CLREA;
关中断
POPA
RETI
INT0中断服务程序
PINT0:
MOVA,COUNT+1
ADDA,#01H;
计数值+1
MOVA,COUNT
ADDCA,#00H;
高字节
MOVCOUNT,A
POPA