打印

电子时钟为什么走慢了?

[复制链接]
6748|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
saul2006|  楼主 | 2009-5-19 19:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我做一个电子时钟的程序时,晶振是12MHZ的,定时器0工作在方式1,定时50ms;
    TMOD=0x01;                          
    TH0=(65536-50000)/256; 
    TL0=(65536-50000)%256;  
中断程序如下: 
void timer0(void) interrupt 1 using 1
{

    t50mscnt++;
    if(t50mscnt==20)           
    {
        t50mscnt=0;
        second++;
        if(second==60)
        {
            minute++;
            second=0;
            if(minute==60)
            {
                hour++;
                minute=0;
                if(hour==24) hour=0;
            }
        }
    }
}

为什么这样时间会走慢,一个小时要慢10多分钟吧。

相关帖子

沙发
耕在此行| | 2009-5-19 19:35 | 只看该作者

怎么没看到你对定时器的装载呢

使用特权

评论回复
板凳
耕在此行| | 2009-5-19 19:36 | 只看该作者

呵呵 定时器需要装载

而你没

使用特权

评论回复
地板
ningling_21| | 2009-5-19 19:54 | 只看该作者

51单片机做时钟肯定会偏差的

装载初值也是必须的
但是要修正偏差却不太容易。

使用特权

评论回复
5
smileagain| | 2009-5-19 20:23 | 只看该作者

呵呵,估计lz把装载定时常数那两句漏了

不过,只要是用软件重装定时常数,必然会慢的。因为在定时器溢出到你装载定时常数在这两者之间是需要一段时间的,而这段时间很难修正。
比较好的方法是用方式2自动重装(或者用52系列的T2自动重装),这样的话误差就全部取决于晶振了。但是一天差个几秒还是很正常的。

使用特权

评论回复
6
jiyiche| | 2009-5-19 22:21 | 只看该作者

没初值重装定时器为什么能跑?而且一小时只慢10分钟?

没想明白。。

使用特权

评论回复
7
李冬发| | 2009-5-19 23:33 | 只看该作者

65536是长整形?够慢的

使用特权

评论回复
8
wh6ic| | 2009-5-20 11:46 | 只看该作者

定时中断服务中校正 51 timer0/1

#define    timerXclick    50000

.
.
.
    EA = 0; TRx = 0;
    TLx += -(timerXclick - 9);  //此行和下行的 -9 为标准51参数,某些单周期51会发生变化。
    THx = THx + (unsigned char) CY + (-(timerXclick - 9) >> 8);
    TRx = 1; EA = 1;
.
.
.

使用特权

评论回复
9
saul2006|  楼主 | 2009-5-20 13:46 | 只看该作者

嘿嘿 , 是没有重装初值,谢谢了

谢谢各位了,是没有重装初值,现在好了

使用特权

评论回复
10
mxh0506| | 2009-5-20 14:22 | 只看该作者

要想消除重装带来的误差,最好用自动装载的定时器

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

30

主题

99

帖子

0

粉丝