登录
首页
单片机论坛
回帖
发帖
正文
主题:关于单片机精确定时的问题
点击:11029 回复:24
10楼
编辑
引用
管理
sgx
我觉得mole1979的说法比较实际,在程序里直接使用定时中断,理论上可行,但实际中非常不容易,而在计时器进入中断时再重赋值时又有一个误差。你会说那我不把那进入中断后再赋值的语句所用的时间算进不就得了,我认为很难算准,当然你可以用外部计数,如用时钟晶振+分频器,如32768Hz+4060。这可以做到很精确。因为我们不能对它的频率进行人为干预,如不精确那也是晶振的问题。当然这又不在我们的讨论范畴之内。但我认为一定有高手能有很好的方法解决这些问题。等待他们的回音。
03-12-21 11:08
11楼
编辑
引用
管理
deyun
中断子程序执行时间不会影响计时精度的,我们遇到的误差一般是要求中断的机器周期不是整数,我们可以在中断程序中校正。
比如:
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
12楼
编辑
引用
管理
mole1979
deyun,你的做法做過實驗了嗎?你嘗試一下用你的方法做一個電子時鐘,運行一兩天,看看準不?我無法做準(因為我太水了),所以想請教各位.
03-12-24 17:15
13楼
编辑
引用
管理
deyun
我做过很多包含时钟的项目,一个月下来误差也在十几秒之内。
03-12-26 07:28
14楼
编辑
引用
管理
sgx
deyun,我知道你是高手,就C51来说你还有什么别的方法吗?说实话一个月有十几秒的误差也不算小了。我想我们让计时器工作在方式2让它自动重装赋值。再采用查询的方式计数是不是会好一点?
03-12-26 17:32
15楼
编辑
引用
管理
deyun
自动重装赋值精度更差,因为没法校正累计周期误差。
我使用的是11.0592或22.1184的晶体(为了串口通信),误差很难做的很小,如果使用4,6,8,12,16,24兆赫的晶体会做的很精确。
03-12-27 07:39
16楼
编辑
引用
管理
mole1979
請教deyun老大,我做一個電子時鐘,6led,動態驅動,4按鍵,我以前一直用內部中斷來做,精度無法提高呀,我在中斷程序里驅動led顯示.請教該怎樣做呀.
03-12-27 09:02
17楼
编辑
引用
管理
sgx
这是我从别处下载的一个文件,不知对你有用否。
附件:
[
本地下载
]
03-12-27 10:07
18楼
编辑
引用
管理
魔法師
引用
sgx
在 2003-12-21 10:26:00 发言
【内容省略】
呵呵!...跪著去..
03-12-27 11:41
19楼
编辑
引用
管理
mole1979
謝謝SGX!!!
03-12-27 11:46
上一页
下一页
工控新闻
加入SICK视觉系统集成商团队,共创智能未来
尼得科驱动(CT)推出五年质保服务
三菱电机功率器件制作所将建设新工厂
西克 | Ranger3高速彩色3D相机——Ranger3-80
后摩尔时代的创新:在米尔FPGA上实现Tiny YOLO V4,助力AIoT应用
SICK亮相德国SPS自动化展,与客户携手共创价值
皮尔磁:小巧灵活高性价比的工业PC问世
中钢协工业软件四项团体标准评审会暨工业软件标准体系研讨会在上海召开
更多新闻资讯