求助:STC 单片机使用定时器 定时1S

2019-07-16 03:38发布

    请问各位朋友,怎么我用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;
                                }
                        }
                }
        }
}


哪位朋友能帮忙看一下。谢谢!

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。