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来计算的。 我一直用定时器中断或者飞读产生延时,对于软件循环延时都没信心
有点奇怪,16兆的1t处理器,一次16位的减,配合while不应该需要2us吧 很正常,我用别家芯片这样延时也不准的。红外调制用硬件pwm gym216 发表于 2020-5-19 22:39
很正常,我用别家芯片这样延时也不准的。红外调制用硬件pwm
正常什么啊,我用STC的软件计算延时,偏差在百分之五以内,现在用89S003的例程延时偏差去到百分之二百以上了…………这叫正常?? 本帖最后由 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
精确延时基本没人会用软件延时去做,只有不带任何中断的程序才能用,而且编译的优化等级不一样,出来的效果可能是不一样的 lz应该先看看汇编后的代码,单字节和多字节变量的代码是相差很远的,在慢慢查查指令占用的周期,再结合频率计算出用时,这个比你用定时器还要麻烦, STC的软件上自带的延时计算就是很不错,比较精确,芯圣也应该做这样的软件。 我一般是用定时器做精准延时的,这个软件延时只在不精准的场合使用。
页:
[1]