资源描述
山东科技大学电工电子实验教学中心
创新性实验研究报告
课程名称:单片机原理及应用
实验项目名称 脉冲宽度测量
姓名 学号 _________________
专 业 _____________ 班级 ____________
指导教师及职称 ________________________
开课学期 2011 至 2012 学年 第一 学期
提交时间 2012 年 1 月 3 日
一、实验摘要
通过采用STC89C52RC单片机为中心器件来设计脉冲宽度测量器,并运用MCS—51/52单片机计数功能,选择好工作模式,对脉宽进行计数。在现有的单片机仿真机系统上掌握相关软硬件设计与调试知识,并在计算机上编写汇编程序调试运行。
二、实验目的
(1)基于 STC89C52RC单片机测量脉冲宽度;
(2)研究分别使用定时计数器 0,1 的 GATE 模式和定时计数器 2 的捕捉功能完成外部
脉冲宽度测量;
(3)通过6位 LED显示计数值,时间精确到 0.1秒。并熟悉了解试验箱的应用,提高动手能力。
三、实验场地及仪器、设备和材料:
实验场地:J11#324
设备:PC机一台 STC89C52RC单片机试验箱一台
教材:1. MCS51/52单片机原理与实践 公茂法 黄鹤松等编著 北京航空航天大学出版
2. 单片机原理及应用 张毅刚主编 高等教育出版社
3. 其它相关的参考资料及实验教材
四、实验内容
1、实验原理
(1)T0工作方式
通过设置TMOD,使其为定时器模式。在做定时器使用时,将T0定时为0.001S。
当GATE=1时,为门控方式。只有TR0设置为1,且同时外部中断引脚也为高电平时,才能启动T0开始计数工作。
把脉冲信号从P3.2脚引入,T0设为定时器方式工作,并工作在门控方式(GATE=1)。在待测信号高电平期间,T0对内部周期脉冲进行计数。在待测脉冲高电平结束时,其下降沿向P3.2发中断,在外部中断0的中断服务程序中,读取TH0、TL0的计数值,该值就是待测脉冲的脉宽。随后,清零TH0和TL0,以便下一个脉宽的测量。
计算方法:脉冲宽度=计数值*0.01s,将脉冲宽度的数值转换为压缩BCD码,再将压缩BCD码转换为非压缩BCD码用于显示,最后调用显示程序,读取脉冲宽度。
系统原理框图
7407
列驱动
6位数码管显示
89C51
单片机控制器
信号源
振荡电路
(2)T2捕捉工作方式
使用T2的捕捉方式,TH2、TL2的初值设为0,待测信号从T2EX(P1.1)引入,采用定时器T0定时0.001s,刚开始待测信号为高电平或低电平时等待,再次检测为高电平时T2开始计数,定时器T0每定时0.001s,通过串口P1.0的开关状态使T2的计数值增一并将计数值存入RCAP2H和RCAP2L两个寄存器中。
计算方法:脉冲宽度=计数值*0.001s,再将得到的表示脉冲宽度的十六进制转换为压缩BCD码,再将压缩BCD码转换为非压缩BCD码用来显示,读取LED上显示的数据即为要测量的脉冲宽度。
2、实验内容
计数
被检测脉冲信号
为高则开始计数 为低时停止计数
T0:把脉冲信号从P3.2脚引入,T0设为定时器方式工作,并工作在门控方式(GATE=1)。在待测信号高电平期间,T0对内部周期脉冲进行计数。在待测脉冲高电平结束时,其下降沿向P3.2发中断,在外部中断0的中断服务程序中,读取TH0、TL0的计数值,计算出所测。随后,清零TH0和TL0,以便下一个脉宽的测量。显示:将数码管的段控信号与P口与六位LED数码管相连。
T2:使用T2捕捉方式时将脉冲信号加到P1.1引脚,并且同时开通T0定时器,将数码管的段控信号与P0口与六位LED数码管相连,将位控信号P2与键盘相连。
六位数码管显示数码管接线图
共阳7段LED显示器显示原理:
引脚
数字显示
g
f
a
b
e
d
c
h
数码显示
0
0
1
1
1
1
1
1
0
C0H
1
0
0
0
1
0
0
1
0
F9H
2
1
0
1
1
1
1
0
0
A4H
3
1
0
1
1
0
1
1
0
B0H
4
1
1
0
1
0
0
1
0
99H
5
1
1
1
0
0
1
1
0
92H
6
1
1
1
0
1
1
1
0
82H
7
0
0
1
1
0
0
1
0
F8H
8
1
1
1
1
1
1
1
0
80H
9
1
1
1
1
0
1
1
0
90H
采用共阳7段LED数码管显示器,P口引入脉冲信号,P2.0至p2.3口作为列扫描输出,P0口输出段码数据,采用12Mhz晶振,可提高计数的精确度。
3、实验步骤
以流程图的方式表现实验步骤:
T0门控方式的程序流程图
开始
设定工作方式,TH0,TL0赋值
脉冲是否为高电平?
开定时器T0的中断
检测脉冲是否为低电平?
进入T0的中断,并将计数值清零
进入定时器T0中断服务程序,并将定时溢出值存入两个存储单元
调用压缩BCD码转换程序
然后
调用非压缩BCD码转换程序
调用显示程序
结束
否
是
否
是
T2捕捉方式程序流程图
开始
设定工作方式,并对TH0、TL0、TH2、TL2赋值
脉冲是否为低电平?
开启定时器T0
检测脉冲是否为高电平?
进入T0的中断,记录定时次数,T2将数记下
关闭T0中断服务程序,并将所计数值存入RCAP2H、RCAP2L存储单元
调用压缩BCD码转换程序
然后
调用非压缩BCD码转换程序
调用显示程序
结束
是
否
是
否
五、实验结果与分析
1、实验现象、数据记录
按照流程图所示,按动脉冲按钮,可以看到,显示屏显示出所测脉冲的宽度。再次按动,可以清楚地观察到所示的示数变化。每次显示的示数,都根据所按按钮的时间长短,即高电平的脉宽长度。
第一张图为T0工作方式,第二张图为T2捕捉方式。
2、对实验现象、数据及观察结果的分析与讨论:
通过对T0、T2不同方式的实验观察,两种实验方式都可以达到计数脉宽的长度的要求,两者各有自己的优势。
实验数据均可以达到所要求的:6位 LED显示计数值,时间精确到 0.1秒
做实验时遇到很多问题,比如数码管显示不出数值(P口位置插错),小数点显示错位(没有在程序中编对位置),显示只显示第一次多出数值(调用程序返回时出错)等问题。
3、关键点:
在试验箱硬件连接正确的情况下,程序一定要正确,因为所出的问题,大部分都来源于程序出了问题。
所以这次实验要求我们,要明白试验的原理是什么,如何构思。了解T0、T2工作时的差别在哪,这样可以方便的结合另一个改动程序。
六、实验结论
通过这次试验,让我明白了T0、T2两种工作方式下如何测量脉宽长度,通过什么原理方式计算出数值。并提高了自己的动手能力,让自己对单片机的了解,有提升了一个档次。
七、指导老师评语及得分:
签名: 年 月 日
附件:源程序等。
T0门控方式:
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0_INT
ORG 0030H
MAIN: MOV TMOD,#09H
MOV TL0,#0FCH
MOV TH0,#17H
MOV R4,#00H
MOV R3,#00H
JB P3.2,$
SETB ET0
SETB EA
IOC: SETB TR0
JNB P3.2,$
MOV R3,#00H
MOV R4,#00H
JB P3.2,$
CLR TR0
MOV 34H,R4
MOV 35H,R3
LCALL BCD
LCALL UBCD
DIS: LCALL DISP
JB P3.2,IOC
SJMP DIS
T0_INT:INC R3
CJNE R3,#00H,NEXT
INC R4
NEXT: MOV TH0,#0FCH
MOV TL0,#17H
RETI
BCD: MOV R7,#16
CLR A
MOV 47h,A
MOV 46h,A
MOV 45h,A
BCD1:CLR C
MOV A,35H
RLC A
MOV 35H,A
MOV A,34H
RLC A
MOV 34H,A
MOV A,47H
ADDC A,47H
DA A
MOV 47H,A
MOV A,46H
ADDC A,46H
DA A
MOV 46H,A
MOV A,45H
ADDC A,45H
DA A
MOV 45H,A
DJNZ R7,BCD1
RET
UBCD:MOV A,45H
ANL A,#0F0H
SWAP A
MOV 50H,A
MOV A,45H
ANL A,#0FH
MOV 51H,A
MOV A,46H
ANL A,#0F0H
SWAP A
MOV 52H,A
MOV A,46H
ANL A,#0FH
MOV 53H,A
MOV A,47H
ANL A,#0F0H
SWAP A
MOV 54H,A
MOV A,47H
ANL A,#0FH
MOV 55H,A
RET
DISP:MOV R0,#55H
MOV R2,#20H
MOV A,#0FFH
MOV P0,A
ACALL DIP
MOV R0,#54H
MOV R2,#10H
ACALL DIP
MOV R0,#53H
MOV R2,#08H
ACALL DIP
MOV R0,#52H
MOV R2,#04H
MOV A,R2
MOV P2,A
MOV A,@R0
MOV DPTR,#TABLE
MOVC A,@A+DPTR
ANL A,#7FH
MOV P0,A
ACALL DELAY
MOV R0,#51H
MOV R2,#02H
ACALL DIP
MOV R0,#50H
MOV R2,#01H
ACALL DIP
RET
DIP:MOV A,R2
MOV P2,A
MOV A,@R0
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
ACALL DELAY
RET
DELAY:
MOV R5,#9FH
DJNZ R5,$
RET
TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH
END
T2捕捉方式:
T2CON EQU 0C8H
TH2 EQU 0CDH
TL2 EQU 0CCH
RCAP2H EQU 0CBH
RCAP2L EQU 0CAH
TR2 BIT 0CAH
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0_INT
ORG 0030H
MAIN: MOV TMOD, #01H
MOV T2CON,#0FH
JB P1.1,$
STR: MOV TL0, #17H
MOV TH0, #0FCH
MOV TH2, #00
MOV TL2 ,#00
MOV 50H,#00H
MOV 51H,50H
CLR P1.0
SETB EA
SETB ET0
JNB P1.1, $
SETB TR0
SETB TR2
JB P1.1, $
CLR TR0
MOV 50H,RCAP2L
MOV 51H,RCAP2H
LCALL ZHUANHUAN
LOOP1: LCALL DISP
JB P1.1,STR
AJMP LOOP1
T0_INT: MOV TL0, #17H
MOV TH0, #0FCH
SETB P1.0
NOP
NOP
CLR P1.0
RETI
ZHUANHUAN: CLR A
MOV 38H,51H
MOV 37H,50H
MOV 34H,#0
MOV 35H,#0
MOV 36H,#0
MOV R7,#16
LOOP2: CLR C
MOV A,37H
RLC A
MOV 37H ,A
MOV A,38H
RLC A
MOV 38H ,A
MOV A,36H
ADDC A,36H
DA A
MOV 36H,A
MOV A,35H
ADDC A,35H
DA A
MOV 35H,A
MOV A,34H
ADDC A,34H
DA A
MOV 34H,A
DJNZ R7 ,LOOP2
MOV R1,#35H
MOV R0,#36H
MOV A,#00
XCHD A,@R0
MOV 58H,A
MOV A,@R0
SWAP A
MOV 57H,A
MOV A,#00
XCHD A,@R1
MOV 56H,A
MOV A,@R1
SWAP A
MOV 55H,A
MOV A,#00
MOV R0,#34H
XCHD A,@R0
MOV 54H,A
MOV A,@R0
SWAP A
MOV 53H,A
RET
DISP: MOV R0,#53H
MOV R2,#01H
LOP11: MOV A,#0FFH
MOV P0,A
MOV A,R2
MOV P2,A
MOV A,@R0
MOV DPTR,#TAB
MOVC A,@A+DPTR
CJNE R0,#55H,LOP21
ANL A,#7FH
LOP21: MOV P0,A
ACALL DELAY
INC R0
MOV A,R2
JB ACC.5,EXIT1
RL A
MOV R2,A
AJMP LOP11
EXIT1: RET
DELAY: MOV R7,#0FEH
LOOP: MOV R6,#70H
DJNZ R7,LOOP
RET
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH
END
展开阅读全文