求助高手用单片机做的时钟,如何减少程序本身累积误差

[复制链接]
10438|43
yuyetufu 发表于 2010-7-3 09:24 | 显示全部楼层
自动重载是这样吗?

void t5ms() interrupt 3 using 1  //定时器1产生的5ms定时中断
{
    TH1 = (65535 - 1738)/256;     //5MS中断程序初始化
    TL1 = (65535 - 1738)%256;   
    Time5ms ++;
//时钟调整
   i ...
电子三极管 发表于 2010-1-21 09:38

你这叫手动重装
jiaojiao 发表于 2010-7-3 10:03 | 显示全部楼层
加一个gps模块吧!我们就这样做的。
ar_dong 发表于 2010-7-3 10:49 | 显示全部楼层
51自动重载应该可以吧
只要不丢中断应该能保证精度吧
yeyusheng 发表于 2010-7-4 20:47 | 显示全部楼层
不管什么样的MCU,都可以做到软件计时无误差,(误差只与晶振有关)

例:16MHz, 分频64,1=>4us, 8位定时器T1 、0xFF 溢出中断,则 250=>1ms,T1中断程序为
T1CNT+=6;   // 250=256-6
Tms++;
if(Tms>=1000)
{  Tms-=1000;
   T1s++;
}
此只要中断延时<1ms,即不会产生累积误差。

另:
TH1 = (65535 - 1738)/256;     //5MS中断程序初始化
TL1 = (65535 - 1738)%256;   

为何不写成:
TH1 = (65535 - 1738)>>8;     //5MS中断程序初始化
TL1 = (65535 - 1738)&0xFF;   
??难道你用的是i7或是编译器能优化?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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