1定时器/计数器的结构与功能
主要介绍定时器0(T0)和定时器1(T1)的结构与功能。图6.1是定时器/计数器的结构框图。由图可知,定时器/计数器由定时器0、定时器1、定时器方式寄存器TMOD和定时器控制寄存器TCON组成。
定时器0,定时器1是16位加法计数器,分别由两个8位专用寄存器组成:定时器0由TH0和TL0组成,定时器1由TH1和TL1组成。
图6.1定时器/计数器结构框图 |
TL0、TL1、TH0、TH1的访问地址依次为8AH~8DH,每个寄存器均可单独访问。定时器0或定时器1用作计数器时,对芯片引脚T0(P3.4)或T1(P3.5)上输入的脉冲计数,每输入一个脉冲,加法计数器加1;其用作定时器时,对内部机器周期脉冲计数,由于机器周期是定值,故计数值确定时,时间也随之确定。
TMOD、TCON与定时器0、定时器1间通过内部总线及逻辑电路连接,TMOD用于设置定时器的工作方式,TCON用于控制定时器的启动与停止。
6. 1.1计数功能
计数方式时,T的功能是计来自T0(P3.4)T1(P3.5)的外部脉冲信号的个数。
输入脉冲由1变0的下降沿时,计数器的值增加1直到回零产生溢出中断,表示计数已达预期个数。外部输入信号的下降沿将触发计数,识别一个从“1”到“0”的跳变需2个机器周期,所以,对外部输入信号最高的计数速率是晶振频率的1/24。若晶振频率为6MHz,则计数脉冲频率应低于1/4MHz。当计数器满后,再来一个计数脉冲,计数器全部回0,这就是溢出。
脉冲的计数长度与计数器预先装入的初值有关。初值越大,计数长度越小;初值越小,计数长度越大。最大计数长度为65536(216)个脉冲(初值为0)。
6.1.2定时方式
定时方式时,T记录单片机内部振荡器输出的脉冲(机器周期信号)个数。
每一个机器周期使T0或T1的计数器增加1,直至计满回零自动产生溢出中断请求。
定时器的定时时间不仅与定时器的初值有关,而且还与系统的时钟频率有关。在机器周期一定的情况下,初值越大,定时时间越短;初值越小,定时时间越长。最长的定时时间为65536(216)个机器周期(初值为0)。
6.2定时器/计数器控制寄存器
与对定时器/计数器有关的控制寄存器共有4个:TMOD、TCON、IE、IP。IE、IP已在中断一节中介绍,这里不再赘述。
6.2.1定时器/计数器控制寄存器TCON
特殊功能寄存器TCON用于控制定时器的操作及对定时器中断的控制。其各位定义格式如下。其中D0~D3位与外部中断有关,已在中断系统一节中介绍。
TF0和TF1:定时器/计数器溢出标志位。当定时器/计数器0(或定时器/计数器1)溢出时,由硬件自动使TF0(或TF1)置1,并向CPU申请中断。CPU响应中断后,自动对TF1清零。TF1也可以用软件清零。
TR0和TR1:定时器/计数起运行控制位。
TR0(或TR1)=0,停止定时器/计数器0(或定时器/计数器1)工作。
TR0(或TR1)=1,启动定时器/计数器0(或定时器/计数器1)工作。
可由软件置1(或清0)来启动(或关闭)定时器/计数器,使定时器/计数器开始计数。用指令SETB (或CLR)使运行控制位置1(或清0)。
6.2.2工作方式寄存器TMOD
TMOD用于控制定时器/计数器的工作方式。字节地址为89H,不可位寻址,只能用字节设置其内容。其格式如下:
定时器/计数器1 | 定时器/计数器0 | |||||||
位序 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
位标志 | GATE | C/ | M1 | M0 | GATE | C/ | M1 | M0 |
其中,低4位用于T0,高4位用于T1的。
GATE:门控位。
GATE=0,只要用软件使TR0(或TR1)置1就能启动定时器/计数器0(或定时器/计数器1);
GATE=1,只有在(或)引脚为高电平的情况下,且由软件使TR0(或TR1)置1时,才能启动定时器/计数器0(或定时器/计数器1)工作。
不管GATE处于什么状态,只要TR0(或TR1)=0定时器/计数器便停止工作。
C/ :定时器/计数器工作方式选择位。
C/ =0,为定时工作方式;
C/ =1,为计数工作方式。
M0、M1:工作方式选择位,确定4种工作方式。如表6.1所示。
表6.1 定时器/计数器工作方式选择
M1 | M0 | 工作方式 | 功能说明 |
0 | 0 | 1 | 13位计数器 |
0 | 1 | 2 | 16位计数器 |
1 | 0 | 3 | 自动再装入8位计数器 |
1 | 1 | 4 | 定时器0:分成两个8位计数器定时器1:停止计数 |
【例6.1】设置定时器1工作于方式1,定时工作方式与外部中断无关,则M1=0,M0=1,GATE=0,因此,高4位应为0001;定时器0未用,低4位可随意置数,但低两位不可为11(因方式3时,定时器1停止计数),一般将其设为0000。因此,指令形式为:
MOVTMOD,#10H