定时计数器
什么是定时/计数器以及用处
51单片机有2个16位定时器/计数器:定时器0(T0为P3.4)和定时器1(T1为P3.5)
这里所说的16位是指定时/计数器内部分别有16位计数寄存器。
当工作再定时模式时,每经过一个机器周期,寄存器的值就会加1,当这个寄存器装满时就会溢出。我们可以计算工作再定时模式时最高单次定时时间为65535*1.085 us= 时间(单位us)
当工作再计数器模式时,T0(P3.4引脚),T1(P3.5引脚)每来一个脉冲,计数器加1.
定时器的作用:定时计数器可以用于精确事件定时(比延时函数精确),PWM脉宽调制,波形发生,信号时序测量等方面。
使用定时/计数器的步骤
1.启动定时/计数器(通过TCON控制器)
2.设置定时/计数器工作模式(通过TMOD控制器)
- TH0、TH1为高八位,TL 0、TL 1为低八位
M0=1(不可以这么写)应写成例:TMOD = 0x01- 复位值为0x00
3. 查询定时/计数器是否溢出(读TCON内TF位)
实践
使用定时计数器0的十六位模式
定时器0的初始化
void timer0Init()
{
TR0 = 1;//启动定时器0
TMOD = 0x01;//定时器模式1,16位定时模式
TH0 = (65535-46082)/256;
TL0 = (65535-46082)%256;//定时50ms
}
定时时间超过50 ms可在主函数写
unsigned char msec,sec;
if(TF0 == 1)//判断是否溢出
{
TF0 = 0;//软件清零溢出标志位
TH0 = 0x4b;
TL0 = 0xfd;//定时50ms
msec++;//50ms到
if(msec == 20)
{
msec = 0;
sec++;//一秒时间到
}
}
定时/计数器的计数模式
TR0 = 1;//启动定时器0
TMOD = 0x05;//定时器模式1,16位计数模式