基础介绍
单片机中有2个定时器/计数器,每个定时器/计数器由2个8位寄存器组成,以定时器/计数器T0为例,高8位寄存器为TH0,低8位寄存器为TL0;同理,定时器/计数器T1的高8位寄存器为TH1,低8位寄存器为TL1。 单片机的定时器/计数器其实就是加1计数器,当脉冲来的时候就往寄存器里加1,寄存器一共16位,加满了就会溢出,这时溢出标志位TF0/TF1就会为1,我们通过判断溢出标志位或者通过溢出引起中断就能实现想要的功能。如果这个脉冲是来自单片机自己的时钟脉冲,那么这就是一个定时器;如果这个脉冲来自外部(T0、T1脚),那么这就是计数器。 我们可以通过设置TMOD寄存器(定时器/计数器工作方式寄存器)和TCON寄存器(定时器/计数器控制寄存器)来启动定时器/计数器。 以下是这两个寄存器的详细介绍:定时器/计数器工作方式寄存器TMOD


定时器/计数器控制寄存器TCON


具体使用
下面我们就以一个例子来看看定时器的具体使用。 要实现的功能:一个晶振为12MHz的单片机P1.0脚接一个LED灯,控制其一秒钟闪烁一下。 硬件电路图:
#includesbit LED=P1^0; int a=0; void main() { TMOD=0x01;//使用定时器T0,高4位全为0,低4位GATE=0,C/T=0,采用工作方式1,M1=0,M1=1 TH0=0x3c;//装入初值,高8位装3C,低8位装AE TL0=0xae; TR0=1;//启动定时器0 while(1) { if(TF0==1)//判断定时器是否溢出 { TF0=0;//清除溢出标志位 TH0=0x3c;//重新装入初值 TL0=0xae; if(a==20)//因为要1秒闪烁一次,到这里计数器计了0.05s,需要20个0.05s才有1s { LED=~LED; a=0; }else{ a=++a; } } } }
本文版权归逸云蓝天所有,转载请注明出处并添加本文链接。