首页 百科知识 定时计数器

定时计数器

时间:2022-10-27 百科知识 版权反馈
【摘要】:51系列单片机片内有两个16位的定时/计数器:定时器T0和定时器T1.定时器T0由寄存器TH0、TL1组成,定时器T1由寄存器TH1、TL1组成,它们均为8位寄存器.图2-4是定时器T0的内部结构和控制信号图,定时器T1与T0一样.2.定时/计数器实际上是16位加1计数器.T0由2个8位特殊功能寄存器TH0和TL0构成,T1由2个8位特殊功能寄存器TH1和TL1构成.对于一些增强型的单片机中,增加

三、定时/计数器

(一)定时/计数器的结构和工作方式

51系列单片机片内有两个16位的定时/计数器:定时器T0和定时器T1.定时器T0由寄存器TH0、TL1组成,定时器T1由寄存器TH1、TL1组成,它们均为8位寄存器.图2-4是定时器T0的内部结构和控制信号图,定时器T1与T0一样.

T0和T1的具体功能如下:

1.两个定时器都有定时或事件计数的功能,由软件选择是定时工作方式还是计数工作方式.

2.定时/计数器实际上是16位加1计数器.T0由2个8位特殊功能寄存器TH0和TL0构成,T1由2个8位特殊功能寄存器TH1和TL1构成.

3.T0和T1受控制寄存器TMOD和TCON控制.

对于一些增强型的单片机中,增加了定时器2(T2).T2除了具有T1,T0的计数功能外,还有16位自动重装载功能,可工作于捕获方式和加、减计数方式.定时器的两种工作方式实际上都是对脉冲计数,只不过所计脉冲的来源不同.

img28

图2-4 定时器T0的内部结构和控制信号

(1)定时方式.当C/img29=0时,开关S打向上部,计数器TH0、TL0的计数脉冲来自振荡器的12分频后的脉冲(即fosc/12),实际是对系统的机器周期计数.当开关K受控闭合时,每过一个机器周期,计数器TH0,TL0加1;当计数至预设的个数,TH0,TL0重新置零,同时定时/计数器溢出中断标志位TF0(或TF1)置位,产生溢出中断.例如,机器周期为2μs,如计满了3个机器周期溢出则定时了6μs,中断标志位TF0(或TF1)被置位,如果允许中断,将产生溢出中断.

(2)计数方式.当C/img30=1时,开关S打向下部,计数器T0,T1的计数脉冲分别来自于引脚T0(P3.4)或引脚T1(P3.5)的外部脉冲.当开关K受控闭合时,计数器对此外部脉冲的下降沿进行加1计数,直至计满预定值回零,定时/计数器中断标志位TF0(或TF1)置位,产生溢出中断.由于检测一个由“1”到“0”的跳变需两个机器周期,前一个机器周期测出“1”,后一个机器周期测出“0”,故计数脉冲的最高频率不得超过fosc/24,而对于外部脉冲的占空比则无特殊要求.

当软件设定了工作方式,定时/计数器启动以后就按规定的方式工作,不占用CPU的操作时间.此时CPU可执行其他程序,除非定时/计数器溢出,才可能中断CPU执行的程序.这种工作的方式如同人类所设的闹钟一样,人在工作或睡觉的时候,闹钟仍然继续运行,到了设定时间,就会响.

(二)定时/计数器的寄存器

1.T/C0和T/C1的寄存器.

定时/计数器0和定时/计数器1是所有51系列单片机都具有的功能,对它们的控制是通过控制寄存器TCON和模式寄存器TMOD来实现.

(1)定时/计数器模式寄存器TMOD.定时/计数器模式寄存器TMOD主要用来设置定时/计数器的工作模式,它的地址是89H,不能进行位寻址,只能用字节传送指令设置定时器工作方式.复位时,TMOD所有位均为0.每一位的定义见表2-7,高四位与定时/计数器1有关,低四位与定时/计数器0有关.

表2-7 定时/计数器模式寄存器TMOD

