您好,欢迎访问三七文档
单片机原理与应用第七章定时/计数器在实时测量控制应用系统中,常需要定时控制以及对外界事件进行计数。要实现此功能可以采用定时时钟和计数器。80C51系列单片机内部一般有2~3个定时/计数器,它们都具有这两种功能,有的型号还具有输入捕获和监视定时功能。主要介绍定时/计数器的结构、原理、工作方式及使用方法。7.1定时/计数器T0、T180C51单片机内部有2个16位的可编程定时/计数器,T0,T1。不论哪种型号的单片机,T0、T1的结构,原理和工作方式都是相同的。可编程是指其功能(工作方式、定时时间、启动方式等),均可由指令来确定和改变。7.1.1T0、T1的结构虚线框内即为定时器T0、T1的结构图,它通过内部总线与CPU相接,另外由TCON寄存器引出2根中断源信号线送入CPUTH1TL1TH0TL0定时器T1(8DH)(8BH)70707070(8CH)(8AH)定时器T0内部总线TCON(88H)TMOD(89H)CPUT1(P3.5)T0(P3.4)INT0(P3.3)INT1(P3.2)溢出溢出中断工作方式启动工作方式启动由图可知,这些寄存器之间是通过内部总线和控制逻辑电路连接起来的。与定时器有关的8位寄存器一共6个,其中,16位定时/计数器分别由2个8位专用寄存器组成,即T0由TH0和TL0构成,T1由TH1和TL1构成。每个寄存器都可单独访问,这些寄存器用于存放定时或计数初值的。另外还有2个特殊功能寄存器:一个8位的定时器方式寄存器TMOD,一个8位的定时控制寄存器TCON。TMOD主要用于选定定时器的工作方式。TCON主要用于控制定时器的启动和停止。另外,还可以保存T0、T1的溢出和中断标志。当定时器工作在计数方式时,外部事件通过引脚T0(P3.4)和T1(P3.5)输入。7.1.2定时/计数器的原理16位的定时/计数器实质上是一个加1计数器,其控制电路受软件控制、切换。通过软件可以设置为4种工作方式,每种方式都可用作定时和计数。当选择作定时器用时,计数器的加1信号由振荡器的12分频(机器周期)信号产生,即每经过1个机器周期,计数器加1,直至计满溢出为止。显然,定时器的定时时间与系统的振荡频率有关。因为1个机器周期为12个振荡周期,所以计数频率fcount=fosc/12。如:若晶振频率为12MHz,则计数周期为:此即最短的定时周期,若要延长定时时间,则须改变定时器的初值,并要适当选择定时器的长度(8位、13位、16位)当选择作计数器用时,通过引脚T0和T1对外部信号计数。外部脉冲的下降沿将触发计数。计数器在每个机器周期的S5P2期间对引脚输入电平采样。如果在一个机器周期采样为1,下个机器周期采样值为0,则计数器加1,新的计数值装入计数器。即检测一个由1到0的跳变需要2个机器周期,所以对外部事件的最高计数频率为振荡频率的1/24.作定时器使用时,计数脉冲是由单片机内部产生的,这个信号的频率和幅值都是稳定的,而作为计数器使用时,计数脉冲是由外部信号源提供的,这个信号的频率和幅值是可随机变化的。当用软件给定时器设置了某种工作方式后,定时器会按设定的工作方式自动运行,不再占用CPU的操作时间,除非定时器计满溢出,才可能中断CPU当前操作。CPU也可随时重新设置定时器的工作方式,以改变对定时器的操作。可见,定时器是单片机中效率高且工作方式灵活的部件。7.2定时/计数器的控制方法综上,定时/计数器是一种可编程部件,它不会自动开始工作,必须通过软件确定其工作方式,并启动它才开始工作。所以在定时/计数器开始工作之前,CPU必须将一些命令(称为控制字)写入定时/计数器的特殊功能寄存器。将控制字写入定时/计数器的过程,称作定时/计数器的初始化。下面将详细介绍控制字的格式、各位的功能及控制定时/计数器的方法。7.2.1定时/计数器寄存器1.工作方式寄存器TMODTMOD为T0、T1的工作方式寄存器,其各位格式如下:高4位为定时器T1的控制位,低4位为定时器T0的控制位。GATE门控位:当GATE=0时,只要控制位TR1/0(在TCON寄存器中)置1,即可启动定时器T1/0开始工作。当GATE=1时,除需要将TR1/0置1外,还要将INT1*引脚设为高电平,才能启动相应的定时器开始工作。C/T*功能选择位=0,为定时器方式=1,为计数器方式M1和M0工作方式选择位由这两位的组合可以定义不同的工作方式,对T1有3种工作方式,T0有4种工作方式。注:TMOD不能进行位寻址,只能用字节传送指令设置定时器工作,低半字节定义定时器0,高半字节定义定时器1.复位时,所有位均为0.处于停止状态。M1M0工作方式功能描述00方式013位计数器01方式116位计数器10方式2自动再装入8位计数器11方式3定时器0:分成两个8位计数器定时器1:只能工作在方式0、1、22.定时/计数器控制寄存器TCONTCON的作用是控制定时器的启/停,标志定时器的溢出和中断情况。TCON各位格式如下:TF1(TCON.7)---定时器1的溢出标志当定时器1计满溢出时,由硬件使TF1置1,并且申请中断。进入中断服务程序后,由硬件自动清0,在查询方式下用软件清0.TR1(TCON.6)---定时器1的运行控制位当TR1=1时,启动定时器1工作当TR1=0时,关闭定时器1TF0(TCON.5)---定时器0的溢出标志位TR0(TCON.4)---定时器0的运行控制位IE1(TCON.3)---外部中断1请求标志IT1(TCON.2)---外部中断1触发方式选择位IE0(TCON.1)---外部中断0请求标志IT0(TCON.0)---外部中断0触发方式选择位当系统复位时,TCON所有位均被清0.方式字的应用:若设定T1为定时工作方式,按方式2进行工作,T0为计数工作方式,按方式1进行工作,则需对TMOD寄存器进行设置。MOVTMOD,#25H(汇编)或TMOD=0x25;(C语言,直接对TMOD赋值即可)说明:25H=00100101B,高4位对T1的设置,D6位为0说明是定时方式,D5、D4为10,即工作方式2(自动再装入方式)。低4位对T0的设置,D2位为1说明是计数方式,D1、D0为01,即工作方式1(16位计数器)。对TCON的操作:由于TCON是可以位寻址的,因而如果只是清除溢出标志或启动定时器工作,即可利用位操作方式。如:CLRTF0汇编,清除定时器0的溢出标志TF0=0(C语言,直接对TF0位进行赋值)如:SETBTR1汇编,启动定时器1开始工作TR1=1(C语言,TR1=0,停止)7.2.2定时/计数器的初始化与启动由于定时/计数器的功能是由软件编程确定的,所以在使用定时/计数器时都要对其进行初始化,使其按照设定的功能工作。初始化的步骤如下:1)确定工作方式—对TMOD进行赋值2)预置定时或计数的初始值—可直接将初始值写入TH0、TL0或TH1、TL1.3)根据需要开放定时/计数器的中断—直接对IE寄存器的定时器中断位进行赋值。初始化完成后,即可准备启动定时/计数器。启动方式由GATE位的值决定,为0,则直接设置TR1/0=1即可。为1,则还需要将INT0/1引脚设为高电平才可启动。7.2.3定时/计数器初值的确定方法由于不同方式下,计数器的位数不同,因而最大计数值也不同。确定计数初始值的方法:(设最大计数值为M)方式0:M=213=8192方式1:M=216=65536方式2:M=28=256方式3:定时器T0分成2个8位计数器,所以2个M值均为256.由于定时/计数器是“加1”计数,并在计满溢出时产生中断,故定时/计数器的初始值X可如下计算:X=M-计数值如:选用晶振频率为6MHz,要求产生1ms的定时,试计算其初始值。晶振为6MHz,则一个机器周期为12/6MHz=2us.此即执行一次加1操作所需要的时间。要定时1ms,则需要1ms/2us=500次加1操作。也即计数值为500.若工作在方式1下,初始值X=M-计数值=65536-500=65036=FE0CH。初始值为65036,再计数500次就到了65536,此时计数器计满溢出,一旦溢出,计数器的值就变为0,从头开始。此时正好产生1ms的定时时间。下一次若还定时1ms,则需重新赋初值。7.3定时器T0、T1的工作方式通过对TMOD寄存器中M1、M0位的设置,T0可以选择4种工作方式,T1可以选择3种工作方式。下面介绍各种工作方式的结构、特点7.3.1方式0定时器T0、T1都可以设置为方式0.在方式0下,定时器1与定时器0的结构和操作完全相同,均为13位的计数器。由于采用方式0计算初值比较麻烦且容易出错,故一般情况尽量避免采用此方法。7.3.2方式1都可设为方式1工作。在方式1下,定时器T0、T1均为16位的计数器。T0在方式1下的逻辑电路结构如下图。当TL0的低8位溢出时向TH0高8位进位,而TH0溢出时向中断标志位TF0进位(称为硬件置位),并申请中断。通过查询TF0是否置位或是否产生定时器T0中断,可判断定时器T0计数是否溢出。当C/T*=0时,多路开关连接振荡器的12分频器输出,T0对机器周期计数,这就是定时工作方式。其定时时间为:t=(216-T0初始值)×时钟周期×12当C/T*=1时,多路开关与引脚T0(P3.4)相连,外部计数脉冲由引脚T0输入。当外信号电平发生由1到0的跳变时(下降沿),计数器加1,这时T0成为外部事件计数器。C/T*决定了工作方式是定时还是计数!当GATE=0时,封锁或门,此时或门输出为1,使引脚INT0*(P3.2)输入信号无效。与门打开,此时由TR0控制定时器T0的开启和关断。若TR0=1,则接通控制开关,启动定时器0工作,允许T0在原计数值上作加法计数,直至溢出。溢出时,计数寄存器值为0,TF0置位,并申请中断,T0从0开始计数。因此,如果希望计数器按原计数值开始计数,则在计数溢出后,应给计数器重新赋初值。若TR0=0,则关断控制开关,停止计数。当GATE=1时,且TR0=1时,此时或门,与门全部打开。外信号电平通过INT0*引脚直接开启或关断定时器计数。输入1时,运行计数,否则停止计数。这种方法可用来测量外信号的脉冲宽度等。GATE位决定了T0的启动方式~~7.3.3方式2T0、T1都可工作在方式2.方式2设置定时器为能重置初值的8位定时/计数器。方式2的使用和方式0/1有所区别。方式0/1若用于循环重复定时/计数,则每次计满溢出后,寄存器全部为0,第二次计数还要重新装入计数初值。这样,在编程时麻烦,还会影响定时时间精度;而方式2具有自动恢复初值(初值自动再装入)功能,适合用作较精确的定时脉冲信号发生器。其定时时间为:t=(28-T0初始值)×时钟周期×12方式2的结构原理图由图可知,16位的计数器被拆分成2个,TL0用作8位计数器,TH0用以保持初值。在初始化时,TL0和TH0由软件赋予相同的初始值。一旦TL0计数溢出,则置位TF0,并将TH0的值再装入到TL0中,继续计数,重复循环。这种工作方式可省去用户重装初值的程序,并可产生相当精确的定时时间,特别适用于串行口波特率发生器。7.3.4方式3只有T0可以设置为方式3.在该方式下,T0被拆为2个独立的8位计数器TL0和TH0.其中,原T0的控制位、引脚和中断源即C/T*、GATE、TR0、TF0、T0(P3.4)引脚和INT0*(P3.2)引脚,均用于TL0的控制。除了仅用8位寄存器TL0外,其功能和操作方式与方式1完全相同,可定时,也可计数。而此时TH0只可用作简单的内部定时功能,它占用原定时器T1的控制位TR1和TF1,同时占用T1的中断源,其启动和关闭仅受TR1置1和清0控制。方式3为定时器T0增加了一个8位定时器。(2个)在T0用于方式3时,T1仍可设置为方式0~2.由于TR1、TF1和T1中断源均被定时器
本文标题:第7章定时计数器.
链接地址:https://www.777doc.com/doc-2111810 .html