单片机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条回答
pinggougou
2019-03-25 07:12
关键是都是自己编的Delay子程序内容都是while(--t),仿真时的工作频率都设置成12Mhz,我分析一下,时间不一样的原因是汇编后的结果不一样,我自己编的汇编结果为4条语句,而例子的汇编结果为1条语句(看主楼),这是怎么回事呢??

一周热门 更多>