第六章-定时器--计数器_第1页
第六章-定时器--计数器_第2页
第六章-定时器--计数器_第3页
第六章-定时器--计数器_第4页
第六章-定时器--计数器_第5页
免费预览已结束,剩余38页可下载查看

下载本文档

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

文档简介

第六章定时器及应用,6.1定时器/计数器概述6.2定时器的控制6.3定时器的四种模式及应用,6.1定时/计数器概述,51系列内部有2个16位的定时/计数器T0、T1,52系列内部有3个16位的定时/计数器T0、T1、T2,定时/计数器的可编程特性:,确定其工作方式是定时还是计数,预置定时或计数初值,当定时时间到或计数终止时,要不要发中断请求,如何启动定时或计数器工作,T2,可编程,可编程的,1、结构,CPU,TCON(88H),TMOD(89H),图6-1定时/计数器逻辑结构,2、工作原理,定时器,定时输入信号:机器内部振荡信号的12分频,即每一个机器周期做一次“+1”运算,1个机器周期=12振荡脉冲,计数速率为振荡频率的12分频,若单片机的晶振主频为12MHz,则计数周期为1s,计数器,由外部引脚(T0为P3.4,T1为P3.5)输入计数脉冲,外部输入脉冲宽度应大于2个机器周期,TCY,TCY,下降沿,高电平,低电平,TCY:为机器周期,6.2定时器的控制,定时器共有两个控制字,由软件写入TMOD和TCON两个8位寄存器,用来设置T0或T1的操作模式和控制功能。当89C51系统复位时,两个寄存器所有位都被清0。,一、工作模式控制寄存器TMOD,控制T1,控制T0,门控位,功能选择位,工作模式选择,GATE=,0不受外部中断控制,00模式013位计数器,01模式116位计数器,10模式2可自动重新装载初值的8位计数器,11模式3T0分为2个8位计数器,T1停止计数,表6-1操作模式选择,1受外部中断控制,0为定时功能1为计数功能,二、控制寄存器TCON,T1、T0启/停控制位,T1、T0溢出标志位,“0”停止,“1”启动,“1”有溢出,“0”无溢出,可编程可控制,“+1”,亦可由指令清“0”,工作,“1”,“0”,记录有无溢出,一、模式0及应用,当,时,为定时工作方式。其定时时间为:,当,时,为计数工作方式。,6.3定时器的四种模式及应用,模式0是选择定时器(T0或T1)的高8位和低5位组成的一个13位定时器/计数器。如图6-7是T0在模式0时的逻辑电路结构。,TL40,方式0M1M0=00,图6-7定时/计数器方式0逻辑图,1,1,1,“+1”,中断,TF0,“+1”,“+1”,编制初始化程序:1)写TMOD;2)确定IE、IP;3)写计数初值;4)启动计数(TRi),例1、设计一个能产生t=1ms的周期方波信号发生器,试编程。其中fosc=12MHZ。解:当T0处于工作模式0时,加1计数器为13位,设T0的初值为X;,(213X)(1/fosc)12=500所以,X=7692=1E0CH。C/T=0,GATE=0,=0001111000001100B,,1E0CH,TL0,TH0,F0H,0CH,先将低五位放入TL0中,再将剩余的数从右向左数出八位放入TH0中。,ORG0000HLJMPMAINORG000BHLJMPINSE1ORG1000HMAIN:MOVSP,#60HMOVTL0,#0CHMOVTH0,#0F0HMOVTMOD,#00H,SETBTR0SETBET0SETBEASJMPINSE1:MOVTL0,#0CHMOVTH0,#0F0HCPLP1.0RETI,(1)定时器溢出中断方式,(2)查询方式,ORG1000HMOVTMOD,#00HMOVTL0,#0CHMOVTH0,#0F0HSETBTR0LOOP:JBCTF0,NEXTSJMPLOOPNEXT:MOVTL0,#0CHMOVTH0,#0F0HCPLP1.0SJMPLOOP,二、模式1及应用,用于定时工作方式时,定时时间为:,用于计数工作方式时,计数长度为:21665536(个外部脉冲),该模式对应的是一个16位的定时器/计数器,见图6-8。其结构与操作几乎与模式0完全相同,唯一的差别是:在模式1中,寄存器TH0和TL0是以全部16位参与操作。,方式1M1M0=01,图6-8定时/计数器方式1逻辑图,“+1”,1,中断,TF0,“+1”,“+1”,三、模式2及应用,用于定时工作方式时,定时时间为:,用于计数工作方式时,计数长度为:28256(个外部脉冲),模式2把TL0(TL1)配置成一个可以自动重装载的8位定时器/计数器,如图6-9所示。,模式2M1M0=10,可自动重装载的8位计数器,TH0(TH1)被定义为赋值寄存器,TL0(TL1)被定义为计数器,图6-9定时/计数器方式2逻辑图,重装载,1,“+1”,中断,TF0,“+1”,“+1”,例:当P3.4引脚上的电平发生负跳变时,从P1.0输出一个500s同步脉冲。请编程实现该功能。,解(1)模式选择首先选T0为模式2,外部事件计数方式。当P3.4引脚上的电平发生负跳变时,T0计数器加1,溢出标志TF0置1;然后改变T0为500s定时工作方式,并使P1.0输出由1变为0。T0定时到产生溢出,使P1.0引脚恢复输出高电平,T0又恢复外部事件计数方式。如下图:,外部计数方式,500s,500s,外部计数方式,定时方式,定时方式,P3.4,P1.0,(2)计算初值,T0工作在外部事件计数方式,当计数到0FFH时,再加1计数器就会溢出。设计数初值为X,当再出现一次外部事件时,计数器溢出。则X+128X=11111111B=0FFHT0工作在定时方式时,设晶振频率为6MHZ,500s相当于250个机器周期。因此,初值X为:(28X)2s500sX=6=06H,(3)程序清单,ORG0100HSTART:MOVTMOD,#06HMOVTH0,#0FFHMOVTL0,#0FFHSETBTR0LOOP1:JBCTF0,PTFO1SJMPLOOP1PTRO1:CLRTR0MOVTMOD,#02HMOVTH0,#06HMOVTL0,#06H,CLRP1.0SETBTR0LOOP2:JBCTF0,PTFO2SJMPLOOP2PTFO2:SETBP1.0CLRTR0SJMPSTART,如图,四、模式3及应用,工作模式3对T0和T1大不相同。若将T0设置位模式3,TL0和TH0被分成为两个相互独立的8位计数器,如图6-11所示。,图6-11定时/计数器方式3逻辑图,1,TH0借用了T1的TR1和TF1,因此控制了T1的中断此时T1只能用在一些不要中断的情况下,“+1”,“+1”,1,“+1”,“+1”,TF0,TF1,中断,中断,“+1”,TH1(8位),TL1(8或5位),串行口,12分频,fosc,C/T=0,C/T=1,T1(P3.5),12分频,fosc,C/T=0,C/T=1,T1(P3.5),TL1(8位),TH1(8位),串行口,重装入,(a)T1模式1(或模式0),(b)T1模式2,图6-12T0模式3下的T1结构,fosc,例:设某用户系统中已使用了两个外部中断源,并置定时器T1工作在模式2,作串行口波特率发生器用。现要求再增加一个外部中断源,并由P1.0引脚输出一个5kHz的方波。fosc12MHz。,解:为了不增加其他硬件开销,可设置T0工作在模式3计数方式,把T0的引脚作附加的外部中断输入端,TL0的计数初值为FFH,当检测到T0引脚电平出现由1至0的负跳变时,TL0产生溢出,申请中断。这相当于边沿触发的外部中断源。T0模式3下,TL0作计数用,而TH0可用作8位的定时器,定时控制P1.0引脚输出5kHz的方波信号。,TL0的计数初值为FFH,TH0的计数初值X计算如下:P1.0的方波频率为5kHz,故周期T=1/(5kHz)=0.2ms用TH0定时100s时,X=256-10012/12156ORG0000HLJMPMAINORG000BHLJMPTLOINTORG001BHLJMPTHOINT,ORG0030HMAIN:MOVTMOD,#27H;T0为模式3,计数方式;T1为模式2,定时方式MOVTL0,#0FFH;置TL0计数初值MOVTH0,#156;置TH0计数初值MOVTH1,#data;data是根据波特率要求设置的常数(即初值)MOVTL1,#dataMOVTCON,#55H;外中断0,外中断1边沿触发,启动T0MOVIE,#9FH;开放全部中断SJMP$()TL0溢出中断服务程序(由000BH转来)TLOINT:MOVTL0,#0FFH;TL0重赋初值(中断处理)RETITH0溢出中断服务程序(由001BH转来)THOINT:MOVTH0,#156CPLP1.0RETI,T0定时/计数,而T1停止计数,但可作波特率发生器。T0分成两独立定时/计数器TL0和TH0。TL0使用C/T、GATE、TR0、/INT0、TF0定时/计数,TH0使用TR1、TF1因此,只能用于定时模式3时,T1可定时为模式0、1、2的定时/计数,但不可中断,所以一般只作串口波特率发生器用。,小结:1、89C51单片机内有几个定时计数器?如何计数?2、T0、T1有几种工作模式?3、编程应用前要事先确定的参数有几个?,例1:利用门控位GATE测量波形参数:宽度和周期。,解:复习GATE的用法:GATE=0时,TRi=1,即可启动Ti定时/计数GATE=1时,TRi=1,且=1,才启动定时/计数。,被测信号:,89C51,启动T0,开始计数,TN,五、定时/计数器的应用,关闭T0,停止计数启动T1,开始计数,TP,关闭T1,停止计数,ORG0000HLJMPMAINORG0050HMAIN:MOVTMOD,#99H;T0、T1均工作在定时,;模式1,GATE=1MOVA,#00H;T0、T1赋计数初值00H,;定时最长时间为0000065536MOVTL0,AMOVTH0,AMOVTL1,AMOVTH1,A,图,TEST0:JNBP3.2,TEST0;判断P3.2的电平,若为低电平,则等待SETBTR0;若为高电平,则启动T0TEST1:JBP3.2,TEST1;判断P3.2的电平,若为高电平,则继续计数CLRTR0;否则,停止SETBTR1;启动T1TEST2:JBP3.3,TEST2;判断P3.3的电平,若为高电平,则继续计数CLRTR1;否则,停止T1计数MOVR0,#35H;保存T0及T1的计数值MOVR0,TH0INCR0MOVR0,TL0INCR0MOVR0,TH1INCR0MOVR0,TL1END,图,包装机,包装命令,光源,选模式2,选计数器,0110,计数初值X=2864H=9CH,用P1.0启动外设发包装命令,用R5R4作箱数计数器,模式字TMOD=06H,图,程序:,图,中断服务:,图,例3:用89C51单片机的定时器和中断功能试制一个“航标灯”。设fosc=12MHz,具有如下功能:(1)航标灯在黑夜应能定时闪闪发光,设定时间隔为2s,即亮2s,熄灭2s,并以此为周期循环。(2)当白天到来时,航标灯应熄灭,停止定时器工作。,Vc,Vc,T1,T2,P1.7,/INT0,89C51,根据以上分析,可编写出如下控制程序:设T0定时50ms,选择模式1,计数初值X为:X=216-12501000/12=3CB0HR7软件计数21000/5040T0定时和R7计数可以延迟2s。,图,主程序:ORG0000HAJMPMAINORG0003HAJMPWBINTORG000BHAJMPT0INTMAIN:MOVSP,#30HCLRP1.7CLRIT0CLRPX0SETBEX0SETBEAHERE:AJMPHERE,;外部中断0入口地址;T0中断入口;设置堆栈指针;设灯的初态为“灭”;外部中断0为电平触发方式;外部中断0为低优先级;允许外部中断0中断;CPU允许中断;等待外部中断请求,图,外部中断0中断服务程序(由0003H转来)WBINT:MOVTMOD,#01HMOVTL0,#0B0HMOVTH0,#3CHSETBPT0SETBTR0SETBET0MOVR7,#40HERE1:JNBP3.2,HERE1CLRET0CLRTR0CLRP1.7RETI,;T0定时,模式1

温馨提示

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

评论

0/150

提交评论