资源描述
南京理工大学泰州科技学院
机电一体化技术与系统
课程设计
姓 名:
赵旻晟
学 号:
0801010450
学院(系):
机械工程学院
专 业:
机械工程及自动化
题 目:
基于单片机的脉冲信号测试仪设计
指导者: 王荣林
评阅者:
2011.10
摘要:脉冲信号测量仪是一种常用的设备,它可以测量脉冲信号的脉冲宽度,频率等参数,并用十进制数字显示出来。利用定时器的门控信号GATE进行控制可以实现脉冲宽度的测量。在单片机应用系统中,为了便于对LED显示器进行管理,需要建立一个显示缓冲区。本文介绍了基于单片机AT89C51的脉冲信号参数测量仪的设计。该设计可以对脉冲信号的宽度,频率等参数进行测量。
关键词:脉冲信号,频率,宽度,单片机AT89C51
目录
一、引言…………………………………………………………… 4
二、设计方案及原理……………………………………………… 5
三、硬件设计任务………………………………………………… 5
3.1基于AT89C51脉冲信号测量系统硬件设计详细分析 …… 6
3.1.1 AT89C51单片机工作电路………………………… 6
3.1.2基于AT89C51脉冲信号测量系统复位电路……… 7
3.1.3基于AT89C51脉冲信号测量系统时钟电路……… 8
3.1.4基于AT89C51脉冲信号测量系统按键电路……… 9
3.1.5基于AT89C51脉冲信号测量系统显示电路……… 10
四、收获与感谢 …………………………………………………15
五、参考文献 …………………………………………………15
六、附录 …………………………………………………… 16
6.1脉冲信号宽度测量设计程序 …………………… 16
6.2脉冲信号频率测量设计程序 …………………… 18
1、引言
单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。 通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:中央处理器、存储器和I/O接口电路等。因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。由于单片机稳定可靠、物美价廉、功耗低,所以单片机的应用日益广泛深入,涉及到各行各业,如工业自动化、智能仪表与集成智能传感器、家用电器等领域。单片机应用的意义绝不仅限于它的广阔范围以及带来的经济效益,更重要的意义在于,单片机的应用正从根本上改变着传统的控制系统的设计思想和设计方法。从前必须由模拟电路或数字电路实现的大部分控制功能,现在使用单片机通过软件就能实现了。随着单片机应用的推广普及,单片机控制技术将不断发展,日益完善。因此,本课程设计旨在巩固所学的关于单片机的软件及硬件方面的知识,激发广大学生对单片机的兴趣,提高学生的创造能力,动手能力和将所学知识运用于实践的能力。
中断功能是一种应用比较广泛的功能,它指的是当CPU正在处理某件事情的时候,外部发生了某一件事(如一个电平的变化,一个脉冲沿的发生或定时器计数溢出等)请求CPU迅速去处理,于是,CPU暂时终止当前的工作,转去处理所发生的事件。中断服务处理完该事件以后,再回到原来被中止的地方继续原来的工作,这样的过程称为中断。本文中用到了定时器T0溢出中断,以实现软件延时。脉冲信号测量仪是一种常用的设备,它可以测量脉冲信号的脉冲宽度,脉冲频率等参数。
2、设计方案及原理
AT89C51
被测信号
晶振电路
LED显示
复位电路
测量按键
系统框图
图中给出了整个系统设计的系统框图,系统主要由三个主要部分组成,单片机和晶振电路设计,显示电路设计,复位电路设计。
3、硬件设计任务
AT89C51基本工作电路设计:使单片机正常工作;
时钟电路:为单片机提供时钟信号;
复位电路:为单片机提供高电平复位信号;
显示电路:显示当前测量脉冲宽度;
按键电路:开始测量脉冲信号;
3.1基于AT89C51脉冲信号测量系统硬件设计详细分析
3.1.1 AT89C51单片机工作电路
本设计的核心是单片机电路,考虑到需要一个中断输入,存储容量、外部接口对单片机端口的需要以及兼顾到节约成本的原则,选用了常用的AT89C51单片机。AT89C51是低功耗、高性能、经济的8位CMOS微处理器,工作频率为0—24MHz,内置4K字节可编程只读闪存,128x8位的内部RAM,16位可编程I/O总线。它采用Atmel公司的非易储器制造技术,与MCS51的指令设置和芯片引脚可兼容。AT89C51可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。AT89C51工作的最简单的电路是其外围接一个晶振和一个复位电路,给单片机接上电源和地,单片机就可以工作了。其最简单的工作原理图如下图。
AT89C51单片机工作电路
3.1.2基于AT89C51脉冲信号测量系统复位电路
MCS-51的复位是由外部的复位电路来实现的。MCS-51单片机片内复位,复位引脚RST通过一个斯密特触发器用来抑制噪声,在每个机器周期的S5P2,斯密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。
复位电路通常采用上电自动复位和按钮复位两种方式。上电自动复位是通过外部复位电路的电容充电来实现的。只要Vcc的上升时间不超过1ms,就可以实现自动上电复位。除了上电复位外,有时还需要按键手动复位。按键手动复位有电平方式和脉冲方式两种。其中电平复位是通过RST端经电阻与电源Vcc接通而实现的。按键脉冲复位则是利用RC微分电路产生的正脉冲来实现的。
上电复位电路
上图兼有上电复位和按钮复位的电路。在单片机设计中,若有外部扩展的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.1.3基于AT89C51脉冲信号测量系统时钟电路
时钟在单片机中非常重要,单片机各功能部件的运行都是以时钟频率为基准。时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。常用的时钟电路有两种方式,一种是内部时钟方式,另一种为外部时钟方式。
内部时钟方式:内部时钟方式电路图如下图所示。
内部时钟电路
MCS-51单片机内部有一个用与构成振荡器的高增益反相放大器,该高增益反相放大器的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。这两个引脚接石英晶体振荡器和微调电容,就构成一个稳定的自激振荡器电路。
电路中的电容C1和C2典型值通常选择为33PF左右。对外接电容的值虽然没有严格的要求,但是电容的大小会影响振荡器频率的高低、振荡器的稳定性和起振的快速性。晶体的振荡频率的范围通常是在1.2MHz—12MHz之间。晶体的频率越高,则系统的时钟频率也就越高,单片机的运行速度也就越快。为了提高温度稳定性,应采用温度稳定性能好的NPO高频电容。MCS-51单片机常选择振荡频率12MHz的石英晶体。
外部时钟方式:外部时钟方式电路图如下图所示。
外部时钟电路
外部时钟方式是使用外部振荡脉冲信号,常用于多片MCS-51单片机同时工作,以便于同步。对外部脉冲信号只要求高电平的持续时间大于20us,一般为低于12MHz的方波。
外部的时钟源直接接到XTAL2端,直接输入到片内的时钟发生器上。由于XTAL2的逻辑电平不是TTL的,因此要外接一个4.7k~10k的上拉电阻。
这次的设计采用MCS-51的内部时钟方式。因为外部时钟方式是用外部振荡脉冲信号,用于多片MCS-51单片机同时工作。在这次设计中只用一个MCS-51单片机,不需要振荡脉冲信号。
3.1.4基于AT89C51脉冲信号测量系统按键电路
按键是实现人机对话的比较直观的接口,可以通过按键实现人们想让单片机做的不同的工作。键盘是一组按键的集合,键是一种常开型开关,平时按键的两个触点处于断开状态,按下键是它们闭合。键盘分编码键盘和非编码键盘,案件的识别由专用的硬件译码实现,并能产生键编号或键值的称为编码键盘,而缺少这种键盘编码电路要靠自编软件识别的称为非编码键盘。在单片机组成的电路系统及智能化仪器中,用的更多的是非编码键盘。下图就是一种比较典型的按键电路,在按键没有按下的时候,输出的是高电平,当按键按下去的时候,输出的低电平。
按键电路
3.1.5基于AT89C51脉冲信号测量系统显示电路
本设计采用6位LED数码管动态显示测量值。动态显示是一位一位地轮流点亮各位数码管,这种逐位点亮显示器的方式称为动态扫描。各位数码管的段选线相应并联在一起,由P0端口送字形代码,各位LED显示器的位选线(COM端)由P1端口控制。图中,数码管采用共阴极LED,P1端口输出经过6路反相驱动器75452后接至数码管的COM端。当位选控制口P1的某位输出:“1”时,75452反相器驱动相应的LED位发光。
LED显示电路
在单片机应用系统中,为了便于对LED显示器进行管理,需要建立一个显示缓冲区。显示缓冲区DISBUF是片内RAM的一个区域,占用片内RAM的70H~75H单元,它的作用是存放要显示的字符,其长度与LED的位数相同。显示程序的任务是吧显示缓冲区中待显示的字符送往LED显示器显示。在进行动态扫描显示时,从DISBUF中依次取出待显示的字符,采用查表的方法得到去对应的字形代码,逐个点亮各位数码管每位显示1ms左右,即可是各位数码管显示要显示的字符。下图给出了动态扫描显示子程序DISPLAY的流程图。
R0指向DISBUF首地址
DISPLAY
R3=01,选右起第一个LED
瞬时关显示器
从DISBUF中取出字符
查表取对应的字形码
输出字形码
点亮当前LED显示位
是第六位?
RET
下一个字符
显示子程序DISPLAY的流程图
主程序首先设置定时器T0为方式1,门控信号GATE=1,在被测脉冲信号INT0的上升启动T0计数码,被测脉冲信号下降沿停止T0计数,脉宽测量过程见下图。定时器T0以方式1对内部脉冲计数,16位计数值存放在40H(高字节)和41H单元(低字节),调用WDISBUF子程序将该16位计数值换成6位非压缩型BCD码放入显示缓冲区DISBUF中。主程序流程图如下。
被测脉冲信号
INT0
为高则等待
为低时启动T0
上升沿开始计数
下降沿停止T0计数
脉宽测量过程图
初始化
主程序
启动T0
输入为高?
开始计数
输入为低?
输入为高?
停止T0计数
显示测量值
Y
Y
Y
N
N
N
主程序流程图
系统原理图
4、收获与致谢
机电一体化是我们主要的专业课程之一,通过这次学习,我把平时学习的那些理论知识应用到这次的实践之中,锻炼了我的实践能力。在不懈的努力下,我顺利并按时地完成《基于单片机的脉冲信号测试仪设计》这个课程设计。设计过程中,与老师的短暂交流让我毕生受益匪浅,老师丰富的专业知识、以及严谨细致、一丝不苟的作风,将成为我日后生活中的典范,学习中的榜样,在此谨对老师致以衷心的感谢!在设计过程中,我将基础理论知识融于实践认真完成每个环节、这不仅很好地巩固了我的理论知识而且也锻炼了我的动手能力。同时也提高了我独立思考问题能力。本次设计从选题、编程设计到完成整个过程都倾注了老师的心血,我向老师表示衷心的感谢和诚挚的敬意!
5、参考文献
[1] 李 华,单片机原理及应用,兰州大学出版社,2001
[2] 兰吉昌,51单片机应用设计百例,化学工业出版社,2008
[3] 冯育长,单片机系统设计与实例分析,西安电子科技大学出版社,2007
[4] 李学礼,基于Proteuse的8051单片机实例教程,电子工业出版社,2008
[5] 魏立峰,王宝兴,单片机原理与应用技术,北京大学出版社,2006
6、附录
6.1脉冲信号宽度测量设计程序
ORG 0000H
LJMP START
ORG 0040H
COUNT EQU 40H ; COUNT, COUNT+1 单元存放测量值
START : MOV SP , #40H
;主程序
MOV TMOD , #0000 1001B ; T0方式1,GATE=1
AGAIN: MOV TH0, #00H ; 计数初值=0000H
MOV TL0, #00H
WAIT0: JB P3.2, WAIT0 ; INT0输入为高则开始等待
SETB TR0 ; INT0为低时启动T0
WAIT1: JNB P3.2, WAIT1 ; INT0输入为高则开始计数
WAIT2: JB P3.2, WAIT2 ; 等待INT0下降沿
CLR TR0 ; 下降沿后停止T0计数
MOV A, TH0 ; 取计数值高字节
MOV COUNT , A
MOV A , TL0 ; 取计数值低字节
MOV COUNT+1 , A
LCALL WDISBUF ; 写DISBUF
LCALL DISPLAY ; 显示测量值
LCALL DISPLAY
LJMP AGAIN
;写DISBUF子程序、
; 子程序名称 : WDISBUF
; 子程序功能 :将一个双字节二进制数转换成6位非压缩型BCD码,写入显示缓冲区DISBUF中。
; 入口参数 : 内部RAM 的40H (高字节)和41H(低字节)单元中是待转换的数据
; 出口参数 : 转换结果放入DISBUF 内部 RAM 70H~75H单元中,70H单元中为最低位。
HEX EQU 40H
DISBUF EQU 70H
WDISBUF: CLR A ; 压缩BCD码初始化
MOV R3 , A ; R3R4R5暂存压缩BCD码
MOV R4 , A
MOV R5 , A
MOV R2 , #16
HB1: MOV R6 , HEX ; 数据高字节暂存于R6 中
MOV R7 , HEX+1 ; 数据低字节暂存于R7 中
HB2: MOV A , R7 ; 从高端移出待转换的一位到CY中
RLC A
MOV R7 , A
MOV A , R6
RLC A
MOV R6 , A
MOV A , R5 ; BCD 码带进位自身相加, 相当于乘2
ADDC A , R5
DA A ; 十进制调整
MOV R5 , A
MOV A , R4
ADDC A , R4
DA A
MOV R4 , A
MOV A , R3
ADDC A , R3
MOV R3 , A ; 双字节十六进制数的万位数不超过6, 不用调整
DJNZ R2 , HB1 ; 处理完十六位
MOV R0 , DISBUF+5 ; 转换成分离BCD码存于70H~75H单元中
MOV A, #00H
MOV @R0 , A
MOV A , R3 : R3不超过6,不用转换
DEC R0
MOV @R0 , A
MOV A , R4
SWAP A
ANL A ,#0FH
DEC R0
MOV @R0 , A
MOV A , R4
SWAP A
ANL A , #0FH
DEC R0
MOV @R0 , A
MOV A ,R4
ANL A , #0FH
DEC R0
MOV @R0 , A
MOV A , R5
ANL A ,#0FH
DEC R0
MOV @R0 , A
RET
; 动态扫描显示子程序
; 子程序名: DISPLAY
; 子程序功能: 从DISBUF中依次取出待显示的字符,逐个点亮各位数码管
; 入口参数: DISBUF(内部RAM 70H~75H单元中,70H 单元中伟最低位)中是待显示的字符
; 出口参数 : 无
DISPLAY : MOV R0 , #70H ; R0 指向DISBUF 首地址
MOV R3 , #01H ;右起第一个LED 的选择字
NEXT: MOV A , #00H ; 取位选控制字为全灭
MOV P1 , A ; 瞬时关显示器
MOV A, @R0 ; 从DISBUF中取出字符
MOV DPTR , #DSEG ; 取段码表首地址
MOVC A , @A+DPTR ; 查表,取对应的字形码
MOV P0 , A ; 输出字形码
MOV A , R3 ; 取当前位选控制字
MOV P1 , A ; 点亮当前LED显示位
LCALL DELAY ; DELAY 延时1ms
INC R0 ; R0 N指向下一个字符
JB ACC.5 , EXIT ; 诺当前显示位是第六位则结束
RL A ; 下一个LED 的选择字
MOV R3 , A
SJMP NEXT
EXIT: RET ; 返回
; 段码表0~9 , A~F , 空白 , P
DSEG : DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH
DB 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H, 00H, 73H
DELAY: MOV R7 , #02H ; 延时1ms的子程序
DEL1: MOV R6, #0FFH
DEL2: DJNZ R6 , DEL2
DJNZ R7,DEL1
RET
6.2脉冲信号频率测量设计程序
频率测量实际上就是在1s内对脉冲个数进行计数,计数值就是信号频率。利用已有的电路可以实现脉冲信号的频率测量。令定时器T0工作在方式1,得到50ms的定时间隔,在进行软件计数20次,形成一个1s的测量闸门信号,在测量闸门信号期间响应INT0中断,对脉冲信号加1计数来完成对输入信号的频率计数,计数值存入COUNT和COUNT+1单元,计数值通过6位动态数码管显示出来。
程序如下:
; 频率计程序清单
ORG 0000H
LJMP START
ORG 0003H
LJMP PINT0 ;INT0中断入口
ORG 000BH ; T0中断入口
LJMP T0INT
ORG 0040H
COUNT EQU 40H ; 定义计数单元
;COUNT , COUNT+1 对脉冲个数计数, 高位在前
; COUNT+2 为秒计数单元
START ; MOV SP , #40H ; 主程序
AGAIN ; MOV COUNT, #00H ; 计数单元清0
MOV COUNT+1, #00H
MOV COUNT+2 , #00H
MOV TMOD , #01H ; 初始化T0
MOV TH0, #3CH ; 计数初值,50ms的定时间隔
MOV TL0 , #0B0H
SETB TR0 ; 启动T0
SETB ET0 ; 允许T0中断
SETB EX0
SETB IT0 ; INT0 为负沿触发方式
SETB EA
WAIT: JNB F0, WAIT ; 不到1s则等待
LCALL WDISBUF ; 将双字节计数值转换成6位非压缩型BCD码
LCALL DISPLAY
LCALL DISPLAY
LJMP AGAIN
; 写WDISBUF子程序
HEX EQU 40H
DISBUF EQU 70H
WDISBUF: CLR A ; 压缩BCD码初始化
MOV R3 , A ; R3R4R5暂存压缩BCD码
MOV R4 , A
MOV R5 , A
MOV R2 , #16
HB1: MOV R6 , HEX ; 数据高字节暂存于R6 中
MOV R7 , HEX+1 ; 数据低字节暂存于R7 中
HB2: MOV A , R7 ; 从高端移出待转换的一位到CY中
RLC A
MOV R7 , A
MOV A , R6
RLC A
MOV R6 , A
MOV A , R5 ; BCD 码带进位自身相加, 相当于乘2
ADDC A , R5
DA A ; 十进制调整
MOV R5 , A
MOV A , R4
ADDC A , R4
DA A
MOV R4 , A
MOV A , R3
ADDC A , R3
MOV R3 , A ; 双字节十六进制数的万位数不超过6, 不用调整
DJNZ R2 , HB1 ; 处理完十六位
MOV R0 , DISBUF+5 ; 转换成分离BCD码存于70H~75H单元中
MOV A, #00H
MOV @R0 , A
MOV A , R3 : R3不超过6,不用转换
DEC R0
MOV @R0 , A
MOV A , R4
SWAP A
ANL A ,#0FH
DEC R0
MOV @R0 , A
MOV A , R4
SWAP A
ANL A , #0FH
DEC R0
MOV @R0 , A
MOV A ,R4
ANL A , #0FH
DEC R0
MOV @R0 , A
MOV A , R5
ANL A ,#0FH
DEC R0
MOV @R0 , A
RET
;DISPLAY显示子程序
DISPLAY : MOV R0 , #70H ; R0 指向DISBUF 首地址
MOV R3 , #01H ;右起第一个LED 的选择字
NEXT: MOV A , #00H ; 取位选控制字为全灭
MOV P1 , A ; 瞬时关显示器
MOV A, @R0 ; 从DISBUF中取出字符
MOV DPTR , #DSEG ; 取段码表首地址
MOVC A , @A+DPTR ; 查表,取对应的字形码
MOV P0 , A ; 输出字形码
MOV A , R3 ; 取当前位选控制字
MOV P1 , A ; 点亮当前LED显示位
LCALL DELAY ; DELAY 延时1ms
INC R0 ; R0 N指向下一个字符
JB ACC.5 , EXIT ; 诺当前显示位是第六位则结束
RL A ; 下一个LED 的选择字
MOV R3 , A
SJMP NEXT
EXIT: RET ; 返回
;定时器T0中断服务程序
T01NT: PUSH A
MOV TH0,#3CH ; 再次启动计数器
MOV TL0,#0B0H
INC COUNT+2 ; 秒计数单元加1
MOV A, COUNT+2
CLR C
SUBB A, #20
JC EXIT
SETB F0 ; 闸门时间到
CLR EA ; 关中断
POP A
EXIT: RETI
; INT0中断服务程序
PINT0: PUSH A
MOV A, COUNT+1
ADD A , #01H ; 计数值+1
MOV COUNT+1 , A
MOV A ,COUNT
ADDC A ,#00H ;高字节
MOV COUNT,A
POP A
RETI
21
展开阅读全文