基于单片机的脉冲宽度测量讲课稿.doc
Good is good, but better carries it.精益求精,善益求善。基于单片机的脉冲宽度测量-山东科技大学电工电子实验教学中心创新性实验研究报告课程名称:单片机原理及应用实验项目名称脉冲宽度测量姓名学号_专业_班级_指导教师及职称_开课学期2011至2012学年第一学期提交时间2012年1月3日-一、实验摘要通过采用STC89C52RC单片机为中心器件来设计脉冲宽度测量器,并运用MCS51/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显示器显示原理:引脚数字显示gfabedch数码显示001111110C0H100010010F9H210111100A4H310110110B0H41101001099H51110011092H61110111082H700110010F8H81111111080H91111011090H采用共阳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门控方式:ORG0000HLJMPMAINORG000BHLJMPT0_INTORG0030HMAIN:MOVTMOD,#09HMOVTL0,#0FCHMOVTH0,#17HMOVR4,#00HMOVR3,#00HJBP3.2,$SETBET0SETBEAIOC:SETBTR0JNBP3.2,$MOVR3,#00HMOVR4,#00HJBP3.2,$CLRTR0MOV34H,R4MOV35H,R3LCALLBCDLCALLUBCDDIS:LCALLDISPJBP3.2,IOCSJMPDIST0_INT:INCR3CJNER3,#00H,NEXTINCR4NEXT:MOVTH0,#0FCHMOVTL0,#17HRETIBCD:MOVR7,#16CLRAMOV47h,AMOV46h,AMOV45h,ABCD1:CLRCMOVA,35HRLCAMOV35H,AMOVA,34HRLCAMOV34H,AMOVA,47HADDCA,47HDAAMOV47H,AMOVA,46HADDCA,46HDAAMOV46H,AMOVA,45HADDCA,45HDAAMOV45H,ADJNZR7,BCD1RETUBCD:MOVA,45HANLA,#0F0HSWAPAMOV50H,AMOVA,45HANLA,#0FHMOV51H,AMOVA,46HANLA,#0F0HSWAPAMOV52H,AMOVA,46HANLA,#0FHMOV53H,AMOVA,47HANLA,#0F0HSWAPAMOV54H,AMOVA,47HANLA,#0FHMOV55H,ARETDISP:MOVR0,#55HMOVR2,#20HMOVA,#0FFHMOVP0,AACALLDIPMOVR0,#54HMOVR2,#10HACALLDIPMOVR0,#53HMOVR2,#08HACALLDIPMOVR0,#52HMOVR2,#04HMOVA,R2MOVP2,AMOVA,R0MOVDPTR,#TABLEMOVCA,A+DPTRANLA,#7FHMOVP0,AACALLDELAYMOVR0,#51HMOVR2,#02HACALLDIPMOVR0,#50HMOVR2,#01HACALLDIPRETDIP:MOVA,R2MOVP2,AMOVA,R0MOVDPTR,#TABLEMOVCA,A+DPTRMOVP0,AACALLDELAYRETDELAY:MOVR5,#9FHDJNZR5,$RETTABLE:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EHENDT2捕捉方式:T2CONEQU0C8HTH2EQU0CDHTL2EQU0CCHRCAP2HEQU0CBHRCAP2LEQU0CAHTR2BIT0CAHORG0000HLJMPMAINORG000BHLJMPT0_INTORG0030HMAIN:MOVTMOD,#01HMOVT2CON,#0FHJBP1.1,$STR:MOVTL0,#17HMOVTH0,#0FCHMOVTH2,#00MOVTL2,#00MOV50H,#00HMOV51H,50HCLRP1.0SETBEASETBET0JNBP1.1,$SETBTR0SETBTR2JBP1.1,$CLRTR0MOV50H,RCAP2LMOV51H,RCAP2HLCALLZHUANHUANLOOP1:LCALLDISPJBP1.1,STRAJMPLOOP1T0_INT:MOVTL0,#17HMOVTH0,#0FCHSETBP1.0NOPNOPCLRP1.0RETIZHUANHUAN:CLRAMOV38H,51HMOV37H,50HMOV34H,#0MOV35H,#0MOV36H,#0MOVR7,#16LOOP2:CLRCMOVA,37HRLCAMOV37H,AMOVA,38HRLCAMOV38H,AMOVA,36HADDCA,36HDAAMOV36H,AMOVA,35HADDCA,35HDAAMOV35H,AMOVA,34HADDCA,34HDAAMOV34H,ADJNZR7,LOOP2MOVR1,#35HMOVR0,#36HMOVA,#00XCHDA,R0MOV58H,AMOVA,R0SWAPAMOV57H,AMOVA,#00XCHDA,R1MOV56H,AMOVA,R1SWAPAMOV55H,AMOVA,#00MOVR0,#34HXCHDA,R0MOV54H,AMOVA,R0SWAPAMOV53H,ARETDISP:MOVR0,#53HMOVR2,#01HLOP11:MOVA,#0FFHMOVP0,AMOVA,R2MOVP2,AMOVA,R0MOVDPTR,#TABMOVCA,A+DPTRCJNER0,#55H,LOP21ANLA,#7FHLOP21:MOVP0,AACALLDELAYINCR0MOVA,R2JBACC.5,EXIT1RLAMOVR2,AAJMPLOP11EXIT1:RETDELAY:MOVR7,#0FEHLOOP:MOVR6,#70HDJNZR7,LOOPRETTAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EHEND