第6章MCS-51单片机定时器/计数器本章制作:刘晓霞第6章MCS-51单片机定时器/计数器目录6.1MCS-51定时器/计数器的结构及原理6.2定时器T0、T16.3定时器T26.4定时器应用举例本章主要讨论MCS-51单片机定时器/计数器的逻辑结构和工作原理。内容主要有MCS-51单片机定时器T0、T1、T2的逻辑结构,工作方式的选择和应用。本章为单片机的主要内容,也是第七章串行口的学习的基础。第6章MCS-51单片机的定时器/计数器6.1MCS-51单片机定时器/计数器的结构及原理主要内容6.1.1MCS-51单片机定时器的结构6.1.2MCS-51单片机定时器的工作原理6.1.3定时器/计数器的控制寄存器6.1.1MCS-51单片机定时器的结构MCS-51单片机定时器/计数器逻辑结构图:CPU中断溢出溢出溢出定时器0定时器1定时器2TMODT2CONT2MODTCONTH0TL0TH1TL1TH2TL2RCAP2LRCAP2H模式模式T2(P1.0)T1(P3.5)T2EX(P1.1)T0(P3.4)模式控制控制控制中断重装捕获6.1.1MCS-51单片机定时器的结构MCS-51主要由如下构成:①三个16位的可编程定时器/计数器:定时器/计数器0、1和2。②每个定时器有两部分构成:THx和TLx③特殊功能寄存器T2MOD和T2CON,主要对T2进行控制。④特殊功能寄存器TMOD和TCON,主要对T0和T1进行控制。6.1.1MCS-51单片机定时器的结构⑤引脚P3.5、P3.4、P1.0,输入计数脉冲。⑥定时器T0、T1和T2是3个中断源,可以向CPU发出中断请求。⑦定时器/计数器T2增加了两个8位的寄存器:RCAP2H和RCAP2L。⑧特殊功能寄存器之间通过内部总线和控制逻辑电路连接起来。6.1.2MCS-51单片机定时器的工作原理定时器/计数器T0、T1、T2的内部结构简图如下图所示。C/T=0中断请求振荡器TLx(8位)THx(8位)Tx12分频TFxC/T=1控制TRx6.1.2MCS-51单片机定时器/计数器的工作原理从上图可以看出:①定时器的实质是一个加1计数器。②C/T=0,为定时器方式。计数信号由片内振荡电路提供,振荡脉冲12分频送给计数器,每个机器周期计数器值增1。例如:如果晶振频率为12MHz,则最高计数频率为0.5MHz6.1.2MCS-51单片机定时器/计数器的工作原理③C/T=1,为计数方式。计数信号由Tx引脚(P3.4、P3.5和P1.0)输入,每输入一有效信号,相应的计数器中的内容进行加1。④控制信号TRx=1时,定时器启动。⑤当定时器由全1加到全0时计满溢出,从0开始继续计数,TFx=1,向CPU申请中断。6.1.3定时器/计数器的方式和控制寄存器1、T0、T1工作模式寄存器TMOD功能:确定定时器的工作模式。其格式如图6-3所示:TMOD(89H)D7D6D5D4D3D2D1D0GATEC/TM1M0GATEC/TM1M0图6-3定时器方式寄存器TMODGATE——外部门控制位。GATE=1,使用外部控制门。TRx=1,P3.2(P3.3)=1时,启动定时器。6.1.3定时器/计数器的方式和控制寄存器GATE=0,不使用外部门控制计数器C/T——定时或计数方式选择位。C/T=0时,为定时器C/T=1时,为计数器采样过程:CPU在每机器周期S5P2期间,输入信号进行采样。若前一机器周期采样值为1,下一机器周期采样值为0,则计数器增1,随后的机器周期S3P1期间,新的计数值装入计数器。6.1.3定时器/计数器的方式和控制寄存器M1、M0——工作模式选择位。如下表所示:表6-1定时器/计数器的工作模式M1M0工作模式功能00模式013位定时器/计数器01模式116位定时器/计数器10模式28位自动重置定时器/计数器11模式3定时器0:TL0为8位定时器/计数器,TH0为8位定时器。定时器1:无此方式6.1.3定时器/计数器的方式和控制寄存器2、T0、T1的控制寄存器TCONTCON(88H)D7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0图6-4定时器的控制寄存器TF1、TF0:T1、T0的溢出标志位计数溢出,TFx=1。中断方式:自动清零;查询方式:软件清零。6.1.3定时器/计数器的方式和控制寄存器TR1、TR0:T1、T0启停控制位。置1,启动定时器;清0,关闭定时器。IE1、IE0:外部中断1、0请求标志位IT1、IT0:外部中断1、0触发方式选择位注意:GATE=1,TRx与P3.2(P3.3)的配合。6.2定时器T0、T1的工作模式及应用主要内容6.2.1模式0的逻辑结构及应用6.2.2模式1的逻辑结构及应用6.2.3模式2的逻辑结构及应用6.2.4模式3的逻辑结构及应用6.2.1模式0的逻辑结构及应用M1M0=00,选择模式0。逻辑结构如图6-5所示。(以T0为例)T0的结构:13位定时器/计数器。由TH0的8位、TL0的低5位构成(高3位未用)工作过程:TL0溢出后向TH0进位,TH0溢出后将TF0置位,并向CPU申请中断。定时时间=(213-定时初值)×机器周期最大定时时间:213×机器周期6.2.1模式0的逻辑结构及应用C/T=1,计数方式。计数脉冲由P3.4引脚输入。C/T=0时,定时方式。振荡器12分频T0(P3.4)TR0TL0(5位)TH0(8位)TF0GATE+&C/T=0C/T=1P3.2中断图6-5模式0的逻辑结构图6.2.2模式1的逻辑结构及应用M1M0=01时,选择模式1。逻辑结构如下页图所示。T0的结构:16位定时器/计数器。TL0:存放计数初值的低8位。TH0存放计数初值的高8位;定时时间=(216-定时初值)×机器周期最大定时时间:216×机器周期6.2.2模式1的逻辑结构及应用工作过程:当TL0计满时,向TH0进1;当TH0计满时,溢出使TF0=1,向CPU申请中断。MCS-51单片机之所以设置几乎完全一样的方式0和方式1,是出于与MCS-48单片机兼容的。振荡器12分频TL0(8位)TH0(8位)TF0+&T0(P3.4)TR0P3.2GATEC/T=0C/T=1中断6.2.3模式2的逻辑结构及应用M1M0=10时,选择模式2。逻辑结构如图6-7所示。T0的结构:TL0:8位的定时器/计数器;TH0:8位预置寄存器,用于保存初值。工作过程:当TL0计满溢出时,TF0置1,向CPU发出中断请求;同时引起重装操作(TH0的计数初值送到TL0),进行新一轮计数。6.2.3模式2的逻辑结构及应用图6-7模式2的逻辑结构图振荡器12分频T0(P3.4)TR0TF0中断GATE+&C/T=0C/T=1TL0(8位)TH0(8位)P3.26.2.3模式2的逻辑结构及应用定时时间=(28-初值)×机器周期最大定时时间=28×机器周期优点:模式2能够进行自动重装载。模式0和1计数溢出后,计数器为全0。循环定时或计数时,需要重新设置初值。说明:在模式2能够满足计数或定时要求时,尽可能使用模式2。6.2.4模式3的逻辑结构及应用1、T0模式3的结构特点M1M0=11,选择模式3。逻辑结构如图6-8和6-9所示:结构:TL0、TH0分为两个独立的8位计数器TL0:8位定时器/计数器使用T0所有的资源和控制位TH0:8位定时器使用T1所有的资源(中断向量、中断控制ET1、PT1)和控制位(TR1、TF1)6.2.4模式3的逻辑结构及应用振荡器12分频TR1振荡器12分频T0(P3.4)TR0TF0GATE+&C/T=0C/T=1TL0(8位)TF1TH0(8位)P3.2中断中断图6-8模式3下T0的逻辑结构图6.2.4模式3的逻辑结构及应用2、T0模式3时T1的工作模式T1可以模式0~模式2工作。T1的结构如图6-9所示由于TF1及中断矢量被TH0占用,所以T1仅用作波特率发生器或其它不用中断的地方。T1作波特率发生器,其计数溢出直接送至串行口。设置好工作方式,串行口波特率发生器开始自动运行。TMOD中T1的M1M0=11,T1停止工作。6.2.4模式3的逻辑结构及应用串行口串行口重新装入C/T=0C/T=1C/T=0C/T=1C/T=1C/T=0T1(P3.5)T1(P3.5)T1(P3.5)(c)T1模式2(b)T1模式1(a)T1模式0TH1(8位)TL1(5位)振荡器12分频振荡器12分频振荡器12分频串行口TH1(8位)TL1(8位)TL1(8位)TH1(8位)图6-9模式3下,T1的逻辑结构图思考:T0工作在模式3,T1怎么进行方式设置?串行口重新装入C/T=1C/T=0T1(P3.5)振荡器12分频TL1(8位)TH1(8位)6.2.4模式3的逻辑结构及应用1、定时器/计数器工作模式的选择方法(1)首先计算计数值N(2)确定工作模式原则是尽可能地选择模式2若N≤256选择模式2,否则选择模式1(3)如果需要增加一个定时器/计数器选择模式3。6.2.4模式3的逻辑结构及应用2、定时器/计数器初值X的计算方法因为X+N=28或216所以X=28或216-N(1)对定时器设定时时间为tN=t/机器周期所以X=28或216-t/机器周期(2)对计数器X=28或216-N6.2.4模式3的逻辑结构及应用例6-1设单片机的振荡频率为12MHz,用定时器/计数器0的模式1编程,在P1.0引脚产生一个周期为1000µs的方波,定时器T0采用中断的处理方式。定时器的分析过程。工作方式选择需要产生周期信号时,选择定时方式。定时时间到了对输出端进行周期性的输出即可。工作模式选择根据定时时间长短选择工作模式。首选模式2,可以省略重装初值操作。6.2.4模式3的逻辑结构及应用定时时间计算:周期为1000µs的方波要求定时器的定时时间为500µs,每次溢出时,将P1.0引脚的输出取反,就可以在P1.0上产生所需要的方波。定时初值计算:振荡频率为12MHz,则机器周期为1µs。设定时初值为X,(65536-X)×1µs=500µsX=65036=0FE0CH定时器的初值为:TH0=0FEH,TL0=0CH6.2.4模式3的逻辑结构及应用C语言程序:#includereg52.h//包含特殊功能寄存器库sbitP1_0=P1^0;//进行位定义voidmain(){TMOD=0x01;//T0做定时器,模式1TL0=0x0c;TH0=0xfe;//设置定时器的初值ET0=1;//允许T0中断EA=1;//允许CPU中断TR0=1;//启动定时器while(1);//等待中断}6.2.4模式3的逻辑结构及应用voidtime0_int(void)interrupt1{//中断服务程序TL0=0x0c;TH0=0xfe;//定时器重赋初值P1_0=~P1_0;//P1.0取反,输出方波}汇编语言程序:ORG0000HSJMPMAINORG000BHLJMPTIME06.2.4模式3的逻辑结构及应用MAIN:MOVTMOD,#01H;T0定时,模式1MOVTL0,#0CH;置定时初值MOVTH0,#0FEHSETBET0;定时器T0开中断SETBEA;CPU开中断SETBTR0;启动定时器T0SJMP$;等待定时器溢出TIME0:;中断服务程序MOVTL0,#0CHMOVTH0,#0FEH;重装定时初值CPLP1.0;P1.0取反RETI;中断返回END6.2.4模式3的逻辑结构及应用例6-2设单片机的振荡频率为12MHz,用定时器/计数器0编程实现从P1.0输出周期为500μs的方波。分析:方法同例6-1定时时间:方波周期为500μs,定时250μs。模式选择:定时器0可以选择模式0、1和2。模式2最大的定时时间为256μs,满足250μs的定时要求,选择模式2。6.2.4模式3的逻辑结构及应用(1)初值计算(256-X)×1µs=250µsX=6;则TH0=TL0=6(2)程序:采用中断处理方式的程序:C语言程序:#includere