img31

GATE:定时操作开关控制位,当GATE=1时,INT0或INT1引脚为高电平,同时TCON中的TR0或TR1控制位为1时,定时/计数器0或1才开始工作.若GATE=0,则只要将TR0或TR1控制位设为1,计时/计数器0或1就开始工作.

C/img32:定时或计数功能的选择位,C/img33=1为计数器,通过外部引脚T0或T1输入计数脉冲.C/img34=0时为定时器,由内部系统时钟提供计时工作脉冲.

M1和M0:分别是模式选择位的高位和低位,通过它们对定时/计数器的工作模式进行设置,见表2-8.

表2-8 定时/计数器的工作模式设置

img35

(2)定时/计数器控制寄存器TCON.定时/计数器控制寄存器TCON的地址是88H,该寄存器可位寻址.它除了用作定时/计数器控制寄存器之外,还有几位与中断有关,我们在前面已有介绍,其中每一位的定义见表2-9.

表2-9 定时/计数器的控制寄存器TCON

img36

2.T/C2的寄存器.

与T/C2相关的寄存器有控制寄存器T2CON和模式寄存器T2MOD.

(1)定时/计数器2控制寄存器T2CON.控制寄存器T2CON用来对定时/计数器2进行设置.T2CON的地址为0C8H,可位寻址,复位值是0000 0000B,寄存器每一位的定义见表2-10.

表2-10 定时/计数器2的控制寄存器T2CON的定义

img37

续 表

img38

定时/计数器2既可以作为定时器,又可以作为事件计数器.其工作方式由特殊寄存器T2CON中的C/T2位选择.定时/计数器2有三种工作方式:捕获方式,自动重装载(向上或向下计数)方式和波特率发生器方式,工作方式由T2CON的控制位RCLK,TCLK,CP/RL2,TR2来选择,参见表2-11.

表2-11 定时/计数器2的工作方式设置

img39

(2)定时/计数器2模式寄存器T2MOD.当定时器2工作于16位自动重载模式,可对其编程实现向上或向下计数.这一功能可以通过定时/计数器2模式寄存器T2MOD(见表2-12)中的DCEN(向下计数允许位)来实现.T2MOD的地址是0C9H,不可位寻址.

表2-12 定时/计数器2模式寄存器T2MOD

img40

(三)定时/计数器的工作方式

1.方式0.

方式0是13位计数结构的工作方式,其计数器由TH0全部和TL0的低5位构成.当TL0的低5位计数溢出时,向TH0进位,而全部13位计数溢出时,则向计数溢出标志位TF0进位.

在方式0下,当为计数工作方式时,计数值的范围是:0~8191(213);当为定时工作方式时,定时时间的计算公式为:

(213-计数初值)×晶振周期×12

或(213-计数初值)×机器周期

其时间单位与晶振周期或机器周期相同.

2.方式1.

方式1是16位计数结构的工作方式,计数器由TH0和TL0全部位构成.与工作方式0基本相同,区别仅在于工作方式1为16位计数器,比工作方式0有更宽的定时/计数范围.

当为计数工作方式时,计数值的范围是:

