传统51单片机,at89c52在只考虑软件,能否精确延时1s没有误差

2020-02-05 09:04发布

实在是想不明白,做了很多实验,用keil 软件模拟,没有发现没有误差,只能是相对比较小,我是用C语言编写的。
不过用汇编可能好一些,但不知道能不能实现精确延时。
哪位高人有好的算法,请指点

公司一长着说完全可以实现。题目要求用11.0592的晶振。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
22条回答
wangyuezhuiyi
1楼-- · 2020-02-06 07:16
晶振的选择
使用11.0592MHZ的晶振可以得到精确的波特率
使用12MHZ的晶振可以得到精确的延时
BXAK
2楼-- · 2020-02-06 10:19
即使是理想晶振,软件延时某个值也会有些许误差
  1. void delay1s() //11.0592MHz误差 -0.00000000024us
  2. {
  3.     unsigned char a,b,c;
  4.     for(c=95;c>0;c--)
  5.         for(b=26;b>0;b--)
  6.             for(a=185;a>0;a--);
  7. }
复制代码【 调试测试 】

wave0.jpg (134.75 KB, 下载次数: 0)

下载附件

2012-6-16 18:35 上传


xiaoyigechaos
3楼-- · 2020-02-06 13:11
 精彩回答 2  元偷偷看……
marshallemon
4楼-- · 2020-02-06 15:25
零误差不现实,用汇编只是理论上编出准确的时间,没有考虑晶振的震荡频率的精度和温度系数
BXAK
5楼-- · 2020-02-06 17:20
xiaoyigechaos 发表于 2012-6-16 19:58
哇  辛苦啊  竟然能做到这样   如果用定时器  有什么好的算法吗  据说让定时器一直跑着  不重新装载   更 ...

网上很多现成的小工具,这个延时函数是用“单片机小精灵1.3”自动生成的,不过这样的大延时delay函数没多大用处(CPU空耗着很浪费)
304301959
6楼-- · 2020-02-06 19:57
同意楼上说法,让CPU如痴浪费确实不划算,建议用定时器

一周热门 更多>