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

[复制链接]
 楼主| 安智红 发表于 2016-12-4 08:56 | 显示全部楼层 |阅读模式
请问各位朋友,怎么我用STC单片机定时器 来定时 1S 怎么误差这么大, 10 多分钟下来相差了 10 多秒。
我使用的晶振是 18.432 M 的,请问各位如何才能更精确的定时到 1S。
 楼主| 安智红 发表于 2016-12-4 08:57 | 显示全部楼层
下面是我的代码
定时器初始化部分还是使用官方的软件计算的。
void Timer0Init(void)                //10毫秒@18.432MHz
{
        AUXR &= 0x7F;                //定时器时钟12T模式
        TMOD &= 0xF0;                //设置定时器模式
        TMOD |= 0x01;                //设置定时器模式
        TL0 = 0x00;                //设置定时初值
        TH0 = 0xC4;                //设置定时初值
        TF0 = 0;                //清除TF0标志
        TR0 = 1;                //定时器0开始计时
}
 楼主| 安智红 发表于 2016-12-4 08:58 | 显示全部楼层
中断部分

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;
                                }
                        }
                }
        }
}


哪位朋友能帮忙看一下。谢谢!
wangjiahao88 发表于 2016-12-4 09:32 | 显示全部楼层
在ISR里面这样处理是有误差的. 因为这时候TL0/TH0已经不是0
wangjiahao88 发表于 2016-12-4 09:33 | 显示全部楼层
这样长时间产生的累积误差无法修正
应该采用RTC
東南博士 发表于 2016-12-4 09:35 | 显示全部楼层
使用RTC
宁穿风 发表于 2016-12-4 09:39 | 显示全部楼层
采用RTC
Creas_Tall 发表于 2016-12-7 21:43 | 显示全部楼层
1s无法直接定时,时间太大了,建议几十ms的来,然后用递加数值实现。做时钟的话,建议用专业的RTC芯片。
mdk55555 发表于 2016-12-14 16:47 | 显示全部楼层
定时器本身就有误差的,肯定做不到那么精准。
huafei123 发表于 2016-12-14 17:15 | 显示全部楼层
定时本来就是个大概时间,你要长时间的运算的话,最好用专门的时间芯片。
baoren 发表于 2016-12-23 16:08 | 显示全部楼层
定时要准确就用RTC
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

15

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

5

主题

15

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部