单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,微机原理及应用,微机原理及应用,1,第5章 MCS-51单片机内部定时器/计数器,第5章 MCS-51单片机内部定时器/计数器,2,5.1 定时器/计数器概述,定时器/计数器,实际上是,加1计数器,,当它,对外部事件,进行,计数,时,由于频率不固定,此时称之为,计数器,;当它,对内部,固定频率的机器周期,进行计数,时称之为,定时器,。,5.1 定时器/计数器概述,3,振荡器和时序,OSC,程序存储器,4KB ROM,数据存储器,4KB RAM,64KB总线,扩展控制器,可编程I/O,可编程全双工串行口,8051,CPU,2,16,位,定时器/计数器,外时钟源,内中断,外中断,控制,并行口,串行通信,外部事件计数,1 MCS-51单片机总体构框图,振荡器和时序程序存储器数据存储器64KB总线可编程I/O可编,4,【单片机知识】第5章-MCS-51单片机内部定时器课件,5,T0(或T1)在作,定时器,使用时,输入的时钟脉冲由晶振的输出经12分频后得到的。,T0(或T1)在作,计数器,使用时,输入的时钟脉冲由外部输入端P3.4(T0)和P3.5(T1)提供。,T0(或T1)在作定时器使用时,输入的时钟脉冲由晶振的输出经,6,定时器/计数器的基本结构如图所示。,定时器/计数器的基本结构如图所示。,7,当加法计数器的初值被设置后,用指令改变特殊功能寄存器TMOD和TCON的内容,就会在下一条指令的第一个机器周期的S1P1时刻按照设定方式自动进行工作。,当加法计数器的初值被设置后,用指令改变特殊功能寄存器TMOD,8,初值的设置方法:,设计数器计数的最大值为M,计数值为N,初值为X,则X的计算方法为:,计数器,工作方式时:,X=M-N,定时器,工作方式时:,X=M-定时时间/T,T=12/晶振频率,初值的设置方法:设计数器计数的最大值为M,计数值为N,初值为,9,5.2 定时器/计数器的控制字,定时器/计数器有,4种工作模式,,由,TMOD设置,并由,TCON控制,。,5.2 定时器/计数器的控制字,10,定时器/计数器的,工作模式寄存器TMOD:,特殊功能寄存器TMOD的地址为89H,它不能位寻址,在设置时一次写入。,定时器/计数器的工作模式寄存器TMOD:特殊功,11,TMOD各位的含义,D7,D6,D5,D4,D3,D2,D1,D0,GATE,C/T,M1,M0,GATE,C/T,M1,M0,定时器1(T1),定时器0(T0),门控信号位,定/计数方式选择位:,C/T0,为定时方式,C/T1,为计数方式,模式选择位:,M1 M0 模式,0 0,0,0 1,1,1 0,2,1 1,3 (T1无模式3),TMOD各位的含义D7D6D5D4D3D2D1D0GATEC,12,定时器控制寄存器TCON:,定时器控制寄存器TCON(地址为88H)除可字节寻址外,各位还可以位寻址。,D7,D6,D5,D4,D3,D2,D1,D0,TF1,TR1,TF0,TR0,IE1,IT1,IE0,IT0,与中断有关,见第4章,T0,T1的,运行控制,位,通过软件,置1,后定时器/计数器才能正常工作。,定时器控制寄存器TCON:定时器控制寄存器TCON(地址为8,13,GATE=0时,则只要TR0(或TR1)置1,T0(或T1)就被选通,与INT0和INT1的电平状态无关。,GATE=1时,不仅要TR0(或TR1)置1,还必须INT0和INT1的电平为高,T0(或T1)才能被选通。,GATE=0时,则只要TR0(或TR1)置1,T0(或T1),14,5.3 定时器/计数器工作模式,51系列单片机的定时器/计数器T0和T1对,M1,和,M0,位的设置对应于四种工作模式,即,模式0,、,模式1,、,模式2,、,模式3,。在模式0、模式1和模式2时,T0和T1的工作情况相同。,5.3 定时器/计数器工作模式,15,工作模式,0,模式0是选择16位定时/计数器(T0或T1)的,高8位,和,低5位,组成的一个,13位,定时器/计数器。,工作模式0,16,C/T=0时,为定时工作方式。,定时时间,为:,t=(2,13,-T0初值)振荡周期12,C/T=1时,为计数工作方式,计数最大长度为,2,13,8192个外部脉冲。,例:,设定时/计数器0工作于模式0,定时时间为1ms,时钟频率为12MHZ,试确定初值。,解:设初值为X,则,110,-3,=(2,13,-X)1/1210,-6,12,X=7192,化为二进制:X=11100000,11000,B,高8位化为16进制=E0H,低5位化为16进制=,18,H,TH0=0E0H,TL0=18H,C/T=0时,为定时工作方式。定时时间为:TH0=0E0H,17,根据上例编写程序,利用定时器/计数器每隔1ms控制产生宽度为一个机器周期的负脉冲,并由P1.0口输出。,解:1、计算初值得11100000,11000,B,2、初值装入TH0=0E0H,TL0=18H,3、写模式控制TMOD:,M1M0=00,GATE=0,C/T=0,因此,TMOD=00H,4、编程,根据上例编写程序,利用定时器/计数器每隔1ms控制产生宽度为,18,ORG 0000H,AJMP MAIN ;上电,转主程序,ORG 000BH,;T0的中断入口地址,AJMP T0INT,;转中断服务程序,ORG 0100H,MAIN:SETB P1.0,MOV TH0,#0E0H,;装入定时器初值,MOV TL0,#18H,MOV TMOD,#00H,;设置为模式0,MOV IE,#82H,;EA=1,ET0=1,允许T0中断,SETB TR0,;启动T0,LOOP:SJMP LOOP ;等待中断,ORG 0200H,T0INT,:CLR P1.0,SETB P1.0 ;输出1周期负脉冲,MOV TH0,#0E0H,;重新装入定时器初值,MOV TL0,#18H,RETI,;中断返回,ORG 0000H,19,例:,设时钟频率为6MHZ,试利用T1,采用模式0产生10ms的定时,并使P1.7输出周期为20ms的方波。,解:1、计算初值得1100011,11000,B,2、初值装入TH1=63H,TL1=18H,3、写模式控制TMOD:,M1M0=00,GATE=0,C/T=0,因此,TMOD=00H,4、编程,20ms,10ms,例:设时钟频率为6MHZ,试利用T1,采用模式0产生10ms,20,ORG 0000H,LJMP MAIN ;上电,转主程序,ORG 001BH,;T1的中断入口地址,AJMP T1INT,;转中断服务程序,MAIN:,MOV TH1,#63H,;装入定时器初值,MOV,TL1,#18H,MOV TMOD,#00H,;设置为模式0,SETB EA,;CPU开中断,SETB ET1,;允许T1中断,SETB TR1,;启动T1,LOOP:SJMP LOOP ;等待中断,T1INT:,CPL P1.7 ;P1.7口取反,输出,MOV TH1,#63H,;重新装入定时器初值,MOV TL1,#18H,RETI,;中断返回,ORG 0000H,21,工作模式,1,该模式对应的是一个,16位,的定时器/计数器。,其结构与操作与模式0几乎相同,定时时间为:,t=(2,16,-T0初值)振荡周期12,计数工作方式时,计数最大长度为:,2,16,65536个外部脉冲。,工作模式1,22,例:,设时钟频率为6MHZ,试利用T0,采用模式1产生10ms的定时,并使P1.7输出周期为20ms的方波。,解:1、计算初值得X=65036=11111110,00010110,B,2、初值装入TH0=0FEH,TL0=16H,3、写模式控制TMOD:,M1M0=01,GATE=0,C/T=0,因此,TMOD=01H,4、编程,20ms,10ms,例:设时钟频率为6MHZ,试利用T0,采用模式1产生10ms,23,ORG 0000H,LJMP MAIN ;上电,转主程序,ORG 000BH,;T0的中断入口地址,AJMP T0INT,;转中断服务程序,MAIN:,MOV TH0,#0FEH,;装入定时器初值,MOV TL0,#16H,MOV TMOD,#01H,;设置为模式1,SETB EA,;CPU开中断,SETB ET0,;允许T0中断,SETB TR0,;启动T0,LOOP:SJMP LOOP ;等待中断,T0INT,:CPL P1.7 ;P1.7口取反,输出,MOV TH0,#0FEH,;重新装入定时器初值,MOV TL0,#16H,RETI,;中断返回,ORG 0000H,24,用查询方式对上例进行编程。,ORG 0100H,MOV TH0,#0FEH,;装入定时器初值,MOV TL0,#16H,MOV TMOD,#01H,;设置为模式1,SETB TR0,;启动T0,LOOP:JNB TF0,$;时间未到,等待,MOV TH0,#0FEH,;重新装入定时器初值,MOV TL0,#16H,CPL P1.7 ;P1.7口取反,输出,SJMP LOOP ;返回,END,用查询方式对上例进行编程。ORG 0,25,工作模式,2,模式2把,TL0,(或TL1)设置成一个可以自动重装载的,8位,定时器/计数器。定时时间为:,t=(2,8,-T0初值)振荡周期12,计数工作方式时,计数最大长度为:2,8,256个外部脉冲。,工作模式2,26,例:用定时器T1的模式2对外部信号计数,要求每计满100次,将P1.0端取反。,解:1、计算计数器初值,XM-N=2,8,-100=156=9CH,2、初值装入TH1=9CH,TL1=9CH,3、写模式控制TMOD:,M1M0=10,GATE=0,C/T=1,因此,TMOD=,0110,0000B=60H,4、编程,例:用定时器T1的模式2对外部信号计数,要求每计满100次,,27,ORG 0000H,LJMP MAIN ;上电,转主程序,ORG 001BH,;T1的中断入口地址,AJMP T1INT,;转中断服务程序,MAIN:,MOV TH1,#9CH,;装入计数器初值,MOV TL1,#9CH,MOV TMOD,#60H,;设置为计数器,工作为模式1,SETB EA,;CPU开中断,SETB ET1,;允许T1中断,SETB TR1,;启动T1,LOOP:SJMP LOOP ;等待中断,T1INT:,CPL P1.0 ;P1.0口取反,输出,RETI,;中断返回,ORG 0000H,28,工作模式,3,工作模式3对T0和T1大不相同。,若将,T0,设置为,模式3,,,TL0,和,TH0,被分成为,两个,相互,独立,的,8位计数器,。,工作模式3,29,5.4 定时器/计数器应用实例,利用定时器0产生25Hz的方波,由P1.0输出。假设CPU不做其它工作,则可采用查询方式进行控制,设晶振频率为12MHz。,25Hz方波,周期为1/2540ms,可以采用定时器定时20ms,每隔20ms改变一下P1.0的电平,即可得到25Hz的方波信号。,比较一下该采用哪种模式:,模式0:最长定时时间为t=2,13,110,-6,=8.192ms,模式1:最长定时时间为t=2,16,110,-6,=65.536ms,模式2:最长定时时间为t=2,8,110,-6,=0.256ms,根据上面分析,采用模式1,5.4 定时器/计数器应用实例,30,设初值为X,则有:,t=(2,16,-X)110,-6,=2010,-3,求得X=45536=B1E0H,程序如下:,ORG 0100H,MOV TMOD,#01H,MOV TH0,#0B1H,MOV TL0,#0E0H,SETB TR0,LOOP:JNB TF0,$;$为当前指令指针地址,CLR TF0,MOV TH0,#0B1H,MOV TL0,#0E0H,CPL P1.0,SJMP LOOP,END,设初