第六章 定时器及应用PPT幻灯片_第1页
第六章 定时器及应用PPT幻灯片_第2页
第六章 定时器及应用PPT幻灯片_第3页
第六章 定时器及应用PPT幻灯片_第4页
第六章 定时器及应用PPT幻灯片_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第六章定时器及应用,6.1定时器概述6.2定时器的控制6.3定时器的四种模式及应用6.4思考题与习题,定时器概述,实现定时或计数,通常采用以下三种方法:1、硬件法硬件定时功能完全由硬件电路完成,不占用CPU时间。但当要求改变定时时间时,只能通过改变电路中的元件参数来实现,很不灵活2、软件法软件定时是执行一段循环程序来进行时间延时。优点是无需额外的硬件开销,时间比较准确,但牺牲了CPU的时间。3、可编程定时器/计数器8051内部提供了2个可编程的定时器/计数器T0、T1,它们可以用于定时或对外部脉冲计数,还可以作为串行口的波特率发生器。定时器达到预定定时时间或计数满时,给出溢出标志,还可以发出内部中断,定时器概述,组成:6个SFR寄存器,包括TMOD、TCON、TH0和TL0、TH1和TL1。定时/计数器的核心:一个加1计数器,完成加1计数功能。定时功能:若是对单片机内部的机器周期进行计数,从而得到定时时间,这就是定时功能。每个机器周期计数器加1计数功能:若是对单片机的T0、T1引脚输入信号进行计数,即计数功能,当外部输入信号出现下降沿时,计数器加1。定时功能和计数功能的设定和控制都是通过软件来设定的。,8051定时/计数器逻辑结构,T0、T1的内部结构框图,定时器/计数器0、1的初始化编程,定时器的控制,工作模式寄存器TMOD,GATE=1,T0、T1的启动由INTi引脚和TRi位共同控制。只有INTi引脚为高电平时,TRi置“1”才能启动定时/计数器。GATE=0,T0、T1由软件设置TRi来控制启动。TRi=1,启动;TRi=0,停止,定时器/计数器的工作方式,TMOD用于控制T0和T1的工作方式,低4位用于控制T0,高4位用于控制T1M1M0:工作方式控制位,对应的工作方式如下图:,控制寄存器TCON,TCON用于控制定时/计数器的启、停、溢出标志和外部中断信号触发方式。TFi:T0、T1溢出位。当计数溢出时,由硬件自动使TFi置1,并向CPU申请中断,中断响应后硬件自动清0。TFi也可作为程序查询的标志位,在查询方式下由软件清0。TRi:T0、T1运行控制位。TRi=1,启动计数,TRi=0,停止计数,定时器的4种模式及应用,每种工作模式对应的最大计数值模式0:13位计数器213=8192模式1:16位计数器216=65536模式2:8位计数器28=256模式3:8位计数器28=256定时初值:对机器周期进行计数。T:定时时间,X:初值,N:计数器位数,fosc:系统时钟频率(2N-X)12/fosc=TX=2N-fosc/12T计数初值:对外部脉冲计数,计数值根据要求确定。N:计数器位数,X:初值,则:X=2N-计数值,定时器/计数器工作模式0,模式0为13位计数器定时时间T:T=(213-X)12/fosc=(213-X)机器周期计数初值:X=213-计数值,工作模式0举例,例:应用定时器T0产生1ms定时,并使P1.0输出周期为2ms的方波,已知晶振频率为6MHz初值X:(213-X)12/(6106)=110-3X=7692=1E0CH,二进制表示为X=0001111000001100TH0=0F0H(高8位),TL0=0CH(低5位),采用查询TF0状态方式:ORG2000HMOVTMOD,#00H;写入方式控制字MOVTL0,#0CH;计数初值写入MOVTH0,#0F0HSETBTR0;启动T0LOOP:JBCTF0,PE;TF0=1溢出转移PE,清TF0AJMPLOOP;未溢出PE:MOVTL0,#0C0H;重装计数初值MOVTH0,#0F0HCPLP1.0AJMPLOOPEND,采用定时器溢出中断方式的程序ORG0000H;主程序RESET:AJMPMAIN;跳过中断服务程序区ORG000BH;定时器T0中断矢量AJMPPE;转入中断服务程序ORG0030HMAIN:MOVTMOD,#00H;设置T0为模式0MOVTL0,#0CH;计数初值写入MOVTH0,#0F0HSETBEA;CPU开中断SETBET0;T0中断允许SETBTR0;启动定时HERE:SJMPHERE;等待中断ORG0120H;中断服务程序PE:MOVTL0,#0C0H;重装计数初值MOVTH0,#0F0HCPLP1.0;P1.0取反RETI;中断返回,定时/计数器工作模式1,模式1是16位定时/计数器,与模式0的区别是计数器的长度。比模式0常用。定时时间T:T=(216-X)12/fosc=(216-X)机器周期计数初值:X=216-计数值,模式1举例,例:用定时器T1产生一个50Hz的方波,由P1.1输出,采用查询的方式进行控制,设晶体频率为12MHz。确定计数初值方波周期T=20ms,用T1定时10ms,P1.1取反输出,计数初值X:T=(216-X)12/fosc=1010-3设置工作模式寄存器TMODTMOD=00010000B=10H启动定时计数器,模式1举例,ORG2000HMOVTMOD,#10HSETBTR1LOOP:MOVTH1,#0D8HMOVTL1,#0F0HJNBTF1,$CLRTF1CPLP1.1SJMPLOOPEND,定时/计数器工作模式2,模式2是能自动重装计数初值的8位计数器。低8位作计数器使用,高8位保存计数初值定时方式计数初值:X=28-Tfosc/12计数方式计数初值:X=28-计数值,工作模式2举例,例1、利用定时器T1的模式2对外部信号计数。要求每计满100次,将P1.0端取反。思路:外部信号由T1(P3.5)引脚输入,每发生一次负跳变计数器加1,每输入100个脉冲,计数器发生溢出中断,中断服务程序将P1.0取反一次T1的计数初值:X=28100=156=9CH,因此,TH1=TL1=9CHTMOD=01100000B=60H,工作模式2举例,程序清单:ORG0000HLJMPMAINORG001BH;中断服务程序入口CPLP1.0RETIMAIN:MOVTMOD,#60H;设置T1为模式2,外部计数方式MOVTL1,#9CH;T1计数器初值MOVTH1,#9CHMOVIE,#88H;定时器开中断SETBTR1;启动T1计数HERE:SJMPHERE;等待中断,工作模式2举例,例2、由P3.4引脚(T0)输入一低频脉冲信号,要求P3.4每发生一次负跳变时,P1.0输出一个200us的同步负脉冲,同时P1.1输出一个400us的同步正脉冲。已知晶振频率为6MHz,初态为P1.0为高,P1.1为低。,思路:T0工作于模式2,外部事件计数方式,初值为FFH(一次计数就产生中断),查询TF0,为1后改为200us定时,设置P1.0和P1.1状态。第一次200us定时完成,设置P1.0和P1.1状态,继续第二次200us定时,第二次定时完成,设置P1.0和P1.1状态,恢复初值FFH,循环。即:反复改变计数值。,程序清单:START:MOVTMOD,#06H;T0模式2,计数MOVTH0,#0FFH;计数初值MOVTL0,#0FFHCLRP1.1;P1.1初态为0SETBTR0LOOP:JBCTF0,LP1;检测外部信号负跳变SJMPLOOP;LP1:CLRTR0;关定时器MOVTMOD,#02H;T0改变为定时200us,模式2MOVTH0,#156;定时的计数初值MOVTL0,#156SETBP1.1;P1.1输出1CLRP1.0;P1.0输出0SETBTR0;启动定时,LOOP1:JBCTF0,LP2;第1个200us到否SJMPLOOP1;未到等待LP2:SETBP1.0;到了恢复P1.0LOOP2:JBCTF0,LP3;第2个200us到否SJMPLOOP2LP3:CLRP1.1CLRTR0;关定时器AJMPSTART,定时/计数器工作模式3,模式3下,T0和T1的结构、功能不同T0模式3:TL0和TH0分成两个互相独立的8位计数器。其中TL0用原T0的各控制位、引脚和中断源,即GATE0、TR0、TF0和T0引脚、INT0引脚TH0只有内部定时,占用定时器T1的TR1和TF1T1无模式3:将T1设置为方式3,会使T1立即停止计数。,定时/计数器工作模式3,在T0模式3时,T1仍可设置为方式02。由于TR1和TF1被T0的TH0占用,计数器开关K已被接通,此时仅用T1的C/T控制T1运行。计数器溢出时,只能将输出送入串行口或用于不需要中断的场合。在一般情况下,当T1用作串行口波特率发生器时,T0才设置为工作模式3。此时,常把定时器T1设置为模式2,用作波特率发生器。,T0模式3结构图,T0模式3下,T1结构,工作模式3举例,例:应用T0模式3,分别设定200us和400us定时,并使P1.0和P1.1分别产生周期为400us和800us方波,已知晶振频率为6MHz,采用中断方式。200us计数初值:(28-X)210-6=20010-6,X=156=9CH400us计数初值:(28-X)210-6=40010-6,X=56=38H,ORG2000HSTART:AJMPMAINORG000BHAJMPPIT0;转入T0中断处理入口ORG001BHAJMPPIT1;转入T1中断处理入口ORG2100HMAIN:MOVSP,#60HMOVTMOD,#03H;模式3MOVTL0,#9CH;定时200us初值MOVTH0,#38H;定时400us初值MOVTCON,#50H;启动TL0,TH0计数MOVIE,#8AH,开T0、T1中断,LOOP:AJMPLOOP;等待中断PIP0:MOVTL0,#9CH;T0中断处理程序CPLP1.0RETIPIT1:MOVTH0,#38H;T1中断处理程序CPLP1.1RETI,利用GATE测试外部输入脉冲宽度,GATE=0时,定时器的启动只受TRi位控制GATE=1时,定时器的启动受TRi位和外部中断信号INTi的共同控制。只有当INTi引脚为1,同时TRi=1时才能启动计数;INTi引脚为0时停止计数。换个角度看,当GATE=1时,定时器实际记录的时间就是相应INTi引脚上高电平的持续时间。通过反相器,则可测得相应引脚的低电平的持续时间。两个时间之和即为该引脚上输入波形的周期,其倒数为输入波形的频率,还可算出占空比等参数。,利用GATE测试外部输入脉冲宽度,测试原理(以T0为例,GATE=1,TR0=1),测试脉宽举例,例:利用T0门控位GATE来测试由INT0(P3.2)引脚输入的正脉冲宽度,已知晶振为12MHz,所测得的高8位值存入片内RAM的21H单元,低8位值存入片内20H单元中。思路:采用T0工作模式1(16位计数),GATE=1,TR0=1,初值为0000H,测试脉宽举例,MOVTMOD,#09H;T0定时,模式1MOVTH0,#00H;T0计数初值0000HMOVTL0,#00HMOVR0,#20H;RAM的地址指针LOOP1:JBP3.2,LOOP1;等待INT0变低SETBTR0;启动T0准备计数LOOP2:JNBP3.2,LOOP2;等待INT0变高LOOP3:JBP3.2,LOOP3;等待INT0再次变低CLRTR0;INT0变低停止计数MOVR0,TL0;存入计数值INCR0MOVR0,TH0,综合应用举例,例1、设时钟频率为6MHz。编写利用T0产生1s定时的程序。,确定定时器T0的工作模式模式0最长可定时16.384ms;模式1最长可定时131.072ms;模式2最长可定时512us;定时1s,可选用模式1,每隔100ms中断一次,中断10次从而达到1s的定时。求计数器初值X(216X)12/(6106)=10010-3sX=15536=3CB0H实现方法:对于中断10次计数,可使T0工作在计数方式,也可用循环程序的方法实现。本例采用循环程序法。,源程序清单ORG0000HAJMPMAIN;上电,转向主程序ORG000BH;T0的中断服务程序入口地址AJMPSERVE;转向中断服务程序ORG0080H;主程序MAIN:MOVSP,#60H;设堆栈指针MOVB,#0AH;设循环次数MOVTMOD,#01H;设置T0工作于模式1MOVTL0,#0B0H;装计数值低8位MOVTH0,#3CH;装计数值高8位SETBTR0;启动定时SETBET0;T0开中断SETBEA;CPU开中断SJMP$;等待中断SERVE:MOVTL0,#0B0H;重新赋初值MOVTH0,#3CHDJNZB,LOOP;B-1不为0,继续定时CLRTR0;1s定时到,停止T0工作LOOP:RETI;中断返回END,综合应用举例,例2、设计实时时钟程序。计算计数初值。时钟计时的最小单位是秒,而单片机的最长定时时间只能达到131ms(时钟频率为6MHz),可把定时器的定时时间定为100ms,计数溢出10次即得到1秒。如fosc=6MHz,使用定时器T1,以工作模式1进行100ms的定时,则计数初值X为:X=15536=3CB0H采用中断方式进行溢出次数的累计,计满10次即得到秒计时。从秒到分和从分到时的计时可通过累计和数值比较实现。满1s,秒位累加;满60s,分位累加;满60min,时位累加;满24h全部累加单元清0,设T1为模式1,设中断次数,清计时单元,开中断,启动T1,调用显示子程序,保护现场,赋计数初值,到1s?,(32H)加1,(32H)=60?,(32H)清0,(31H)加1,(31H)=60?,(31H)清0,(30H)加1,(30H)=24?,(30H)清0,恢复现场,返回,N,N,N,N,Y,Y,Y,Y,主程序流程图,中断服务程序流程图,ORG0000HAJMPMAIN;上电,转向主程序ORG001BH;T1的中断服务程序入口地址AJMPSERVE;转向中断服务程序ORG2000H;主程序MAIN:MOVSP,#60H;设堆栈指针MOVTMOD,#10H;设置T1工作于模式1MOV20H,#0AH;设循环次数CLRAMOV30H,A;时单元清0MOV31H,A;分单元清0MOV32H,A;秒单元清0SETBET1;T1开中断SETBEA;CPU开中断MOVTL1,#0B0H;装计数值低8位MOVTH1,#3CH;装计数值高8位SETBTR1;启动定时SJMP$;等待中断,中断服务程序:SERVE:PUSHPSW;保护现场PUSHACCMOVTL1,#0B0H;重新赋初值MOVTH1,#3CHDJNZ20H,RETUNT;1s未到,返回MOV20H,#0AH;重置中断次数MOVA,#01HADDA,32H;“秒位”加1DAA;转换为BCD码MOV32H,ACJNEA,#60H,RETUNT;未满60s,返回MOV32H,#00H;计满60s,“秒位”清0MOVA,#01HADDA,31H;“分位”加1DAA;转换为BCD码MOV31H,ACJNEA,#60H,RETUNT;未满60min,返回MOV31H,#00H;计满60min,“分位”清0,MOVA,#01HADDA,30H;“时位”加1DAA;转换为BCD码MOV30H,ACJNEA,#24H,RETUNT;未满24h,返回MOV30H,#00H;计满24h,“时位”清0RETUNT:POPACC;恢复现场POPPSWRETI;中断返回END,运行中读定时/计数器,8051可以随时读写TLi和THi,比如用于实时显示计数值等。但在读取时应注

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论