1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,5.1 定时方法概述,1.软件定时:执行一个循环程序进行时间延迟。,但是单片机,CPU被占用,,无法进行多任务处理。,2.硬件定时:定时时间较长。,3.可编程定时器定时:对系统时钟脉冲的计数来实现。,采用专门的定时器和计数器独立运行,有利于提高单片机的性能,适用于,实时多任务,处理的要求,第五章2 单片机的定时器计数器,1,5.2、定时器/计数器的结构和功能,以,8051,系列为例:,2,个,16,位可编程定时器,/,计数器:,T0,和,T1.,T0:TL0/TH0,;,T1:TL1/TH1,TMOD/TC
2、ON:,工作方式寄存器,/,控制寄存器,1.,结构,2,2.功能,16位的定时器/计数器的实质:加法计数器。,(,1,)定时,对,机器周期,进行计数,即计数脉冲来自单片机的内部。即每个机器周期产生一个计数脉冲使得计数器加,1,,直至计满溢出,。,计数频率,f,osc,/12,,即,1,个机器周期;,“定时”时间:开始计数到溢出;,预置计数法:初值越大,定时越短。,3,(,2,)计数,对外部脉冲信号计数(,T0P3.4/T1P3.5),。,下降沿出现时,计数器值加,1.,在每个机器周期的,S5P2,拍节时对外部计数脉冲进行采样;,如果前一个机器周期采样为高电平,后一个机器周期采样为低电平,即为一
3、个有效的计数脉冲。,下一个周期的,S3P1,期间,新的计数值装入计数器。,最高计数频率,f,osc,/24,,即,2,个机器周期。,注:,定时器按设定的工作方式独立运行,不占用,CPU,的操作时间,除非定时器计满溢出,中断,CPU,。,4,1.定时器控制寄存器TCON,功能:控制定时器T0或T1的运行或停止,并标志定时器的溢出和中断情况。,位地址:88H,可以位寻址。,TF0/TF1:定时器溢出标志。溢出时,硬件自动使TF0/TF1置1,并申请中断。,TR0/TR1:定时器运行控制位。置1启动工作,置0停止工作。,IE0/IE1:外部中断0(INT0)/1(INT1)请求标志。,IT0/IT1
4、外部中断0/1触发方式选择位。,位地址,8FH,8EH,8DH,8CH,8BH,8AH,89H,88H,TCON,TF1,TR1,TF0,TR0,IE1,IT1,IE0,IT0,5.3 控制寄存器和方式寄存器,5,2.方式寄存器,GATE门控位,GATE=0 以运行控制位TR启动定时器,GATE=l 以外中断请求信号或启动定时器,C/T定时方式或计数方式选择位,C/T=0 定时工作方式,C/T=1 计数工作方式,D7,D6,D5,D4,D3,D2,D1,D0,GATE,C/T,M1,M0,GATE,C/T,M1,M0,定时器T1,定时器T0,6,2.定时和计数应用,在方式0下,当为计数工作方
5、式时,计数值的范围是:,18192(2,13,),当为定时工作方式时,定时时间的计算公式为:,(2,13,计数初值)晶振周期12,或(2,13,计数初值)机器周期,其时间单位与晶振周期或机器周期相同(s)。,如晶振频率为6 MHz,则最小定时时间为,2,13,(2,13,1)2us=2(s),最大定时时间为,(2,13,0)2 us=16 384(s),9,例5.1设单片机晶振频率为6MHz,使用定时器1以方式0产生周期为500s的等宽正方波连续脉冲,并由P1.0输出,以查询方式完成。,1计算计数初值,(2,13,X,)2=250,X=8067=1111110000011B,十六进制表示,高8
6、位为:0FCH,低5位为03H。其中高8位放入TH1,即TH1=0FCH;低5位放入TL1,即TL1=03H,10,2.TMOD寄存器初始化,为把T1设定为方式0,则M1M0=00;,为实现定时功能,应使C/T=0;,为实现T1的运行控制,则GATE=0。,T0不用,有关位设定为0。,因此TMOD寄存器应初始化为00H。,3.由TCON中的TR1位控制定时的启动和停止,TR1=1启动,TR1=0停止。,11,例5.1 ORG 0030H,;查询方式 P112,MAIN:MOVTMOD,#00H,MOVTH1,#0FCH,MOVTL1,#03H,MOVIE,#00H,SETBTR1,LOOP:J
7、BCTF1,LOOP1,AJMPLOOP,LOOP1:MOVTH1,#0FCH,MOVTL1,#03H,CPLP1.0,AJMP LOOP,END,12,5.4.2 工作方式1,P113,M1=0 M0=1,与方式0一样,唯一差别是16位定时/计数器,由THx8位和TLx8位组成16位加1计数器计数。,13,2.定时和计数,当为计数工作方式时,计数值的范围是,165536(2,16,),当为定时工作方式时,定时时间的计算公式为,(2,16,计数初值)晶振周期12,或(2,16,计数初值)机器周期,其时间单位与晶振周期或机器周期相同(s)。,14,以中断方式完成例6.1。单片机晶振频率为6MHz
8、使用定时器1以工作方式1产生周期为500s的等宽正方波连续脉冲,并由P1.0输出。,1计算计数初值,TH1=0FFH TL1=83H,2TMOD寄存器初始化,TMOD=10H,3程序设计,15,ORG 0000H,LJMP MAIN,ORG 001BH,LJMP TOINT,MIAN:MOVTMOD,#10H,MOVTH1,#0FFH,MOVTL1,#83H,SETBEA,SETBET1,SETBTR1,HERE:SJMPHERE,TOINT:MOVTH1,#0FFH,MOVTL1,#83H,CPLP1.0,RETI,16,例5.2:利用定时器T1方式1进行定时,使P1.1端每隔1s取反一次
9、设晶振频率为12MHz。,解:方式1下最大定时时间:Tmax2,16,1us65536us65.536ms,当定时时间大于Tmax时,可设置软件计数器。,设T1定时时间为50ms,则计满20次就可。,(2,16,X)1us50000us,X15536=3CB0H,所以TH1=3CH,TL1=B0H,程序如下:,17,START:MOVA,#00;A赋计数初值0,MOVTMOD,#10H;T1为方式1,MOVTH1,#3CH,MOVTL1,#0B0H,SETBTR1;启动T1,LOOP:JBCTF1,NEXT,SJMPLOOP,NEXT:MOVTH1,#3CH,MOVTL1,#0B0H,INC
10、A,CJNEA,#20,LOOP,CPLP1.1,MOVA,#00,SJMPLOOP,18,5.4.3 定时工作方式2 P113,M1=1 M0=0,自动装载,初值8位定时/计数器。TLx为8位加1计数器,THx为8位初值暂存器。,用于需要重复定时和计数的场合,最大计数值:256(2,8,),最大定时时间(12MHZ T=1,s):,256,s,定时时间=(2,8,-Tx初值)x 振荡周期 x 12,19,例5.3 使用定时器0以工作方式2产生100s定时,在P1.0输出周期为200s的连续正方波脉冲。已知晶振频率,f,osc=6MHz。,1计算计数初值,6MHz晶振下,一个机器周期为2us,
11、以TH0作重装载的预置寄存器,TL0作8位计数器,假设计数初值为,X,,则,(,256,X,),2=100us,求解得,X,=206D=11001110B=0CEH,把0CEH分别装入TH0和TL0中:,TH0=0CEH,TL0=0CEH,20,例5.3,(查询方式),ORG 0000H LJMP MAIN,ORG 0030H,MAIN:MOVIE,#00H,MOVTMOD,#02H,MOVTH0,#0CEH,MOVTL0,#0CEH,SETBTR0,LOOP:JBCTF0,LOOP1,AJMPLOOP,LOOP1:CPLP1.0,AJMP LOOP,END,21,(中断方式),;等待中断,$
12、SJMP,HERE,:,;定时开始,TR0,SETB,LOOP:,;定时器0允许中断,ET0,SETB,;开中断,EA,SETB,;设置计数初值,#0CEH,TL0,,MOV,;保存计数初值,#0CEH,TH0,,MOV,;设T0为工作方式2,#02H,TMOD,,MOV,MAIN,:,ORG0000H,LJMPMAIN,ORG000BH,LJMPT1INT,;中断返回,RETI,;输出方波,P1.0,CPL,T1INT:,22,例5.4:用定时器1以工作方式2实现计数,每计100次进行累加器加1操作。,1.计算计数初值,256-100=156D9CH,则TH1=TL1=9CH,2.TMOD
13、初始化,M1M0=10,C/T=1,GATE=0,因此TMOD=60H,23,例5.4 ORG0000H P115,LJMPMAIN,ORG 0030H,;查询方式,MAIN:MOVIE,#00H,MOVTMOD,#60H,MOVTH1,#9CH,MOVTL1,#9CH,SETBTR1,DEL:JBCTF1,LOOP,AJMPDEL,LOOP:INCA,AJMP DEL,END,24,例,:(应用两个定时器),设重复周期大于1ms的低频脉冲信号从P3.5引脚(T1)输入。要求,P3.5每发生1次负跳变时,P1.0输出1个500s同步负脉冲,同时P1.1输出1个1ms的同步正脉冲,其波形图如下,
14、设fosc6MHz。,P3.5,P1.0,P1.1,1ms,500s,1ms,25,计算计数初值,:定时器T0定时500us,使用方式2,T1用于计数1个脉冲(每一次负跳变发生一次变化,,考虑如何检测负跳变?,),同时使用两个定时计数器:,T0:,(2,8,-x)2us500us x=6D=06H,TH006H,TL006H,T1:,X=2,8,-1 X=255D=0FFH,TH1=0FFH,TL1=0FFH,T0用于定时CT0,方式2 M1 M010,GATE=0,T1用于计数CT1,方式2 M1 M010,GATE=0,TMOD寄存器初始化:TMOD62H,P3.5,P1.0,P1.1,1
15、ms,500s,1ms,26,ORG 0030H,START1:MOV TMOD,#62H,MOV TH0,#06H,;,T0,定时500us,MOV TL0,#06H,MOV TH1,#0FFH,;,T1,计数一个脉冲,MOV TL1,#0FFH,SETB P1.0,CLR P1.1,SETB TR1,;启动T 1,LP1:JBC TF1,NEX1;,检测外部跳变信号,SJMP LP1,NEX1:CLR P1.0,SETBP1.1,SETB TR0,;启动T 0,LP2:JBC TF0,NEX2,;定时500us,SJMP LP2,NEX2:SETB P1.0,LP3:JBC TF0,NEX
16、3,SJMP LP3,NEX3:CLR P1.1,;定2次500us共1ms,CLR TR0,;T0停止工作,AJMP LP1,P3.5,P1.0,P1.1,1ms,500s,1ms,27,5.4.4 定时工作方式3 P115,只适用于定时器T0,被分成两个独立的8位计数器TL0和TH0.,定时器T1没有方式3状态,若设置为方式3,则停止工作。,28,振荡器,12,TL1,(8/5位),T1(P3.5),端,C/,T=0,C/,T=1,TH1,(8位),串行口,控制,振荡器,12,TL1,(8位),串行口,T1(P3.5),端,C/,T=0,C/,T=1,TH1,(8位),重新装入,(a)T1
17、方式1或0,(b)T1方式2,T0方式3时T1的工作方式,29,5.5 外部中断源的扩展,5.5.1 通过OC门线或实现,利用一个外部中断输入线INT0(或INT1),采用集电极开路的非门构成或非电路。,查询P1.0P1.3的逻辑电平来判断哪个中断源引起中断。,30,中断INT1服务程序段如下:,ORG00013H;中断矢量地址,LJMPINTRPT;转到入口地址,INTRPT:PUSHPSW;保护现场,。,PUSHACC,JBP1.0,SERV1,JBP1.1,SERV2,JBP1.2,SERV3,JBP1.3,SERV4,EXIT:POPACC,POPPSW,RETI,SERV1:.,AJ
18、MPEXIT,31,利用T0/T1的外部事件计数输入端作为边沿触发器的外部中断输入端;,将T0/T1设置成计数方式,计数器初值设为满量程值,即全1状态;,T0/T1端出现负跳变脉冲时,计数器加1就溢出产生中断;,TF0/TF1作为外部中断请求标志。,5.5.2 通过定时器/计数器实现,32,例:定时器T1设置为方式2外部计数方式,允许T1中断,且CPU开放中断。,MOVTMOD,#60H,MOVTL1,#0FFH,MOVTH1,#0FFH,SETBEA,SETBET1,SETBTR1,5.5.2 通过定时器/计数器实现,33,5.6 定时器与中断综合应用,例:,利用定时器0控制产生周期为2ms
19、和100ms的方波信号,分别由P1.0和P1.1引脚输出,,采用中断方式,。系统时钟为12MHz。,分析:方波为2ms,定时时间为1ms。,机器周期为1s,采用方式0,则计数初值为,X=2,13,-1000=7192=1110000011000B,TH0=E0H,TL0=18H,方波为100,ms,定时时间为50ms,可采用50次1ms定时,34,ORG 0000H,LJMP BEGIN,ORG 000BH,LJMP TOINT,ORG 2000H,BEGIN:MOV TMOD,#00H,MOV TL0,#18H,MOV TH0,#0E0H,MOV R2,#50,SETB EA,SETB ET
20、0,SETB PT0,SETB TR0,HERE:SJMP HERE,TOINT:MOV TL0,#18H,MOV TH0,#0E0H,CPL P1.0,DJNZ R2,RETURN,CPL P1.1,MOV R2,#50,RETURN:RETI,35,查询方式,中断方式,LOOP1:,JBC,TF0,LOOP2,SJMPLOOP1,HERE:SJMP HERE,ORG 000BH,LJMP TOINT,SETB EA,SETB ET0,SETB PT0,SETB TR0,SETB TR0,TOINT:,使用中断方式时:,定时器溢出中断请求标志位TF0,TF1,由硬件自动清0。,使用查询方式时
21、定时器溢出中断请求标志位TF0,TF1,由用户软家清0。,36,例:设单片机振荡频率为6MHz,要求每隔100ms,从外部ROM以data开始的数据区传送一个字节数据到P1口输出,共传送100个数据。要求,(1)定时采用定时器T0以方式2实现(2)数据输出在中断服务程序中完成。,解:定时器T0,方式2,最大定时时间512us0.512ms,因此,设定时时间为0.5ms500us,采用一个软件计数器计数200次实现达到100ms。,(256X)2=500X6=06H。,程序如下:,37,ORG0000H,AJMPSTART,ORG000BH,AJMPTOINT,START:MOVTMOD,#
22、02H,MOVTL0,#06H,MOVTH0,#06H,SETBEA,SETBET0,SETBPT0,SETBTR0,MOVDPTR,#data,MOVR6,#100D,LOOP:MOVR7,#200D,MOVA,R7,HERE:JNZHERE,DJNZR6,LOOP,CLRTR0,TOINT:DJNZR7,LP1,CLRA,MOVCA,A+DPTR,MOVP1,A,INCDPTR,LP1:MOVA,R7,RETI,38,单片机专门固化的定时器/计数器的特点:总结,1、51子系统有,2个,计数器、52子系统有,3个,计数器,2、每个计数器都是一个,加法,计数器。,3、每个计数器都可定义为,8b
23、it、13bit、16bit等,4种工,作方式,以方便在不同的环境下使用。,4、每个计数器都可以,置初值,,每来一个脉冲+1。,5、每个计数器都可以选择计数源,内部或外部。,6、当选择内部振荡源,由于已知频率,所以可以当定,时器,计数频率固定为振荡频率的,12分频,。,7、当选择外部脉冲,由于频率未知,可用内部振荡频,率去测量,最大计数脉冲为振荡频率的,24分频,。,39,作业,1,、,8051,单片机内有几个定时器,/,计数器?每个定时器,/,计数器有几种工作方式,如何选择?,2,、定时器工作在方式,2,有什么特点?适用于什么场合?,3,、假定单片机的晶振频率为,6MHz,,使用定时器,0,以定时方法在,P1.0,输出周期为,400us,,占空比为,10:1,的矩形脉冲,以定时工作方式,2,编程实现。,4,、假定单片机的晶振频率为,12MHz,,利用定时器,T0,(工作方式,2,)在,P1.1,引脚上输出周期为,0.4ms,的方波信号,采用中断方式实现。,5,、假定单片机的晶振频率为,6MHz,,要求每隔,50ms,,从内部,RAM,以,30H,开始的数据区传送一个字节数据外部,RAM,以,2000H,开始的连续存储区,共传送,50,个数据。要求以定时器,T1,的工作方式,2,实现,并且数据传送在中断服务程序中完成。,40,






