您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第6章 定时器计数器
单片机技术与应用实践第6章定时器/计数器6.1定时器/计数器的基本概念6.2定时器/计数器的基本结构和工作原理6.3定时器/计数器的控制字6.4定时器/计数器的4种工作方式及应用6.5定时器/计数器的初始化6.6定时器/计数器的应用举例6.7实践训练单片机技术与应用实践6.1定时器/计数器的基本概念基本概念1.计数从选票的统计谈起:画“正”字,这就是计数。生活中计数的例子随处可见,如录音机上的计数器、家里用的电度表、汽车上的里程表等。再举一个工业生产中的例子,线缆行业在电线生产出来之后要计米,也就是测量长度,如何测量?用尺量?不现实,太长不说,还要一边做一边量,怎么办呢?行业中有一个很巧妙的方法,用一个周长是1m的轮子,将电缆绕在上面一周,由线带轮转,这样轮转一周就是线长1m,所以只要记下轮转了多少圈,就可以知道走过的线有多长了。2.计数器的容量从一个生活中的例子说起:水龙头下有一个水盆,水龙头没关紧,水一滴一滴地滴入盆中。水滴持续落下,盆的容量是有限的,过一段时间之后,水就会逐渐变满,录音机上的计数器最多计到999,那么单片机中的计数器有多大的容量呢?MCS-51单片机内部有两个计数器,分别称为T0和T1,这两个计数器分别由两个8位的RAM单元组成,即每个计数器都是16位的计数器,最大的计数量是65536。3.定时MCS-51单片机中的计数器除了能作为计数之用外,还能用作时钟。以定时器1为例,从图6-1可知,由单片机振荡信号经过12分频后获得一个脉冲信号,将该信号作为定时器的计数信号。单片机的振荡信号是一个由外接晶振构成的晶体振荡产生的,一个12MHz的晶振提供给计数器的脉冲频率是1MHz,每个脉冲的时间间隔是1µs。所以,这路信号可以认为是单片机的内部脉冲信号,此时T1作为定时器使用。另外一路是T1引脚,它是用来采样外部脉冲信号的,此时T1作为计数器使用。图6-1计数器的两个计数来源4.溢出来看水滴的例子,当水持续落下,盆中的水持续变多,最终有一滴水使得盆中的水满了。这时如果再有一滴水落下,就会发生什么现象?水会溢出来,用术语来讲就是“溢出”。单片机计数器的容量是16位,也就是说,最大的计数值为65536,因此计数计到65536时就会产生溢出。一旦产生溢出,单片机内部定时器控制寄存器TCON中的TF0/TF1变为“1”(下面将介绍TF0/TF1)。一旦TF0/TF1由0变成1,就是产生了变化,产生了变化就会引发事件,就像定时的时间一到,闹钟就会响一样。5.任意定时及计数的方法由上述内容可知,计数器的容量是16位,也就是说,最大的计数值为65536,因此计数计到65536就会产生溢出。当现实生活中有少于65536这个计数值的要求时,如包装线上,一打为12瓶,一瓶药片为100粒,怎样来满足这个要求呢?思考一下,如果是一个空的盆要1万滴水滴进去才会满,那么在开始滴水之前就先放入一勺水,还需要10000滴吗?所以采用预置数的方法,如果要计数100,就先放进65436,再来100个脉冲,不就到了65536了吗?定时也是如此,假如每个脉冲是1µs,则计满65536个脉冲需时65.536ms,但现在只要10ms就可以了,怎么办?10ms为10000µs,所以,只要在计数器里面放进55536就可以了。6.2.1定时器/计数器的结构由图6-2可知:①8051单片机内部有两个定时器/计数器T0和T1,其核心是计数器,基本功能是加1。②对外部事件脉冲(下降沿)计数,是计数器;对内部脉冲计数,是定时器。③计数器由两个8位计数器组成。6.2定时器/计数器的基本结构和工作原理图6-2MCS-51单片机定时器/计数器的基本结构6.2.2定时器/计数器的工作原理当定时器/计数器设置为定时工作方式时,计数器对内部机器周期计数,每过一个机器周期,计数器增1,直至计满溢出。定时器的定时时间与系统的振荡频率紧密相关,因MCS-51单片机的一个机器周期由12个振荡脉冲组成,所以,计数频率fC=1/12fOSC。如果单片机系统采用12MHz晶振,则计数周期为1µs,这是最短的定时周期,适当选择定时器的初值可获取各种定时时间。当定时器/计数器设置为计数工作方式时,计数器对来自输入引脚T0(P3.4)和T1(P3.5)的外部信号计数,外部脉冲的下降沿将触发计数。在每个机器周期的S5P2期间采样引脚输入电平,若前一个机器周期采样值为1,后一个机器周期采样值为0,则计数器加1。新的计数值是在检测到输入引脚电平发生1到0的负跳变后,在下一个机器周期的S3P1期间装入计数器中的。可见,检测一个由1到0的负跳变需要两个机器周期,所以,最高检测频率为振荡频率的1/24。计数器对外部输入信号的占空比没有特别的限制,但必须保证输入信号的高电平与低电平的持续时间在一个机器周期以上。当设置了定时器的工作方式并启动定时器工作后,定时器就按被设定的工作方式独立工作,不再占用CPU的操作时间,只有在计数器计满溢出时才可能中断CPU当前的操作。6.3.1定时器/计数器的方式寄存器TMODTMOD在特殊功能寄存器中,字节地址为89H,格式如图6-3所示。图5-2MCS-51单片机的中断系统结构6.3定时器/计数器的控制字从图6-3中可以看出,TMOD被分成两部分,每部分4位,分别用于控制T1和T0。其各位功能简述如下。(1)GATE位:门控位。GATE=1时,T0、T1是否计数要受到外部引脚输入电平的控制,INT0引脚控制T0,INT1引脚控制T1。其是可用于测量在INT0和INT1引脚出现的正脉冲的宽度。若GATE=0,即不使用门控功能,定时器/计数器的运行不受外部输入引脚INT0、INT1的控制。(2)C/T位:计数器模式和定时器模式的选择位。C/T=0时,为定时器模式,内部计数器对晶振脉冲12分频后的脉冲计数,该脉冲周期等于机器周期,所以可以理解为对机器周期进行计数。由于从计数值可以求得计数的时间,所以称为定时。C/T=1时,为计数器模式,计数器对外部输入引脚T0(P3.4)或T1(P3.5)的外部脉冲(负跳变)计数,允许的最高计数频率为晶振频率的1/24。(3)M1M0:4种工作方式的选择位。通过对M1M0的设置,可使定时器工作于4种工作方式之一,如表6-1所示。表6-1工作方式选择表6.4定时器/计数器的4种工作方式及应用6.4.1工作方式0图6-5所示是工作方式0的逻辑电路结构。当M1M0设置为00时,定时器选定为方式0工作。在这种方式下,16位寄存器只用了13位,TL0的高3位未用。由TH0的8位和TL0的低5位组成一个13位计数器。当GATE=0时,只要TCON中的TR0为1,TL0及TH0组的引脚为1才能使计数器工作。由此可知,当GATE=1和TR0=1时,TH0+TL0是否计数取决于INT0引脚的信号,当INT0由0变为1时,开始计数;当INT0由1变为0时,停止计数。这样就可以用来测量在INT0端出现的脉冲宽度。当13位计数器从0或设定的初值,加1直到全“1”以后,再加1就产生溢出,这时,置TCON的TF0位为1,系统把计数器变为全“0”。若要继续进行定时或计数,则要用指令对TL1/TL0和TH1/TH0重置数,否则下一次计数从0开始。图6-5工作方式0的逻辑电路结构1316图6-6中断嵌套流程6.4.2工作方式1图6-6所示是工作方式1的逻辑电路结构。方式1和方式0的工作原理相同,唯一的差别是两者的计数位数不同,工作方式0的最大计数值为M=2=8192,工作方式1的TH0和TL0组成一个16位计数器,最大计数值为M=2=65536。6.4.3工作方式2图6-7所示是工作方式2的逻辑电路结构。方式2把TL0配置成一个可以自动恢复初值(初始常数自动重新装入)的8位计数器,TH0作为常数缓冲器,由软件预置值。当TL0产生溢出时,一方面使溢出标志TF0置1,同时把TH0中的8位数据重新装入TL0中。此动作是由硬件自动完成的,不需要软件,这不同于方式0和方式1。图6-7工作方式2的逻辑电路结构6.4.4工作方式3图6-8所示是工作方式3的逻辑电路结构。在这种工作方式下T0被拆成两个独立的定时器/计数器来用。其中,TL0可以构成8位的定时器或计数器的工作方式,并使用T0的控制位、TF0的中断源。而TH0则只能作为定时器来用,使用T1中的TR1、TF1的中断源。需要注意的是,方式3是将T0拆成两个独立的8位定时器/计数器来用,而不是T1,如果把T1置于方式3,T1将处于关闭状态。一般情况下,T0以工作方式3状态运行,仅在T1工作于方式2而且不要求中断的前提下才可以使用,此时T1可被用作串行口波特率发生器。因此,方式3特别适合于单片机需要1个独立的定时器/计数器、1个定时器及1个串行口波特率发生器的情况。图6-8工作方式3的逻辑电路结构6.5定时器/计数器的初始化6.5.1定时器/计数器的初始化步骤由于定时器/计数器的功能是由软件编程确定的,所以一般在使用定时器/计数器前都要对其进行初始化,使其按设定的功能工作。初始化的步骤一般如下。(1)确定工作方式(即对TMOD赋值)。(2)预置定时或计数的初值(可直接将初值写入TH0、TL0或TH1、TL1)。(3)根据需要开放定时器/计数器的中断(直接对IE位赋值)以及给中断优先级寄存器IP选送中断优先级字,以开放相应中断和设定中断优先级。(4)启动定时器/计数器。若已规定用软件启动,则可把TR0或TR1置1;若已规定由外部中断引脚电平启动,则需给外部引脚加启动电平。当实现了启动要求后,定时器即按规定的工作方式和初值开始计数或定时。6.5.2定时器/计数器的定时/计数范围和预置数的计算方法1.计数器初值的计算把计数器从初值开始作加1计数到计满溢出所需要的计数值设定为C,计数初值设定为D,由此便可得到以下的计算通式:D=M-C(6-1)式中,M为计数器模值,该值和计数器工作方式有关,在方式0时M为213,在方式1时M为216,在方式2和方式3时M为28。2.定时器初值的计算在定时器模式下,计数器由单片机脉冲经12分频后计数。因此,定时器定时时间T的计算公式为:T=(TM-TC)12/fOSCµs(6-2)式中,TM为计数器从初值开始作加1计数到计满溢出所需要的时间,TM为模值,与定时器的工作方式有关;fOSC是单片机晶体振荡器的频率;TC为定时器的定时初值。在式(6-2)中,若设TC=0,则定时器定时时间为最大(初值为0,计数从全0到全1,溢出后又为全0)。由于M的值和定时器工作方式有关,因此不同工作方式下定时器的最大定时时间也不一样。【例6-1】设T0在方式0下工作,定时时间为1ms,时钟振荡频率为6MHz。计算预置数。解:将数据代入公式(6-2)得:(213-TC)12/6µs=1ms=1000µsTC=213-500=7692=1E0CH=1111000001100B因为TL1的高3位没用,对计算出的TC要进行修正,即在低5位前插入3个0,修正后的定时初值X=1111000000001100B=F00CH。可用下列指令实现。MOVTL0,#0CH;5位送TL0寄存器MOVTH0,#0F0H;8位送TH0寄存器13【例6-2】若单片机时钟频率fOSC为12MHz,请计算定时2ms所需的定时器初值。解:由于定时器工作在方式2和方式3下时的最大定时时间只有0.256ms,要定时2ms,则要用到循环程序,因此用方式0或方式1较方便。若采用方式0,则根据式(6-2)可得定时器初值为:TC=213-2ms/1µs=6129利用计算机附件中的计算器可将6129转换为十六进制数为1830H。注意:这不是定时器工作在方式0时的初值,因定时器工作在方式0时是13位,高字节8位,低字节5位,所以还要进行适当的变换,修正后为C110H。即:TH0应预置C1H,TL0应预置10H(高3位为0)。若采取方式1,则有:TC=216-2ms/1µs=63536=F830H即:TH0应预置F8H,TL0应预置30H。【例6-3】设T1作定时器用,以方式1工作,定
本文标题:第6章 定时器计数器
链接地址:https://www.777doc.com/doc-3375315 .html