将以12MHZ晶振为例,详细讲解MCS-51单片机中汇编程序延时的精确算法。

指令周期、机器周期与时钟周期

指令周期:CPU执行一条指令所需要的时间称为指令周期,它是以机器周期为单位的,指令不同,所需的机器周期也不同。

时钟周期:也称为振荡周期,一个时钟周期 =晶振的倒数。

MCS-51单片机的一个机器周期=6个状态周期=12个时钟周期。

MCS-51单片机的指令有单字节、双字节和三字节的,它们的指令周期不尽相同,一个单周期指令包含一个机器周期,即12个时钟周期,所以一条单周期指令被执行所占时间为12*(1/12000000)=1μs。扩展阅读:单片机有哪些延时方法详细介绍

程序分析

例1 50ms 延时子程序:

DEL:MOV R7,#200 ①

DEL1:MOV R6,#125 ②

DEL2:DJNZ R6,DEL2 ③

DJNZ R7,DEL1 ④

RET ⑤

精确延时时间为:1+(1*200)+(2*125*200)+(2*200)+2

=(2*125+3)*200+3 ⑥

=50603μs

≈50ms

由⑥整理出公式(只限上述写法)延时时间=(2*内循环+3)*外循环+3 ⑦

详解:DEL这个子程序共有五条指令,现在分别就 每一条指令 被执行的次数和所耗时间进行分析。

第一句:MOV R7,#200 在整个子程序中只被执行一次,且为单周期指令,所以耗时1μs

第二句:MOV R6,#125 从②看到④只要R7-1不为0,就会返回到这句,共执行了R7次,共耗时200μs

第三句:DJNZ R6,DEL2 只要R6-1不为0,就反复执行此句(内循环R6次),又受外循环R7控制,所以共执行R6*R7次,因是双周期指令,所以耗时2*R6*R7μs。

例2 1秒延时子程序:

DEL:MOV R7,#10 ①

DEL1:MOV R6,#200 ②

DEL2:MOV R5,#248 ③

DJNZ R5,$ ④

DJNZ R6,DEL2 ⑤

DJNZ R7,DEL1 ⑥

RET ⑦

对每条指令进行计算得出精确延时时间为:

1+(1*10)+(1*200*10)+(2*248*200*10)+(2*200*10)+(2*10)+2

=[(2*248+3)*200+3]*10+3 ⑧

=998033μs≈1s

由⑧整理得:延时时间=[(2*第一层循环+3)*第二层循环+3]*第三层循环+3 ⑨

此式适用三层循环以内的程序,也验证了例1中式⑦(第三层循环相当于1)的成立。

注意,要实现较长时间的延时,一般采用多重循环,有时会在程式序里加入NOP指令,这时公式⑨不再适用,下面举例分析。

例3仍以1秒延时为例

DEL:MOV R7,#10 1指令周期1

DEL1:MOV R6,#0FFH 1指令周期10

DEL2:MOV R5,#80H 1指令周期255*10=2550

KONG:NOP 1指令周期128*255*10=326400

DJNZ R5,$ 2指令周期2*128*255*10=652800

DJNZ R6,DEL2 2指令周期2*255*10=5110

DJNZ R7,DEL1 2指令周期2*10=20

RET 2

延时时间=1+10+2550+326400+652800+5110+20+2 =986893μs约为1s

整理得:延时时间=[(3*第一层循环+3)*第二层循环+3]*第三层循环+3 ⑩

结论:针对初学者的困惑,对汇编程序的延时算法进行了分步讲解,并就几种不同写法分别总结出相应的计算公式,只要仔细阅读例1中的详解,并用例2、例3来加深理解,一定会掌握各种类型程序的算法并加以运用。

