单片机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条回答
393366943
1楼-- · 2019-03-25 18:32
学到一招了。非常感谢。
智波景严
2楼-- · 2019-03-25 20:01
看了半天,还是没懂,不行得再看看,我就不信那个邪了
elvis
3楼-- · 2019-03-25 21:07
6楼的大侠号厉害,学习了。
致敬!!!
qwrjnb
4楼-- · 2019-03-26 01:30
看大虾的回答不错
ahshmj
5楼-- · 2019-03-26 01:49
 精彩回答 2  元偷偷看……
gunai
6楼-- · 2019-03-26 02:26
char 和int   char最大值255  int最大值65536  int在汇编里是不是一个Rn里装不下int?

一周热门 更多>