7138|13

58

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

单片机Delay延时的计算 [复制链接]

  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: }
复制代码
这是怎么回事呢??
为什么消耗时间会不一样?
此帖出自51单片机论坛

最新回复

嫌麻烦可以用宏函数解决  详情 回复 发表于 2012-10-6 19:32

点评

函数调用也需要时间,还不如NOP哩  详情 回复 发表于 2012-8-16 22:07
点赞 关注
 

回复
举报

4008

帖子

0

TA的资源

版主

沙发
 

回复 楼主 pinggougou 的帖子

函数调用也需要时间,还不如NOP哩
此帖出自51单片机论坛

点评

延时时间长的话,nop也太麻烦了!  详情 回复 发表于 2012-8-17 08:33
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

回复 沙发 huo_hu 的帖子

延时时间长的话,nop也太麻烦了!
此帖出自51单片机论坛

点评

嫌麻烦可以用宏函数解决  详情 回复 发表于 2012-10-6 19:32
 
 
 

回复

173

帖子

0

TA的资源

纯净的硅(初级)

4
 
字节长度不同,MCU处理的时间不同。当然延时就不同了。
此帖出自51单片机论坛

点评

关键是都是自己编的Delay子程序内容都是while(--t),仿真时的工作频率都设置成12Mhz,我分析一下,时间不一样的原因是汇编后的结果不一样,我自己编的汇编结果为4条语句,而例子的汇编结果为1条语句(看主楼),这  详情 回复 发表于 2012-8-17 08:59
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(中级)

5
 

回复 4楼 ahshmj 的帖子

关键是都是自己编的Delay子程序内容都是while(--t),仿真时的工作频率都设置成12Mhz,我分析一下,时间不一样的原因是汇编后的结果不一样,我自己编的汇编结果为4条语句,而例子的汇编结果为1条语句(看主楼),这是怎么回事呢??
此帖出自51单片机论坛
 
 
 

回复

173

帖子

0

TA的资源

纯净的硅(初级)

6
 
你用的参数是“unsigned int” ,(整型,双字节 无符号)
人家用的参数是“unsigned char”  (字符型 单字节 无符号)
怎么能会一样呢!!你再仔细看看!!

c语言处理双字节时编译后生成的汇编语言:
1.低字节送ACC。
2.判断低字节(ACC)是否为0,
3.ACC不为0低字节减1。 若ACC为0,高字节减1、低字节减1。(2个指令)
4.判断高字节、低字节是否都为0,?(ORL   A,  R6)
5.不同时为0,转回(循环),若同时为0退出。(2个指令)
一共7个指令,8个周期。

c语言处理单字节时编译后生成的汇编语言只有一个指令:“djnz    r7,  $”, 2个周期

从这上面可以看出一点:不管你是学那种51单片机语言,汇编还是要懂一点的。

[ 本帖最后由 ahshmj 于 2012-8-17 13:01 编辑 ]
此帖出自51单片机论坛

点评

:congratulate: 哈哈!谢谢了,你这个帖子比电子工程师之家论坛上的那个帖子说的明白的多了。:lol  详情 回复 发表于 2012-8-17 14:38

赞赏

1

查看全部赞赏

 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(中级)

7
 

回复 6楼 ahshmj 的帖子

哈哈!谢谢了,你这个帖子比电子工程师之家论坛上的那个帖子说的明白的多了。
此帖出自51单片机论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

8
 
学到一招了。非常感谢。
此帖出自51单片机论坛
 
 
 

回复

116

帖子

0

TA的资源

一粒金砂(高级)

9
 
看了半天,还是没懂,不行得再看看,我就不信那个邪了
此帖出自51单片机论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(中级)

10
 
6楼的大侠号厉害,学习了。
致敬!!!
此帖出自51单片机论坛

点评

不是什么“大侠”,仅仅是个玩家。而且是不务正业的玩家。  详情 回复 发表于 2012-8-28 11:59
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

11
 
看大虾的回答不错
此帖出自51单片机论坛
 
 
 

回复

173

帖子

0

TA的资源

纯净的硅(初级)

12
 
原帖由 elvis 于 2012-8-27 16:36 发表
6楼的大侠号厉害,学习了。
致敬!!!

不是什么“大侠”,仅仅是个玩家。而且是不务正业的玩家。
此帖出自51单片机论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(中级)

13
 
char 和int   char最大值255  int最大值65536  int在汇编里是不是一个Rn里装不下int?
此帖出自51单片机论坛
 
 
 

回复

4008

帖子

0

TA的资源

版主

14
 
原帖由 pinggougou 于 2012-8-17 08:33 发表
延时时间长的话,nop也太麻烦了!


嫌麻烦可以用宏函数解决
此帖出自51单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表