c51单片机汇编语言1秒延时,51单片机汇编延时程序算法详解相关推荐

  1. c51单片机汇编语言语法错误,关于51单片机汇编语言一些注意事项

    电子信息类专业在大学必修的一门功课就是51单片机,这是最最基础的单片机,所以学好它很重要. 对单片机编程相对比较简单:1.用简单的C语言(不需要C++或C#的高级编程思想,只要你国家计算机等级考试二级 ...

  2. 51单片机系列(三)51 单片机游戏设计 —— 双人对战小游戏(石头剪刀布)

    本博客51单片机实训系列,旨在记录本人在大学上单片机技术这门课时所做的课程实训内容,并与大家分享基于51单片的课程作业,如果作业中的某些细节和代码能给大家一点启发那就更好了,希望大家能用51单片机做出 ...

  3. 你知道单片机的工作条件吗?51单片机和52单片机有何区别?

    为增进大家对单片机的认识,本文将对单片机的工作条件以及51单片机和52单片机的区别予以介绍. 单片机可以说是一个微型计算机系统,通过单片机,能够创造出很多有意思的小玩意.为增进大家对单片机的认识,本文 ...

  4. 小灰的51单片机学习之什么是51单片机(1)

    距离第一次写完这篇文章已经一年半了,这半年小灰也成长了好多好多,感觉很多人朋友想看都不方便这里就整了个目录,今后的岁月里大家一起进步呀! 小灰的51单片机学习之什么是51单片机(1) 小灰的51单片机 ...

  5. 单片机电流检测电路图大全(四款模拟电路设计原理图详解) - 信号处理电子电路图

    电路图简介: 本文主要介绍了单片机电流检测电路图大全(四款模拟电路设计原理图详解).它的主要功能是完成对过电压的瞬时值和峰值的检测.过电压次数的检测.电源输出电压和电流的检测,并通过键盘的操作显示出各 ...

  6. 单片机拟真电路图软件_单片机电流检测电路图大全(四款模拟电路设计原理图详解)...

    单片机电流检测电路图(一) 高精度直流电压比的单片机测量电路设计 本文介绍的测量电路,具有结构简单.价格低廉.精度高.抗干扰能力强等特点.该测量电路和程序已实际应用于压敏电阻的非线性指数α的测试仪表中 ...

  7. AT89C51单片机流水灯c语言程序及详解(扫盲教程)

    AT89C51单片机是我们学习单片机必学的一个单片机,也是单片机入门的教材,下面给大家展示一下流水灯的编写方法适合初学者 首先先在proteus画出仿真图,方便仿真程序 下面来编写程序,先来写入头函数 ...

  8. 59s计时器C语言程序步骤详解,51单片机00-59秒计时器 0-59s Timer

    51单片机00-59秒计时器 0-59s Timer 1.  实验任务 如下图所示,在AT89S51单片机的P0和P2端口分别接有两个共阴数码管,P0口驱动显示秒时间的十位,而P2口驱动显示秒时间的个 ...

  9. 单片机c语言99秒倒计时,51单片机99秒倒计时C语言源程序

    51单片机99秒倒计时C语言源程序 51单片机实现数码管99秒倒计时,其实很简单,就是使用定时器中断来实现.目的就是学习怎样用单片机实现倒计时,从而实现一些延时控制类的东西,99秒只是一个例子,你完全 ...

  10. 用单片机c51电子秤的c语言,基于51单片机的电子秤系统设计

    微机原理论文第八篇:基于51单片机的电子秤系统设计 摘要:本文主要分析51单片机下的数字电子秤.在设计过程中,这种电子秤具体包括电源.传感器.蓝牙.转换器.单片机.键盘.开关.显示器等组成部分,在实践 ...

最新文章

  1. 2021年大数据ELK(九):使用VSCode测试分词器
  2. Linux设备驱动Hello World程序介绍
  3. 前端学习(2905):用vite的2.0构建程序
  4. 吴恩达发布了大型X光数据集,斯坦福AI诊断部分超越人类 | AAAI 2019
  5. android studio获取数字签名,Android应用开发Android Studio数字签名打包apk图文步骤教程...
  6. 极限学习机(Extreme Learning Machine,ELM)详解
  7. 【web素材】02-10款大气的购物商城网站模板
  8. 在c语言中的变量分为三种类型,在C语言中的实型变量分为两种类型
  9. Java图书管理系统登陆界面
  10. 内热外寒感冒,不能乱吃药
  11. win7下用VS2008写视频聊天程序,求VFW教程?qzvgK
  12. 2020腾讯教育盛典,乐博乐博被评为“年度科技创新教育品牌”
  13. 《论文阅读》Multi-Task Learning of Generation and Classification for Emotion-Aware Dialogue Response Gener
  14. Oracle:ADG基础知识学习一20230515
  15. johnson_trotter(生成排列算法)
  16. ClassNotFoundException: org.apache.flink.shaded.guava18.com.google.common.collect.Lists
  17. 10分钟教你搭建一个好玩的Python全文搜索引擎
  18. 并发编程 — AtomicStampedReference 详解
  19. 关于“华为”的核心竞争力的分析
  20. linux进程命令面试,面试常问的 25+ 个 Linux 命令

热门文章

  1. 头像设计,如何用PS制作个性头像
  2. 机器学习(三):如何理解最大似然估计MLE与最大后验估计MAP
  3. 解决服务器网卡不识别问题
  4. 学计算机平面设计的基础知识,新手学习平面设计2要点_计算机平面设计
  5. 双显示器LOL加载游戏提示error无法初始化图形设备解决方法
  6. 吴恩达 (Andrew Ng) 是一个怎样的人
  7. Maven的jar包无法导入/彻底解决unable to find valid certification path to requested target
  8. 采用Matlab解决最小曼哈顿图问题
  9. python if函数两个并列条件怎么用_IF函数,多个条件怎么用
  10. mac升级Monterey12.3 AccessClient打不开