关于用51单片机内部定时器实现时钟和闹钟功能的概述
仅个人观点,欢迎大家相互学习和讨论
STC89C52单片机,内部配置了三个定时器,T0\T1\T2,其中T2定时器我们几乎不用,或者说很少用到。我们用得最多的是T0和T1,这两个定时器的配置都差不多一样。用T0的同时实际上可以用T1,只需要做一点点更改就可以了。
下面我简单介绍一下两个定时器配置和使用:(这里以实现时钟和闹钟的功能做例子)
首先是T0的初始化配置:这里每次计时50000us
void Timer0Init(void) //100微秒@11.0592MHz
{
TMOD = 0x01; //设置定时器模式
TL0 =(65536-50000)%256; //设置定时初值
TH0 =(65536-50000)/256; //设置定时初值
TF0 = 1; //清除TF0标志
TR0 = 1; //定时器0开始计时
EA=1;
ET0=1;
}
其次是定时器T0的中断服务函数的写法:
对定时初值进行了重装,计数20次。20*50000=1S
void serviceTimer0Init() interrupt 1
{
TL0 =(65536-50000)%256; //设置定时初值
TH0 =(65536-50000)/256;
count++;
if(count==20) //20*50000=1秒
{
count=0;
}
}
下面是定时器T1作为定时使用的配置和中断
void Timer1Init(void) //100微秒@11.0592MHz
{
TMOD = 0x01;