拜读了网上《51单片机 Keil C 延时程序的简单研究 》(by: InfiniteSpace Studio/isjfk, 1.21.2004 )一文,借鉴了文中的方法,测试发现有一点点出入,原文作者在计算延时时间的时候是否忘了加上RET指令……下面介绍我的测试结果,欢迎交流探讨——

一、单独定义变量,for语句

28: delay1(1);

C:0x0005 7F01 MOV R7,#0x01

C:0x0007 1121 ACALL delay1(C:0021)

12: void delay1(unsigned char k)

13: {

17: unsigned char i=0;

C:0x0021 E4 CLR A

C:0x0022 FE MOV R6,A

18: for(i=0;i0;i--);相同

C:0x0023 EE MOV A,R6

C:0x0024 C3 CLR C

C:0x0025 9F SUBB A,R7

C:0x0026 5003 JNC C:002B

C:0x0028 0E INC R6

C:0x0029 80F8 SJMP C:0023

19: }

C:0x002B 22 RET

分析:

delay1(1); 410-390=20

delay1(2); 439-411=28

delay1(3); 476-440=36

即:指令周期(即实际延时)= 12 + 延时参数 * 8

二、不再重新定义变量,for语句

28: delay1(1);

C:0x0005 7F01 MOV R7,#0x01

C:0x0007 1123 ACALL delay1(C:0023)

12: void delay1(unsigned char k)

13: {

18: for(;k>0;k--);

C:0x0023 EF MOV A,R7

C:0x0024 D3 SETB C

C:0x0025 9400 SUBB A,#0x00

C:0x0027 4003 JC C:002C

C:0x0029 1F DEC R7

C:0x002A 80F7 SJMP delay1(C:0023)

19: }

C:0x002C 22 RET

分析:

delay1(1); 491-473=18

delay1(2); 518-492=26

指令周期(即实际延时)= 10 + 延时参数 * 8

对比一和二可知,延时函数中有重新定义循环变量i时,理所当然地多了2行代码

不知原文中 “其生成的代码是一样的。”的结论是如何得来的?

三、for语句,改变循环结束条件

23: delay1(1);

C:0x0005 7F01 MOV R7,#0x01

C:0x0007 1123 ACALL delay1(C:0023)

11: void delay1(unsigned char i)

