您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 单片机第6章 定时器计数器
第6章MCS-51单片机定时器/计数器目录6.1MCS-51定时器/计数器的结构及原理6.2定时器T0、T16.3定时器T26.4定时器应用举例本章讨论MCS-51单片机定时器/计数器的结构和工作原理,内容主要有MCS-51单片机定时器T0、T1、T2的内部构造,工作方式和工作模式的选择和应用。本章是单片机的主要内容,也是第七章学习的前提。6.1MCS-51单片机定时器/计数器的结构及工作原理主要内容6.1.1MCS-51单片机定时器的内部结构6.1.2MCS-51单片机定时器的工作原理6.1.3定时器/计数器内部的特殊寄存器6.1.1MCS-51单片机定时器的内部结构89C52单片机内部的定时器/计数器逻辑结构如下图所示:CPU中断溢出溢出溢出定时器0定时器1定时器2TMODT2CONT2MODTCONTH0TL0TH1TL1TH2TL2RCAP2LRCAP2H模式模式T2(P1.0)T1(P3.5)T2EX(P1.1)T0(P3.4)模式控制控制控制中断重装捕获从图上可以看出,MCS-51主要有8部分构成:①三个16位的可编程定时器/计数器:定时器/计数器T0、T1和T2。②每个定时器均有两部分构成:THx和TLx③特殊功能寄存器T2MOD和T2CON主要对T2进行控制。④特殊功能寄存器TMOD和TCON主要对T0和T1进行控制。⑤引脚P3.5、P3.4、P1.0输入计数脉冲。⑥定时器T0、T1和T2是3个中断源,可以向CPU发出中断请求。⑦定时器/计数器T2增加了两个8位的寄存器:RCAP2H和RCAP2L。⑧特殊功能寄存器之间通过内部总线和控制逻辑电路连接起来。定时器功能•每个定时器都可由软件设置为定时工作方式或计数工作方式或其他灵活多样的可控功能方式。这些功能由特殊功能寄存器TMOD和TCON所控制。•定时器工作不占用CPU时间,除非定时器/计数器溢出,才能中断CPU的当前操作。•每个定时器/计数器还有四种工作模式。其中模式0-2对T0和T1是一样的,模式3对两者不同。定时工作方式定时器计数89C51片内振荡器输出经12分频后的脉冲,即每个机器周期使定时器(T0或T1)的数值加1直至计满溢出。当89C51采用12MHz晶振时,一个机器周期为1μs,计数频率为1MHz。计数工作方式•通过引脚T0(P3.4)和T1(P3.5)对外部脉冲信号计数。当输入脉冲信号产生由1至0的下降沿时定时器的值加1。•CPU检测一个1至0的跳变需要两个机器周期,故最高计数频率为振荡频率的1/24。•为了确保某个电平在变化之前被采样一次,要求电平保持时间至少是一个完整的机器周期。1、T0、T1的方式寄存器TMOD复位后,TMOD=00H,不可位寻址。其格式如图6-3所示:TMOD(89H)D7D6D5D4D3D2D1D0GATEC/TM1M0GATEC/TM1M0图6-3定时器方式寄存器TMODGATE——门控位。GATE=1时,由外部中断引脚INT0、INT1和TR0、TR1共同来启动定时器。当INT0引脚为高电平时,TR0置位,启动定时器T0。当INT1引脚为高电平时,TR1置位,启动定时器T1。GATE=0时,仅由TR0和TR1置位来启动定时器T0和T1。C/T——定时或计数方式选择位。C/T=0时,选择定时功能。C/T=1时,选择计数方式。通过引脚T0(P3.4)和T1(P3.5)、T2(P1.0)对外部信号进行计数。在每个机器周期的S5P2期间,CPU采样引脚的输入电平。若前一机器周期采样值为1,下一机器周期采样值为0,则计数器增1,此后的机器周期S3P1期间,新的计数值装入计数器。M1、M0——工作模式选择位。由于有M1和M0两位,可以有四种工作方式。T0有4种工作模式,T1有3种工作模式。选择情况如表6-1所示。定时器/计数器T1不能工作在模式3。设置T1的M1M0=11,T1将停止工作。表6-1定时器/计数器的工作模式M1M0工作模式功能介绍00模式013位定时器/计数器01模式116位定时器/计数器10模式28位自动重置定时器/计数器11模式3定时器0:TL0可8位定时器/计数器,TH0为8位定时器。定时器1:不工作。图6-6TMOD各位定义及具体的意义2、T0、T1的控制寄存器TCON此寄存器可以位寻址和字节寻址。TCON(88H)D7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0图6-3定时器的控制寄存器TR1(TCON.6)—T1运行控制位。TimerRun可通过软件置1(TR1=1)或清0(TR1=0)来启动或关闭T1。在程序中用指令“SETBTR1”使TR1位置1,定时器T1便开始计数。CLRTR1TR0(TCON.4)—T0运行控制位。其功能和操作情况同TR1。GATE=0时,用软件使TR1置1启动定时器1,若用软件使TR1清0,则停止定时器1。GATE=1时,用软件TR1置1,如果检测到引脚INT1(P3.3)输入高电平时启动定时器1。6.2定时器T0、T1主要内容6.2.1定时器T0、T1模式0下的结构6.2.2定时器T0、T1模式1下的结构6.2.3定时器T0、T1模式2下的结构6.2.4定时器T0、T1模式3下的结构6.2.1定时器/计数器T0、T1的模式0当TMOD中的M1=0、M0=0时,选定模式0。模式0时的结构如图6-5所示。计数寄存器由13位组成。TH0高八位和TL0的低5位构成。TL0的高3位未用。振荡器12分频T0(P3.4)TR0TL0(5位)TH0(8位)TF0GATE+&C/T=0C/T=1P3.2中断图6-5模式0的逻辑结构图C/T=1,工作于计数方式。计数脉冲由P3.4引脚输入。C/T=0时工作于定时方式。计数脉冲为内部脉冲,其周期是一个机器周期。计数时,TL0的低5位溢出后向TH0进位,THx0溢出后将TFx置位,并向CPU申请中断。做定时器时,其定时时间的计算公式如下:定时时间为:t=(213-T0初值)×振荡周期×12最大定时时间为:213×振荡周期×12•计数初值为:•T0初值=213-t×振荡频率/126.2.2定时器/计数器T0、T1的模式1当TMOD中的M1=0、M0=1时,选择模式1。模式1时的结构如图下图所示。计数寄存器由16位组成。TH0的8位和TL0的8位构成。C/T=1,工作于计数方式,C/T=0时工作于定时方式。TH0用于存放计数初值的高8位,TL0用于存放计数初值的低8位。当TL0计数到最大值0FFH时,清0并使TH0加1;当TH0到最大值0FFH时,再次加1,溢出使TF0=1,引起溢出中断。定时时间为:t=(216-T0初值)×振荡周期×12,T0初值=216-t×振荡频率/12振荡器12分频TL0(8位)TH0(8位)TF0+&T0(P3.4)TR0P3.2GATEC/T=0C/T=1中断6.2.3定时器/计数器T0、T1的模式2当TMOD中的M1=1、M0=0时,选定模式2。模式2时的结构如图6-7所示。TL0作8位的定时器/计数器用,TH0作8位的初值寄存器用,用于保存初值。当TL0定时、计数到最大值0FFH时,再次加1使TF0置1,引起定时器中断,同时TH0的初值送到寄存器TL0中。模式2时,定时/计数初值能够自动重装。振荡器12分频T0(P3.4)TR0TF0中断GATE+&C/T=0C/T=1TL0(8位)TH0(8位)P3.2图6-7模式2的逻辑结构图二、模式2工作特点•该模式把TL0(TL1)配置成一个可以自动重装载的8位定时器/计数器。•在程序初始化时,TL0和TH0由软件赋予相同的初值。•用于定时工作方式时,定时时间为:t=(28-TH0初值)×振荡周期×12•用于计数工作方式时,计数长度最大为:28=256(个外部脉冲)•该模式可省去软件中重装常数的语句,并可产生相当精确的定时时间,适合于作串行口波特率发生器。6.2.4定时器/计数器T0的模式3TMOD中的M1=l、M0=1时,选定模式3模式3的T0:其中的TL0为一个独立的8位定时器/计数器,TH0为另一个独立的8位定时器。T0模式3下T0、T1逻辑结构如图6-8所示:T0中的TL0:占用T0的所有控制位。例如T0的GATE、运行控制位TR0、脉冲输入引脚(P3.4)、计数溢出标志位TF0和中断矢量(地址为000BH)等。T0中的TH0:占用T1的控制位,包括运行控制位TR1计数溢出标志位TF1和中断矢量(地址为001BH)等。振荡器12分频TR1振荡器12分频T0(P3.4)TR0TF0GATE+&C/T=0C/T=1TL0(8位)TF1TH0(8位)P3.2中断中断图6-8模式3下T0的逻辑结构6.2.4定时器/计数器T0的模式3T0方式3时的T1:T1可以选择方式0、1或2。T1的结构如下图所示,此时计数溢出标志位TF1及T1中断矢量(地址为001BH)已被TH0所占用,所以T1仅能作为波特率发生器或其它不用中断的地方。T1串行口波特率发生器时,其计数溢出直接送至串行口。只需设置好工作方式,串行口波特率发生器自动开始运行。如果要停止T1,只需编程将TMOD中T1的M1、M0位设置为1、1即可。串行口串行口重新装入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位)串行口串行口重新装入C/T=0C/T=1C/T=0C/T=1C/T=1C/T=0T1(P3.5)T1(P3.5)T1(P3.5)(b)T1方式1(a)T1方式0TH1(8位)TL1(5位)振荡器12分频振荡器12分频振荡器12分频串行口TH1(8位)TL1(8位)TL1(8位)TH1(8位)(c)T1方式2T0模式3时T1的结构6.2.4定时器/计数器T0的模式3例6-1设单片机的振荡频率为12MHz,用定时器/计数器0的模式1编程,在P1.0引脚产生一个周期为1000µs的方波,定时器T0采用中断的处理方式。分析:定时器的设置一般有如下方面内容。工作方式选择。当需要产生波形信号时,往往使用定时器/计数器的定时功能,定时时间到了对输出端进行相应的处理即可。工作模式选择,根据定时时间长短选择工作模式。定时时间长短依次为模式1>模式0>模式2。如果产生周期性信号,首选模式2,不用重装初值。6.2.4定时器/计数器T0的模式3定时时间计算:周期为1000µs的方波要求定时器的定时时间为500µs,每次溢出时,将P1.0引脚电平的状态取反,就可以在P1.0上产生所需要的方波。定时初值计算:振荡频率为12MHz,则机器周期为1µs,设计数初值为X,则(65536-X)×1µs=500µs得X=65036=0FE0CH定时器的初值为:TH0=0FEH,TL0=0CHC语言程序:#includereg52.h//包含特殊功能寄存器库sbitP1_0=P1^0;//进行位定义voidmain(){TMOD=0x01;//T0做定时器,工作在模式1TL0=0x0c;TH0=0xfe;//设置定时器的初值ET0=1;//允许T0中断EA=1;//允许CPU中断TR0=1;//启动定时器while(1);//等待中断}voidtime0_int(void)interrupt1{//中断服务程序TL0=0x0c;TH0=0xfe;//定时器重赋初值P1_0=~P1_0;//P1.0取反,输出方波}汇编语言程序:ORG0000HSJMPMAINORG000BHLJMPTIME0MAIN:MOVTMOD,#01H;T0定时,模式1MOVTL0,#0CH;置定时初值MOVTH0,#0FEHSETBET0;定时器T0开中断SETBEA;CPU开中断SETBTR0;启动定时器T0SJMP$;等待定时器溢出TIME0:MOVTL0,#0CH;中断服务程序MOVTH0
本文标题:单片机第6章 定时器计数器
链接地址:https://www.777doc.com/doc-4252550 .html