资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,6.1 定时器概述,6.2 定时器的控制,6.3 定时器的四种模式及应用,6.4 思考题与习题,第六章 定时器及应用,6.1 定时器概述,6.1.1 8051定时器结构,6.1.2 8051定时器功能,6.1.1 8051定时器结构,8051定时器的结构如,图6-1,所示。,有两个16位的定时器/计数器,即定时器0(T0)和定时器1(T1)。它们实际上都是16位加1计数器。,T0由两个8位特殊功能寄存器TH0和TL0构成;T1由TH1和TL1构成。,图6-1 89C51定时器结构,6.1.2 8051定时器功能,每个定时器都可由软件设置为,定时工作方式,或,计数工作方式,及其他灵活多样的可控功能方式。这些功能由特殊功能寄存器TMOD和TCON所控制。,定时器工作不占用CPU时间,除非定时器/计数器溢出,才能中断CPU的当前操作。,每个定时器/计数器还有四种工作模式。其中模式0-2对T0和T1是一样的,模式3对两者不同。,定时工作方式,定时器计数8051片内振荡器输出经12分频后的脉冲,即每个机器周期使定时器(T0或T1)的数值加1直至计满溢出。,当8051采用12MHz晶振时,一个机器周期为1s,计数频率为1MHz。,计数工作方式,通过引脚T0(P3.4)和T1(P3.5)对外部脉冲信号计数。当输入脉冲信号产生由1至0的下降沿时定时器的值加1。,CPU检测一个1至0的跳变需要两个机器周期,故最高计数频率为振荡频率的1/24。,为了确保某个电平在变化之前被采样一次,要求电平保持时间至少是一个完整的机器周期。,对输入脉冲信号的基本要求如,图6-2,所示。,6.2 定时器的控制,6.2.1 工作模式寄存器 TMOD,6.2.2 控制器寄存器 TCON,6.2.1 工作模式寄存器 TMOD,TMOD用于控制T0和T1的工作模式。,TMOD不能位寻址,只能用字节设置定时器的工作模式,低半字节设置T0,高半字节设置T1。,8051系统复位时,TMOD的所有位被清0。,TMOD各位的定义格式如,图6-3,所示。,TMOD各位的功能:,TMOD各位定义及具体的意义归纳如,图6-4,所示,。,GATE,C/T,M1,M0,GATE,M1,C/T,M0,定时器T1,定时器T0,TMOD,(89H),D7 D6 D5 D4 D3 D2 D1 D0,图6-3 工作模式寄存器TMOD的位定义,图6-4 TMOD各位定义及具体的意义,TMOD各位的功能,M1和M0操作模式控制位。,两位可形成四种编码,对应于四种模式。见,表6-1,。,表6-1 M1,M0控制的四种工作模式,C/T计数器/定时器方式选择位。,C/T=0,,设置为,定时方式,。定时器计数8051片内脉冲,即对机器周期计数。,C/T=1,,设置为,计数方式,。计数器的输入来自T0(P3.4),或T1(P3.5)端的外部脉冲。,TMOD各位的功能,GATE门控位。,GATE=0,,,只要用软件使TR0(或TR1)置1就可以启动定时器,而不管INT0(或INT1)的电平是高还是低。,GATE=1,,,只有INT0(或INT1)引脚为高电平且由软件使TR0(或TR1)置1时,才能启动定时器工作。,TMOD各位的功能,6.2.2 控制器寄存器 TCON,TCON除可字节寻址外,各位还可位寻址,。,8051系统复位时,TCON的所有位被清0。,TCON各位的定义格式如,图6-5,所示。,TCON各位的功能:,TCON各位定义及具体的意义归纳如 图6-6所示。,TF1,TR1,TF0,TR0,IE1,IE0,IT1,IT0,TCON,(88H),8FH 8EH 8DH 8CH 8BH 8AH 89H 88H,图6-5 控制寄存器TCON的位定义,图6-6 TCON各位定义及具体的意义,(3)采用查询方式的程序,图6-1 89C51定时器结构,HERE:SJMP HERE ;,5)T0溢出标志位。,三、模式 0 的应用举例(例6-3),7)T1溢出标志位。,设单片机晶振频率fosc=12MHz。,MOV TH1,#9CH,MOV IE,#88H ;定时器开中断,X=28 100=156=9CH,在程序初始化时,TL0和TH0由软件赋予相同的初值。,CPL P1.,1 8051定时器结构,三、模式 0 的应用举例(例6-3),CPL P1.,TCON各位的功能,TF1(TCON.7)T1溢出标志位。,当,T1溢出,时,由硬件自动使中断触发器,TF1置1,,并CPU申请中断。,当,CPU响应中断进入中断服务程序后,,TF1由被硬件,自动清0,。TF1也可以用,软件清0,。,TF0(TCON.5)T0溢出标志位。,其功能和操作情况同TF1。,TR1(TCON.6)T1运行控制位。,可通过软件置1(,TR1=1,)或清0(,TR1=0,)来,启动,或,关闭,T1。,在程序中用指令“,SETB TR1,”使,TR1位置1,,定时器T1便开始计数。,TR0(TCON.4)T0运行控制位。,其功能和操作情况同TR1。,TCON各位的功能,IE1,IT1,IE0,IT0(TCON.3TCON.0),外部中断INT1,INT0请求及请求方式控制位。前一章已经讲过。,TCON各位的功能,6.3 定时器的四种模式及应用,模式 0 及其应用,模式 1 及其应用,模式 2 及其应用,模式 3 及其应用,综合应用举例,6.3.1 模式 0 及其应用,一、模式 0 的逻辑电路结构,二、模式 0 工作特点,三、模式 0 的应用举例,一、模式 0 的逻辑电路结构,T0在模式 0 的逻辑电路结构如图所示。(T1相同),T0(或T1)模式0结构13位计数器,二、模式 0 工作特点,在这种模式下,16位寄存器(TH0和TL0)只用了13位。其中TL0的高3位未用,其余5位为整个13位的低5为,TH0占高8位。当TL0的低5位溢出时,向TH0进位;TH0溢出时,向中断标志TF0进位(硬件置位TF0),并申请中断。,定时时间为:,t=(2,13,T0初值)振荡周期12,三、模式 0 的应用举例,(例6-1),例6-1:设定时器T0选择工作模式0,定时时间为1ms,fosc=6MHz。试确定T0初值,计算最大定时时间T。,三、模式 0 的应用举例,(例6-1),解:,当T0处于工作模式0时,加1计数器为13位。,(1),试确定T0初值,设T0的初值位X。,则:,(2,13,X)1/6 10,-6,12=110,-3,s,X=7692D=1 1110 0000 1100B,T0的低5位:01100B=0CH即,(TL0)=0CH,T0的高8位:11110000B=F0H即,(TH0)=F0H,(2),计算最大定时时间T,T0的最大定时时间对应于13位计数器T0的各位全为1,即(TL0)=1FH,(TH0)=FFH.,则:,T=2,13,1/6 10,-6,三、模式 0 的应用举例,(例6-2),例6-2:设T0工作在模式0,定时时间为1ms,fosc=6MHz。编程实现其定时功能。定时时间到,P1.0取反。,三、模式 0 的应用举例,(例6-2),解:,(1)计算T0初值X,计算步骤见例6-1。,结果:(TH0)=0F0H,(TL0)=0CH。,三、模式 0 的应用举例,(例6-2),(2)程序清单:,初始化引导程序,ORG 0000H,RESET:AJMP MAIN ;跳过中断服务程序区,ORG 000BH ;中断服务程序入口,AJMP ITOP,三、模式 0 的应用举例,(例6-2),主程序:,ORG 0100H,MAIN:MOV SP,#60H;设堆栈指针,ACALL PTOMD,HERE:AJMP HERE ;等待时间到,转入中断服务程序,PTOMD:MOV TMOD,#00H;选择工作模式,MOV TL0,#0CH;送初值,MOV TH0,#0F0H,SETB TR0 ;启动定时,SETB ET0 ;T0开中断,SETB EA ;CPU开中断,RET,三、模式 0 的应用举例,(例6-2),中断服务程序,ORG 0120H,ITOP:MOV TL0,#0CH ;重新装如初值,MOV TH0,#0F0H,取反,RETI,三、模式 0 的应用举例,(例6-3),例6-3:利用T0的工作模式0产生1ms定时,在P1.0引脚输出周期为2ms的方波。设单片机晶振频率fosc=12MHz。编程实现其功能。,三、模式 0 的应用举例,(例6-3),解:,取反一次即可。,(1)选择工作模式,T0,的模式字为TMOD=00H,即,M1M0=00,C/T=0,GATE=0,其余位为0。,三、模式 0 的应用举例,(例6-3),(2)计算1ms,定时时T0的初值,(2,13,X)1/12 10,-6,12=110,-3,s,X=7193D=11100000 11000B,T0的低5位:11000B=18H即,(TL0)=18H,T0的高8位:11100000B=E0H即,(TH0)=E0H,三、模式 0 的应用举例,(例6-3),(3)采用查询方式的程序,程序清单:,MOV TMOD,#00H ;设置T0为模式0,MOV TL0,#18H ;送初值,MOV TH0,#0E0H,SETB TR0 ;启动定时,LOOP:JBC TF0,NEXT ;查询定时时间到否,SJMP LOOP,NEXT:MOV TL0,#18H ;重装计数初值,MOV TH0,#0E0H,CPL P1.0 ;取反,SJMP LOOP ;重复循环,三、模式 0 的应用举例,(例6-3),(4)采用定时器溢出中断方式的程序,程序清单:,主程序,ORG 0000H,RESET:AJMP MAIN ;跳过中断服务程序区,ORG 0030H,MAIN:MOV TMOD,#00H ;设置T0为模式0,MOV TL0,#18H ;送初值,MOV TH0,#0E0H,SETB EA ;CPU开中断,SETB ET0 ;T0中断允许,SETB TR0 ;启动定时,HERE:SJMP HERE ;等待中断,虚拟主程序,三、模式 0 的应用举例,(例6-3),中断服务程序,ORG 000BH,AJMP CTC0,ORG 0120H,CTC0:MOV TL0,#18H ;重新装如初值,MOV TH0,#0E0H,取反,RETI,6.3.2 模式 1 及其应用,一、模式 1 的逻辑电路结构,二、模式 1 工作特点,三、模式 1 的应用举例,一、模式 1 的逻辑电路结构,T0在模式 1 的逻辑电路结构如,图6-7,所示。(T1相同),图6-7 T0(或T1)模式1结构16位计数器,二、模式 1 工作特点,该模式对应的是一个,16位的定时器/计数器,。,用于定时工作方式时,定时时间为:,t=(2,16,T0初值)振荡周期12,用于计数工作方式时,计数长度最大为:,2,16,=65536(个外部脉冲),三、模式 1 的应用举例,(例6-4),输出。,使用程序查询方式,fosc=6MHz。,三、模式 1 的应用举例,(例6-4),解:,方波周期T=1/50=0.02s=20ms,用T1定时10ms,计数初值X为:,X=,2,16,12101000/12,=6553610000=55536=D8F0H,三、模式 1 的应用举例,(例6-4),源程序清单:,MOV TMOD,#10H ;设置T1为模式1,SETB TR1 ;启动定时,LOOP:MOV TL1,#0D8H ;送初值,MOV TH1,#0F0H,JNB TF1,$;查询定时时间到否,CLR TF1 ;,产生溢出,清标志位,CPL P1.1 ;取反,SJMP LOOP ;重复循环,6.3.3 模式 2 及其应用,一、模式 2 的逻辑电路结构,二、模式 2 工作特点,三、模式 2 的应用举例,一、模式 2 的逻辑电路结构,T0在模式 2 的逻辑电路结构如,图6-8,所示。(T1相同),TL0计数溢出时,不仅使溢出中断标志位TF0置1,而且还自动把TH0中的内容重新装载到TL0中。,TL0用作8位计数器,TH0用以保存初值。,图6-8 T0(或T1)模式2结构8位计数器,二、模式 2 工作特点,该模式把TL0(TL1)配置成一个可以自动重装载的8位定时器/计数器。,在程序初始化时,TL0和TH0由软件赋予相同的初值。,用于定时工作方式时,定时时间为:,t=(2,8,TH0初值)振荡周期12,用于计数工作方式时,计数长度最大为:,2,8,=256(个外部脉冲),该模式可省去软件中重装常数的语句,并可产生相当精确的定时时间,适合于作串行口波特率发生器。,三、模式 2 的应用举例,(例6-5),输出一个500s的同步脉冲。请编程序实现该功能。查询方式,fosc=6MHz。,三、模式 2 的应用举例,(例6-5),解:,(1)模式选择,选T0为模式2,外部事件计数方式。,输出由1变为0。T0定时到产生溢出,使P1.0输出恢复高电平,T0又恢复外部事件计数方式。,如,图6-9,所示。,图6-9 功能描述,三、模式 2 的应用举例,(例6-5),(2)计算初值,T0工作在外部事件计数方式,,当计数到,2,8,时,再加1计数器就会溢出。设计数初值为X,当再出现一次外部事件时,计数器溢出。,则:X+1=2,8,X=2,8,1=11111111B=0FFH,T0工作在定时工作方式,,设晶振频率为6MHz,500s相当于250个机器周期。因此,初值X为,(2,8,X)2s=500s,X=6=06H,三、模式 2 的应用举例,(例6-5),(3)程序清单,START:MOV TMOD,#06H ;设置T0为模式2,外部计数方式,MOV TL0,#0FFH ;T0计数器初值,MOV TH0,#0FFH,SETB TR0 ;启动T0计数,LOOP1:JBC TF0,PTFO1 ;查询T0溢出标志,,;TF0=1时转,且清TF0=0,SJMP LOOP1 ;,三、模式 2 的应用举例,(例6-5),PTFO1:CLR TR0 ;停止计数,MOV TMOD,#02H ;设置T0为模式2,定时方式,MOV TL0,#06H ;送初值,定时500s,MOV TH0,#06H,SETB TR0 ;启动定时500s,LOOP2:JBC TF0,PTFO2 ;查询T0溢出标志,,;TF0=1时转,且清TF0=0,;(第一个500s到否?),SJMP LOOP2 ;等待中断,虚拟主程序,CLR TR0 ;停止计数,SJMP START,三、模式 2 的应用举例,(例6-6),解:,(1)选择模式,外部信号由T1(P3.5)引脚输入,每发生一次负跳变计数器加1,每输入100个脉冲,计数器发生溢出中断,中断服务程序将P1.0取反一次。,T1计数工作方式模式2的模式字为,(TMOD)=60H。,T0不用时,TMOD的低4位可任取,但不能进入模式3,一般取0。,三、模式 2 的应用举例,(例6-6),(2)计算T1的计数初值,X=2,8,100=156=9CH,因此:TL1的初值为9CH,,重装初值寄存器TH1=9CH,。,三、模式 2 的应用举例,(例6-6),(3)程序清单,MAIN:MOV TMOD,#60H ;设置T1为模式2,外部计数方式,MOV TL1,#9CH ;T1计数器初值,MOV TH1,#9CH,MOV IE,#88H ;,定时器开中断,SETB TR1 ;启动T1计数,HERE:SJMP HERE ;等待中断,ORG 001BH ;中断服务程序入口,RETI,6.3.5 综合应用举例,(例6-8),例6-8:设时钟频率为6MHz。编写利用T0产生1s循环定时的程序,时间到后P1.0取反。,6.3.5 综合应用举例,(例6-8),解:,(1)定时器T0工作模式的确定,模式0最长可定时16.384ms;,模式1最长可定时131.072ms;,模式2最长可定时512s;,定时1s,可选用模式1,每隔100ms中断一 次,中断10次为1s。,6.3.5 综合应用举例,(例6-8),(2)求计数器初值X,(2,16,X)12/(6 10,6),=10010,-3,s,X=15536=3CB0H,因此:(TL0)=0B0H,(TH0)=3CH,6.3.5 综合应用举例,(例6-8),(3)实现方法,对于中断10次计数,可使T0工作在计数方式,也可用循环程序的方法实现。,本例采用循环程序法。,6.3.5 综合应用举例,(例6-8),(4)源程序清单,ORG 0000H,AJMP MAIN ;,上电,转向主程序,ORG 000BH ;T0的中断服务程序入口地址,AJMP SERVE ;转向中断服务程序,ORG 2000H ;主程序,6.3.5 综合应用举例,(例6-8),MAIN:MOV SP,#60H ;设堆栈指针,MOV B,#0AH ;设循环次数,MOV TMOD,#01H ;设置T0工作于模式1,MOV TL0,#0B0H ;装计数值低8位,MOV TH0,#3CH ;装计数值高8位,SETB TR0 ;启动定时,SETB ET0 ;T0开中断,SETB EA ;CPU开中断,SJMP$;等待中断,
展开阅读全文