12: {

13: // while(--i);

14: // while(i--);

15: for(; i != 0; i--);

C:0x0023 EF MOV A,R7

C:0x0024 6003 JZ C:0029

C:0x0026 1F DEC R7

C:0x0027 80FA SJMP delay1(C:0023)

c语言 proteus 延迟2秒_几种延时的汇编执行代码对比与总结相关推荐

  1. c语言 proteus 延迟2秒_周周练 | 专升本C语言

    回复[英语]获取历年英语试题汇编回复[领书]获取专升本备考图书回复[三级]获取英语三级模拟卷进社群领资料:1128172173同学们好,本周我们开始进行专业课习题练习~ 单选题 1.在C语言中,以下正 ...

  2. c语言随机延迟5-10秒,linux下写个C语言程序,要求有0.5微秒以下的延时,要怎样写...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include #include #define B break void de(int timee) { unsi ...

  3. 语言做的表白魔方_程序员表白教程,这些代码用过的都说浪漫

    作为一名程序员,如何用自己的技术向喜欢的人表白? 这篇程序员表白教程,可以让你创造出不一样的浪漫! 你值得拥有! 1. I Love You Batch le 不如送她一个惊喜? 让她的电脑自动关机, ...

  4. python读取mysql数据每次都耗时600秒_就是这么流弊!三行Python代码,让数据处理速度提高2到6倍...

    幸运的是,Python 库中内建了一些隐藏的特性,可以让我们充分利用所有 CPU 核心的能力.通过使用 Python 的 concurrent.futures 模块,我们只需要 3 行代码就可以让一个 ...

  5. pyqt漂亮gui界面模板_一种基于模板的C代码自动生成方法

    在做C代码项目的时候,我们期望做到代码的高复用,高复用意味着代码的高配置性,即通过简单的配置修改达到复用代码的目的.如果代码高复用,支持灵活的配置,那么完全可以在上边做一个更简单的配置工具,用来修改代 ...

  6. C语言:计算阶乘与计算从1加到100的代码对比:都要用到3个变量,不同之处在于表达式

    计算1 到 100 之间所有整数之和 #include <stdio.h> int main() {int i=1,total=0;while(i<=100)//不能在 while ...

  7. 单片机设置12分频c语言,AT89C51单片机,如何实现延迟一秒

    满意答案 爱在身边lovely 2013.09.07 采纳率:59%    等级:12 已帮助:7408人 其实可以用C语言实现的,先要定义好定时器的初值 不管你使用多大的晶振,使用51单片机,一般都 ...

  8. c语言约瑟夫环问题,C++_详解约瑟夫环问题及其相关的C语言算法实现,约瑟夫环问题 N个人围成一圈 - phpStudy...

    详解约瑟夫环问题及其相关的C语言算法实现 约瑟夫环问题 N个人围成一圈顺序编号,从1号开始按1.2.3......顺序报数,报p者退出圈外,其余的人再从1.2.3开始报数,报p的人再退出圈外,以此类推 ...

  9. java语言仅支持单重继承_java语言程序设计基础篇习题_复习题_第十一章

    java语言程序设计基础篇习题_复习题_第十一章 11.1 下面说法是真是假?一个子类是父类的子集. 11.2 使用什么关键字来定义一个子类 11.3 什么是单一继承?什么是多重继承?java支持多重 ...

最新文章

  1. [恩难到了]陨石的秘密
  2. 【云周刊】第208期:阿里云MWC 2019发布7款重磅产品,助力全球企业迈向智能化...
  3. Android Stdio 里的 SQLite数据库怎么查看
  4. Objective-C设计模式(MVC)的实现,以及协议与委托的运用
  5. 6.5 Introduce Explaining Variable(引入解释性变量)
  6. sa结构组网方式_5G建网:先NSA还是SA?
  7. 基于投资组合问题的凸二次规划模型及求解——Gurobi求解器+高阶牛顿法(python)
  8. 达梦数据库常用管理工具简介
  9. Sketch 52.2 轻量易用的矢量设计工具(下载) Sketch汉化
  10. Excel学习日记:L9-图表制作-柱状图
  11. Couchbase SyncGateway
  12. 查找、下载芯片手册推荐网址
  13. 为什么百度快照没有样式
  14. 4.46-47访问控制4/5
  15. 通过线程八锁问题融会贯通synchronized关键字的使用
  16. 高效生成6位数字验证码代码
  17. 叉包舍 - PPPoE之常见拨号错误代码及处理
  18. 浅析dToF和iToF成像技术
  19. C语言程序设计第三章
  20. 校园网环境下通过OpenWrt软路由利用DNSPod实现QNAP NAS远程IPv4+IPv6双栈访问

热门文章

  1. Python——提取复数类型的数组的的实数部分和虚数部分
  2. English学习经典视频
  3. html5 倒计时跳转动画,HTML5弹性摇摆旋转的倒计时动画
  4. Consul + fabio 实现自动服务发现、负载均衡 1
  5. 台式计算机wifi老掉线,电脑连接WiFi容易断线或速度慢怎么回事 教你怎么解决
  6. 软件开发过程中常见漏洞的解析
  7. java9推迟_甲骨文宣布Java 9将会推迟到明年7月发布
  8. 计算机职称落户,2019有这些中级职称就可以在上海落户啦!(国家职业资格)
  9. Linux错误:warning: here-document at line 5 delimited by end-of-file (wanted `EOF`
  10. 1273:【例9.17】货币系统