请问各位朋友,怎么我用STC单片机定时器 来定时 1S 怎么误差这么大, 10 多分钟下来相差了 10 多秒。
我使用的晶振是 18.432 M 的,请问各位如何才能更精确的定时到 1S。
下面是我的代码
定时器初始化部分还是使用官方的软件计算的。
void timer0Init(void) //10毫秒@18.432MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x00; //设置定时初值
TH0 = 0xC4; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}
中断部分
void Timer0_ISR(void) interrupt 1
{
static timer_ms = 0;
TL0 = 0x00; //设置定时初值
TH0 = 0xC4; //设置定时初值
timer_ms ++;
if (timer_ms >= 100)
{
timer_ms = 0;
sys_timer.timer.S ++; /*-- 秒--*/
if (sys_timer.timer.S > 59)
{
sys_timer.timer.S = 0;
sys_timer.timer.M ++; /*-- 分--*/
if (sys_timer.timer.M > 59)
{
sys_timer.timer.M = 0;
sys_timer.timer.H ++; /*-- 时--*/
if (sys_timer.timer.H > 23)
{
sys_timer.timer.H = 0;
}
}
}
}
}
哪位朋友能帮忙看一下。谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
TL0 = 0x00; //设置定时初值
TH0 = 0xC4; //设置定时初值
复制代码
在ISR里面这样处理是有误差的. 因为这时候TL0/TH0已经不是0
一周热门 更多>