0~65535(216

当为定时工作方式时,定时时间计算公式为:

(216-计数初值)×晶振周期×12

或(216-计数初值)×机器周期

3.方式2.

8位自动装入时间常数方式.由TLl构成8位计数器,THl仅用来存放时间常数.启动T1前,TLl和THl装入相同的时间常数,当TL1计满后,除定时器清零,标志TFl置位并向CPU请求中断,THl中的时间常数还会自动地装入TLl,并重新开始定时或计数.所以,工作方式2是一种自动装入时间常数的8位计数器方式.由于这种方式不需要指令重装时间常数,因而操作方便,在允许的条件下,应尽量使用这种工作方式.当然,这种方式的定时/计数范围要小于方式0和方式1.

当计数溢出后,不是像前两种工作方式那样通过软件方法,而是由预置寄存器TH0或TH1以硬件方法自动给计数器TL0或TL1重新加载,即变软件加载为硬件加载.

初始化时,8位计数初值同时装入TL0和TH0中.当TL0计数溢出时,置位TF0,同时把保存在预置寄存器TH0中的计数初值自动加载TL0,然后TL0重新计数.如此重复不止.这不但省去了用户程序中的重装指令,而且也有利于提高定时精度.但这种工作方式下是8位计数结构,计数值有限,最大只能到255.

这种自动重新加载工作方式非常适用于循环定时或循环计数应用中,例如用于产生固定脉宽的脉冲,此外还可以作串行数据通信的波特率发送器使用.

4.方式3.

2个8位方式.方式3只适用于定时器0.如果使定时器1为工作方式3,则定时器1将处于关闭状态.

当T0为工作方式3时,TH0和TL0分成2个独立的8位计数器.其中,TL0既可用作定时器,又可用作计数器,并使用原T0的所有控制位及其定时器回零标志和中断源.TH0只能用作定时器,并使用T1的控制位TRl、回零标志TFl和中断源.

通常情况下,T0不运行于工作方式3,只有在T1处于工作方式2,并不要求中断的条件下才可能使用.这时,T1往往用作串行口波特率发生器,TH0用作定时器,TL0作为定时器或计数器.所以,方式3是为了使单片机有1个独立的定时器/计数器、1个定时器以及1个串行口波特率发生器的应用场合而特地提供的.这时,可把定时器l用于工作方式2,把定时器0用于工作方式3.

(四)定时/计数器的程序设计

由于定时器/计数器的功能是由软件编程确定的,所以一般在使用定时/计数器前都要对其进行初始化,使其按设定的功能工作.初始化的步骤一般如下:

1.确定工作方式(即对TMOD赋值);

2.预置定时或计数的初值(可直接将初值写入TH0、TL0或TH1、TL1);

3.根据需要开放定时器/计数器的中断(直接对IE位赋值);

4.启动定时器/计数器(若已规定用软件启动,则可把TR0或TR1置“1”;若已规定由外中断引脚电平启动,则需给外引脚加启动电平.当实现了启动要求后,定时器即按规定的工作方式和初值开始计数或定时).

因为在不同工作方式下计数器位数不同,因而最大计数值也不同.现假设最大计数值为M,那么各方式下的最大值M值如下:

方式0:M=213=8 192

方式1:M=216=65 536

方式2:M=28=256

方式3:定时器0分成两个8位计数器,所以两个M均为256.

因为定时器/计数器是作“加1”计数,并在计数满溢出时产生中断,因此初值X可以这样计算:X=M-计数值

【例2-5】在XTAL频率是12MHz的标准8051器件上,用Timer1产生10kHz定时器滴答中断.

分析:利用T1来产生10kHz的滴答中断,也就是产生周期为100μs的滴答中断.因为时钟频率为12MHz,采用方式2,先计算计数初值:

机器周期  MC=12/fosc=12/12=1μs;

应计脉冲个数100μs/1μs=100

程序如下:

img41

img42

【例2-6】如图2-6所示,在P1.7端接有一个发光二极管,要求利用定时/计数器控制,使LED亮1S,灭1S,周而复始.

分析:题目要求定时1S,定时器的3种工作方式都不能满足.对于较长时间的定时,应采用复合定时的方法.这里使定时/计数器0工作在定时器方式1,定时100mS,定时时间到后P1.0反相,即P1.0端输出周期200mS和方波脉冲.另设定时/计数器1工作在计数器方式2,对T1输入的脉冲计数,当计数满5次时,定时1S时间到,将P1.7端反相,改变灯的状态.采用6MHz晶振,方式1的最大定时才能达到100多mS.对于100mS,机器周期2μS需要的计数次数=100×103/2=50 000,即初值为65 536-50 000.方式2满5次溢出中断,初值为256-5.

img43

图2-5 例2-6原理图

程序如下:

img44

img45

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