sbalwalw 发表于 2020-5-13 12:56

89S003我所遇到的例程坑之延时

本帖最后由 芯圣电子官方QQ 于 2023-7-25 10:16 编辑

89S003的例程里面有个延时程序
void Delay_2us(unsigned int fui_i)
{
      while(fui_i--);      
}
我一直以为官方的延时肯定会有计算的比较精确的,事实证明我太天真了,偏差到让你怀疑人生…………Delay_2us(350),按例程来计算应该是700US,我做红外遥控驱动时想偷懒就用了这个延时。结果…………这条指令居然只有253US,吐血,这个延时函数的对应关系,经测量约为1.38倍关系。就是你参数为1380时,实际迟时约为1000US。太精确就懒得去测了。对了,前题是按16M来计算的。

wangshujun 发表于 2020-5-13 14:39

我一直用定时器中断或者飞读产生延时,对于软件循环延时都没信心
有点奇怪,16兆的1t处理器,一次16位的减,配合while不应该需要2us吧

gym216 发表于 2020-5-19 22:39

很正常,我用别家芯片这样延时也不准的。红外调制用硬件pwm

sbalwalw 发表于 2020-5-21 19:54

gym216 发表于 2020-5-19 22:39
很正常,我用别家芯片这样延时也不准的。红外调制用硬件pwm

正常什么啊,我用STC的软件计算延时,偏差在百分之五以内,现在用89S003的例程延时偏差去到百分之二百以上了…………这叫正常??

lein2006 发表于 2020-5-23 14:03

本帖最后由 lein2006 于 2020-5-23 14:05 编辑

sbalwalw 发表于 2020-5-21 19:54
正常什么啊,我用STC的软件计算延时,偏差在百分之五以内,现在用89S003的例程延时偏差去到百分之二百以 ...
@sbalwalw
可以试一下这个HC89S003软件延时计算器
https://bbs.21ic.com/icview-2739394-1-1.html

Jenghiz 发表于 2020-5-27 14:40

精确延时基本没人会用软件延时去做,只有不带任何中断的程序才能用,而且编译的优化等级不一样,出来的效果可能是不一样的

kcfoo1 发表于 2020-5-28 09:06

lz应该先看看汇编后的代码,单字节和多字节变量的代码是相差很远的,在慢慢查查指令占用的周期,再结合频率计算出用时,这个比你用定时器还要麻烦,

余三水 发表于 2020-5-28 21:37

STC的软件上自带的延时计算就是很不错,比较精确,芯圣也应该做这样的软件。

余三水 发表于 2020-5-28 21:45

我一般是用定时器做精准延时的,这个软件延时只在不精准的场合使用。
页: [1]
查看完整版本: 89S003我所遇到的例程坑之延时