发新帖我要提问
123
返回列表
打印

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

[复制链接]
楼主: 电子三极管
手机看帖
扫描二维码
随时随地手机跟帖
41
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

你这叫手动重装

使用特权

评论回复
42
jiaojiao| | 2010-7-3 10:03 | 只看该作者
加一个gps模块吧!我们就这样做的。

使用特权

评论回复
43
ar_dong| | 2010-7-3 10:49 | 只看该作者
51自动重载应该可以吧
只要不丢中断应该能保证精度吧

使用特权

评论回复
44
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或是编译器能优化?

使用特权

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

本版积分规则