第5章 定时器-计数器1_第1页
第5章 定时器-计数器1_第2页
第5章 定时器-计数器1_第3页
第5章 定时器-计数器1_第4页
第5章 定时器-计数器1_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

第5章定时器/计数器,第5章定时器/计数器,实现定时或计数,通常采用以下三种方法:1硬件法硬件定时功能完全由硬件电路完成,不占用CPU时间。但当要求改变定时时间时,只能通过改变电路中的元件参数来实现,很不灵活。2软件法软件定时是执行一段循环程序来进行时间延时,优点是无额外的硬件开销,时间比较精确。但牺牲了CPU的时间。3可编程定时器计数器,MCS-51系列单片机内部提供2个可编程的定时器/计数器T0和T1,它们可以用于定时或者对外部脉冲计数,还可以作为串行口的波特率发生器。定时器达到预定定时时间或者计数器计满数时,给出溢出标志,还可以发出内部中断。,第5章定时器/计数器,T0和T1的电路结构和工作原理基本相同Ti的工作原理简要概括:核心部分是一个由时钟信号触发的按递增规律工作的循环计数器;从预先设定的某一“初始值”开始计起,在累积到超过最大值时产生溢出,并同时会建立一个相应的溢出标志(即中断标志位)TFi。,5.1定时器/计数器T0和T1的特性,定时器计数器的核心:一个加1计数器,其基本功能是加1计数。计数功能:若是对单片机的T0、T1引脚输入信号进行计数,即是计数功能。当外部输入信号由1至0跳变时,计数器加1。定时功能:若是对单片机内部的机器周期进行计数,从而得到定时,这就是定时功能。每个机器周期(等于12个晶体振荡周期)计数器加1。定时功能和计数功能的设定和控制都是通过软件来设定的。,5.1定时器/计数器T0和T1的特性,具有以下特性:具有2种功能模式可供选择具有4种工作方式可供选择核心是一个16位宽的循环累加计数寄存器计数寄存器在SFR内统一编址用软件方式可以随时直接读出或改写计数寄存器的内容用软件方式可以随时控制累加计数的开启和停止,5.1定时器/计数器T0和T1的特性,具有以下特性:也可以用外接引脚信号控制累加计数过程的开启或停止计数寄存器计满溢出时,产生中断标志位T1可用作异步串行接口UART的波特率发生器通过巧妙编程,还可用来实现输入捕捉、输出比较、脉宽调制等扩展功能。,5.1定时器/计数器T0和T1的特性,与T0和T1模块有关的SFR共有8个定时器控制寄存器TCON定时器方式寄存器TMOD中断允许寄存器IE中断优先权管理寄存器IP累加计数器存器TH0+TL0、TH1+TL1,5.2T0和T1相关的寄存器,方式寄存器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位用于控制T1。M1M0:工作方式控制位,对应4种工作方式。C/T:定时器/计数器功能方式选择位。,控制寄存器TCON,控制寄存器TCON,TCON用于控制定时器/计数器的启、停、溢出标志和外部中断信号触发方式。TFi:T0、T1溢出位。当计数溢出时,由硬件自动使TFi置1,并向CPU申请中断。进入中断服务程序后,TFi又被硬件自动清0。TFi也可作为程序查询的标志位,在查询方式下由软件清0。TRi:T0、T1运行控制位。TRi=1启动计数,TRi=0,停止工作。,5.3定时器/计数器电路结构,T0、T1的内部结构框图,5.4定时器/计数器的工作方式及应用,每一种工作方式对应最大计数值:方式013位计数器213=8192方式116位计数器216=65536方式28位计数器28=256方式38位计数器28=256T0优于T1的方面:多一种工作方式T1优于T0的方面:可以作为串口的波特率发生器,定时初值:对机器周期进行计数。T:定时时间,X:初值,N:计数器位数,fosc:系统时钟频率,则:(2NX)12/fosc=TX=2Nfosc/12T计数初值:对外部脉冲进行计数,计数值根据要求确定。N:计数器位数,X:初值,则:X=2N计数值,定时器/计数器工作方式0,方式0为13位计数器。定时时间T:T=(213X)12fosc=(213X)机器周期计数初值:X=213计数值。,工作方式0举例,例5-1:应用定时器T0产生1ms定时,并使P1.0输出周期为2ms的方波,已知晶体6MHz。计数初值X:(213X)12(1/6)106=1103X=7692,13位二进制表示为X=1111000001100TH0=0F0H(高8位),TL0=0CH(低5位),查询TF0状态。,ORG2000HMOVTMOD,#00H;写入方式控制字MOVTL0,#0CH;计数初值写入MOVTH0,#0F0HSETBTR0;启动T0LOOP:JBCTF0,PE;TF0=1溢出转移PE,同时清除TF0AJMPLOOP;没有溢出PE:MOVTL0,#0CH;重装计数初值MOVTH0,#0F0HCPLP1.0;求反AJMPLOOP;无条件转移LOOPEND,定时器/计数器工作方式1,方式1是16位定时器/计数器,与方式0的区别是计数器的长度。比方式0常用。定时时间T:T=(216X)12foscX=216Tfosc12计数初值X:X=216计数值,工作方式1举例,例5-2:用定时器T1产生一个25Hz方波,由P1.0输出,采用查询方式进行控制,设晶体频率12MHz。思路:方波周期为1/25=40ms,T1定时20ms,P1.0取反输出。计数初值X:T=(216X)12(1/12)106=20103X=45536=B1E0H,ORG2000HMOVTMOD,#10H;T1定时功能工作方式1MOVTH1,#0B1H;写入计数初值MOVTL1,#0E0HSETBTR1;启动T1LOOP:JBCTF1,LP;TF1=1,溢出转移,同时TF1清0AJMPLOOPLP:MOVTH1,#0B1H;重装计数初值MOVTL1,#0E0HCPLP1.0;P1.0取反SJMPLOOPEND,定时器/计数器工作方式2,方式2是能自动重装计数初值的8位计数器。低8位作计数器用,高8位保存计数初值。定时方式计数初值:X=28Tfosc12。计数方式计数初值:X=28计数值。,工作方式2举例(1),例5-3:用定时器T1,采用工作方式2,计数方式,要求每计满156次,将P1.7取反。思路:T1工作于计数方式,外部计数脉冲由T1(P3.5)引脚引入,每来一个由1至0的跳变计数器加1,由程序查询TF1的状态。计数初值:X=28156=100=64HTH1=TL1=64H,TMOD=60H(计数方式,方式2),程序设计:ORG2000HMOVTMOD,#60H;T1方式2,计数方式MOVTH1,#64H;T1计数初值MOVTL1,#64HSETBTR1;启动T1LOOP:JBCTF1,REP;TF1=1转移SJMPLOOP;等待REP:CPLP1.7;取反输出SJMPLOOP,工作方式2举例(2),例5-4:由P3.4引脚(T0)输入一低频脉冲信号(其频率0.5kHz),要求P3.4每发生一次负跳变时,P1.0输出一个200s的同步负脉冲,同时P1.1输出一个400s的同步正脉冲。已知fosc=6MHz。初态P1.0为高,P1.1为低。思路:T0工作于方式2,初值为FFH(一次计数就产生中断),查询TF0,为1后改为200s定时计数,设置P1.0和P1.1状态。第一次200s定时完成,设置P1.0和P1.1状态,继续第二次200s定时。第二次200s定时完成,设置P1.0和P1.1状态,恢复初值FFH,循环。即:反复改变计数初值。,200s定时计数初值X:X=256200612=156,工作方式2举例(3),例5-4程序:START:MOVTMOD,#06H;T0方式2,计数方式MOVTH0,#0FFH;计数初值MOVTL0,#0FFHCLRP1.1;P1.1初态为0SETBTR0;启动T0LOOP:JBCTF0,LP1;检测外部信号负跳变SJMPLOOP;等待LP1:CLRTR0;关定时器MOVTMOD,#02H;T0改变为;定时200s方式2MOVTH0,#156;定时的计数初值MOVTL0,#156,工作方式2举例(4),SETBP1.1;P1.1输出为1CLRP1.0;P1.0输出0SETBTR0;启动T0定时LOOP1:JBCTF0,LP2;第一个200s到否?SJMPLOOP1;未到等待LP2:SETBP1.0;到了P1.0恢复LOOP2:JBCTF0,LP3;第二个200s到否?SJMPLOOP2LP3:CLRP1.1;P1.0恢复0CLRTR0;关定时器AJMPSTART,定时器/计数器工作方式3,方式3下,T0和T1的结构、功能不同。T0方式3:TL0和TH0分成两个互相独立的8位计数器。其中TL0用原T0的各控制位、引脚和中断源,即GATE0、TR0、TF0和T0引脚、INT0引脚。TH0只有内部定时,占用定时器T1的TR1和TF1。,T1无方式3:将T1设置为方式3,会使T1立即停止计数。在T0方式3时,T1仍可设置为方式02。由于TR1和TF1被T0的TH0占用,计数器开关K已被接通,此时仅用T1的C/T控制T1运行。计数器溢出时,只能将输出送入串行口或用于不需要中断的场合。在一般情况下,当T1用作串行口波特率发生器时,T0才设置为工作方式3。此时,常把定时器T1设置为方式2,用作波特率发生器,T0方式3,T0方式3下:T1结构,工作方式3举例(1),例5-5:应用T0方式3,分别设定200s和400s定时并使P1.0和P1.1分别产生周期为400s和800s方波,已知晶体6MHz,采用中断方式。思路:200s计数初值:(28-X)12(1/6)106=200106,X=156=9CH400s计数初值:(28-X)12(1/6)106=400106,X=56=38HORG2000HSTART:AJMPMAINORG000BHAJMPPIT0;转T0中断处理入口ORG001BHAJMPPIT1;转T1中断处理入口,工作方式3举例(2),ORG2100HMAIN:MOVSP,#30HMOVTMOD,#03H;置方式3MOVTL0,#9CH;定时200s计数初值MOVTH0,#38H;定时400s计数初值MOVTCON,#50H;启动TL0、TH0计数MOVIE,#8AH;中断允许T0、T1开放中断LOOP:AJMPLOOP;等待中断PITO:MOVTL0,#9CH;T0中断处理程序CPLP1.0RETIPIT1:MOVTH0,#38H;T1中断处理程序CPLP1.1RETI,利用GATE测试外部输入脉冲宽度,GATE0时,定时器的启动只受TRi位控制。GATE1时,定时器的启动将受TRi位和外部中断信号INTi的共同控制。只有当INTi=1,同时TRi=1时才能启动计数;INTi=0时停止计数。换一个角度看,当GATE1时,定时器实际记录的时间就是相应INTi引脚上高电平的持续时间。通过反相器,则可测得相应INTi引脚上低电平的持续时间。二个时间的和即为INTi引脚上输入波形的周期,其倒数即为INTi引脚上输入波形的频率。还可算出占空比等参数。测试原理:以T0为例GATE1TR01,测试脉冲宽度举例,例5-6:利用T0门控位GATE来测试由INT0(P3.2)引脚输入的正脉冲宽度,已知fosc=12MHZ,所测得的高8位值存入片内RAM的21H单元,低8位值存入片内20H单元中。思路:T0方式1(16位计数),GATE=1,TR0=1,初值为0000H。程序如下:MOVTMOD,#09H;T0定时,方式1,Gate=1MOVTH0,#00H;T0的计数初值设为0000HMOVTL0,#00H,MOVR0,#20H;RAM的地址指针LOOP1:JBP3.2,LOOP1;等待INT0变低SETBTR0;INT0变低,启动T0准备计数LOOP2:JNBP3.2,LOOP2;等INT0变高,启动计数LOOP3:JBP3.2,LOOP3;等待INT0再次变低CLRTR0;INT0变低即停止计数MOVR0,TL0;存入计数值INCR0MOVR0,TH0,利用定时器实现较长时间定时,例5-7:设在P1.7端接有一个发光二极管,要求利用定时器控制,使LED亮一秒灭一秒,周而复始。已知晶体频率6MHz。思路:T0为100ms定时,方式。当定时时间到后,1.0输出反相,加到输入端作计数脉冲,定时两次构成一个完整的计数脉冲。T1计数次数为次,完成s定时,方式2。,长时间定时初始化,TMOD方式字:61HT0计数初值:方式1,定时100ms。(216-X)12(1/6)10-6=10010-3,X=15536=3CB0hTH0=3CH,TL0=0B0HT1计数初值:方式2,计数5次,计数初值为(256-5)=251=FBH同时装入TH1和TL1,即TH1=0FBH,TL1=0FBH,长时间定时程序设计,ORG2000HMAIN:CLRP1.7;灯灭SETBP1.0MOVTMOD,#61H;方式字MOVTH1,0FBH;T1计数初值MOVTL1,0FBHSETBTR1;启动T1LOOP1:CPLP1.7;灯状态变化,LOOP2:MOVTH0,#3CH;T0计数初值MOVTL0,#0B0HSETBTR0;启动T0LOOP3:JBCTF0,LOOP4;T0定时到,转SJMPLOOP3LOOP4:CPLP1.0;P1.0脉冲变化JBCTF1,LOOP1;T1定时到,转SJMPLOOP2;T1定时未到,转END,运行中读定时器/计数器,单片机可以随时读写TLi和THi,比如用于实时显示计数值等。但

温馨提示

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

评论

0/150

提交评论