用AT89C2051设计的电子时钟问题

用AT89C2051设计了一个电子时钟,用到一个四位数码管,一个74LS164。用汇编写的,利用中断50ms,数码管一秒扫描20次,也就是每位数码管延时12.5ms。程序都调试完以后,在软件仿真时发现57s时,分钟就加1了,要让它60s时加一分钟应该怎么调呀,应该调哪里呀,是调中断还是调延时呀,怎么调呀?
如果还要在程序里加一个整点报时,怎么加,原理是什么

不能用延时程序来定时,误差太大,即使修正之后也会残留千分之一的误差,算上其他语句占用的时间误差就更大了,所以必须使用定时器中断的形式。
以12MHz的晶振为例:
用方式1定时,初值设为3CAFH就可以产生50ms的定时中断,中断服务程序的第一二句必须是MOV TH0,#3CH和MOV TL0,#0B2H,之所以设为3CB2H而不设为3CAFH是因为中断入口的跳转语句和这两个赋值语句耗掉了3个机器周期,所以补偿3个周期以修正误差。
这是我做的:http://hi.baidu.com/yiyu3344/blog/item/0366282beeac7ff6e7cd4052.html希望对你有帮助。

如果你使用的是定时器中断方式来计时的话,你的计时和显示就是分开的,所以用于显示的延时(12.5ms那个)对计时精度是没有影响的。
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答