单片机Delay延时的计算

2019-03-24 18:58发布

  1. void DelayUsx2(unsigned int t)
  2. {
  3. while(--t);
  4. }
复制代码这是我写的代码,可是把KEIL的频率设成12Mhz以后,t每减少1,消耗时间为8us,它的汇编为
  1. C:0x001B EF MOV A,R7
  2. C:0x001C 1F DEC R7
  3. C:0x001D 7001 JNZ C:0020
  4. C:0x001F 1E DEC R6
  5. C:0x0020 14 DEC A
  6. C:0x0021 4E ORL A,R6
  7. C:0x0022 70F7 JNZ DelayUsx2(C:001B)
  8. 15: }
复制代码可是,我用别人写好的例子,t每减少一,消耗时间为2us,
  1. void DelayUs2x(unsigned char t)
  2. {
  3. while(--t);
  4. }
复制代码它的汇编为
  1. C:0x003F DFFE DJNZ R7,DelayUs2x(C:003F)
  2. 54: }
复制代码这是怎么回事呢??
为什么消耗时间会不一样? 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
Li_Lei
1楼-- · 2019-03-25 00:38
函数调用也需要时间,还不如NOP哩
pinggougou
2楼-- · 2019-03-25 00:52
延时时间长的话,nop也太麻烦了!
ahshmj
3楼-- · 2019-03-25 05:10
字节长度不同,MCU处理的时间不同。当然延时就不同了。
pinggougou
4楼-- · 2019-03-25 07:12
关键是都是自己编的Delay子程序内容都是while(--t),仿真时的工作频率都设置成12Mhz,我分析一下,时间不一样的原因是汇编后的结果不一样,我自己编的汇编结果为4条语句,而例子的汇编结果为1条语句(看主楼),这是怎么回事呢??
ahshmj
5楼-- · 2019-03-25 12:47
 精彩回答 2  元偷偷看……
pinggougou
6楼-- · 2019-03-25 14:34
哈哈!谢谢了,你这个帖子比电子工程师之家论坛上的那个帖子说的明白的多了。

一周热门 更多>