登录
首页 单片机论坛
回帖 发帖
正文

主题:关于单片机精确定时的问题

点击:11029 回复:24

sgx

我觉得mole1979的说法比较实际,在程序里直接使用定时中断,理论上可行,但实际中非常不容易,而在计时器进入中断时再重赋值时又有一个误差。你会说那我不把那进入中断后再赋值的语句所用的时间算进不就得了,我认为很难算准,当然你可以用外部计数,如用时钟晶振+分频器,如32768Hz+4060。这可以做到很精确。因为我们不能对它的频率进行人为干预,如不精确那也是晶振的问题。当然这又不在我们的讨论范畴之内。但我认为一定有高手能有很好的方法解决这些问题。等待他们的回音。
03-12-21 11:08
中断子程序执行时间不会影响计时精度的,我们遇到的误差一般是要求中断的机器周期不是整数,我们可以在中断程序中校正。
比如:
void timer1(void) interrupt 3 using 2
{
TH1 = 0xf1; TL1 = TL1 + 0x9b;  // 重新装载计数器
/* 1S处理 */
ti1.n1++;
if(ti1.n1 >= 250)
{
 TL1 -= 9;               // 校正计数器得到精确时间
 ti1.n1 = 0;
 if(OE==1)tc.w++;
 if(tc.w>=ts.w)OE=0;
}
.....
return;
}
03-12-24 15:41
deyun,你的做法做過實驗了嗎?你嘗試一下用你的方法做一個電子時鐘,運行一兩天,看看準不?我無法做準(因為我太水了),所以想請教各位.
03-12-24 17:15
我做过很多包含时钟的项目,一个月下来误差也在十几秒之内。
03-12-26 07:28

sgx

deyun,我知道你是高手,就C51来说你还有什么别的方法吗?说实话一个月有十几秒的误差也不算小了。我想我们让计时器工作在方式2让它自动重装赋值。再采用查询的方式计数是不是会好一点?
03-12-26 17:32
自动重装赋值精度更差,因为没法校正累计周期误差。
我使用的是11.0592或22.1184的晶体(为了串口通信),误差很难做的很小,如果使用4,6,8,12,16,24兆赫的晶体会做的很精确。
03-12-27 07:39
請教deyun老大,我做一個電子時鐘,6led,動態驅動,4按鍵,我以前一直用內部中斷來做,精度無法提高呀,我在中斷程序里驅動led顯示.請教該怎樣做呀.
03-12-27 09:02

sgx

这是我从别处下载的一个文件,不知对你有用否。
附件:
[本地下载]
03-12-27 10:07

引用 sgx 在 2003-12-21 10:26:00 发言【内容省略】

呵呵!...跪著去..
03-12-27 11:41
謝謝SGX!!!
03-12-27 11:46

上一页 下一页

工控新闻

更多新闻资讯