上一次课中,我们已经知道,程序中的符号R7、R6是代表了一个个的RAM单元,是用来放一些数据的,下面我们再来看一下其它符号的含义。
DELAY: MOV R7,#250   ;(6)

D1: MOV R6,#250    ;(7)

D2: DJNZ R6,D2     ;(8)

DJNZ R7,D1    ;(9)

RET         ;(10)
〈单片机延时程序〉

MOV:这是一条指令,意思是传递数据。说到传递,我们都很清楚,传东西要从一本人的手上传到另一本人的手上,也就是说要有一个接受者,一个传递者和一样东西。从指令MOV R7,#250中来分析,R7是一个接受者,250是被传递的数,传递者在这条指令中被省略了(注意:并不是每一条传递指令都会省的,事实上大部份数据传递指令都会有传递者)。它的意义也很明显:将数据250送到R7中去,因此执行完这条指令后,R7单元中的值就应当是250。在250前面有个#号,这又是什么意思呢?这个#就是用来说明250就是一个被传递的东西本身,而不是传递者。那么MOV R6,#250是什么意思,应当不用分析了吧。

DJNZ:这是另一条指令,我们来看一下这条指令后面跟着的两个东西,一个是R6,一个是D2,R6我们当然已知是什么了,查一下D2是什么。D2在本行的前面,我们已学过,这称之为标号。标号的用途是什么呢?就是给本行起一个名字。DJNZ指令的执行过程是这样的,它将其后面的第一个参数中的值减1,然后看一下,这个值是否等于0,如果等于0,就往下执行,如果不等于0,就转移,转到什么地方去呢?可能大家已猜到了,转到第二个参数所指定的地方去(请大家用自已的话讲一下这条语句是怎样执行的)。本条指令的最终执行结果就是,在原地转圈250次。

执行完了DJNZ R6,D2之后(也就是R6的值等于0之后),就会去执行下面一行,也就是DJNZ R7,D1,请大家自行分析一下这句话执行的结果。(转去执行MOV R6,#250,同时R7中的值减1),最终DJNZ R6,D2这句话将被执行250*250=62500次,执行这么多次同一条指令干吗?就是为了延时。

一个问题:如果在R6中放入0,会有什么样的结果。

二、时序分析:

前面我们介绍了延时程序,但这还不完善,因为,我们只知道DJNZ R6,D2这句话会被执行62500次,但是执行这么多次需要多长时间呢?是否满足我们的要求呢?我们还不知道,所以下面要来解决这个问题。

先提一个问题:我们学校里什么是最重要的。(铃声)校长能出差,老师能休息,但学校一日无铃声必定大乱。整个学校就是在铃声的统一指挥下,步调一致,统一协调地工作着。这个铃是按一定的时间安排来响的,我们能称之为“时序��时间的次序”。一个由人组成的单位尚且要有一定的时序,计算机当然更要有严格的时序。事实上,计算机更象一个大钟,什么时候分针动,什么时候秒针动,什么时候时针动,都有严格的规定,一点也不能乱。计算机要完成的事更复杂,所以它的时序也更复杂。

我们已知,计算机工作时,是一条一条地从ROM中取指令,然后一步一步地执行,我们规定:计算机访问一次存储器的时间,称之为一个机器周期。这是一个时间基准,好象我们人用“秒”作为我们的时间基准一样,为什么不干脆用“秒”,多好,很习惯,学下去我们就会知道用“秒”反而不习惯。

一个机器周期包括12个时钟周期。下面让我们算一下一个机器周期是多长时间吧。设一个单片机工作于12M晶体震荡器,它的时钟周期是1/12(微秒)。它的一个机器周期是12*(1/12)也就是1微秒。(请计算一个工作于6M晶体震荡器的单片机,它的机器周期是多少)。

MCS-51单片机的所有指令中,有一些完成得比较快,只要一个机器周期就行了,有一些完成得比较慢,得要2个机器周期,还有两条指令要4个机器周期才行。这也不难再解,不是吗?我让你扫地的执行要完成总得比要你完成擦黑板的指令时间要长。为了恒量指令执行时间的长短,又引入一个新的概念:指令周期。所谓指令周期就是指执行一条指令的时间。INTEL对每一条指令都给出了它的指令周期数,这些数据,大部份不需要我们去记忆,但是有一些指令是需要记住的,如DJNZ指令是双周期指令。

下面让我们来计算刚才的延时。首先必须要知道晶体震荡器的频率,我们设所用晶体震荡器为12M,则一个机器周期就是1微秒。而DJNZ指令是双周期指令,所以执行一次要2个微秒。一共执行62500次,正好125000微秒,也就是125毫秒。

如果你对上面几句还是不懂请看这里的详解:http://www.51hei.com/mcu/1247.html

关于用C语言写延时函数的详解请看这:http://www.51hei.com/mcu/710.html

练习:设计一个延时100毫秒的延时程序。

要点分析:1、一个单元中的数是否能超过255。2、如何分配两个数。

三、复位电路

一、复位方式

⒈ 复位条件
RST引脚保持2个机器周期以上的高电平。

⒉ 复位电路

〈单片机复位电路〉

⒊ 复位后CPU状态

   PC:  0000H         TMOD: 00HAcc: 00H           TCON: 00HB:   00H           TH0:  00HPSW: 00H           TL0:  00HSP:  07H           TH1:  00HDPTR:0000H         TL1:  00HP0~P3:FFH         SCON: 00HIP:×××00000B    SBUF: 不定IE:0××00000B     PCON: 0×××0000B

任何单片机在工作之前都要有个复位的过程,复位是什么意思呢?它就象是我们上课之前打的预备铃。预备铃一响,大家就自动地从操场、其它地方进入教室了,在这一段时间里,是没有老师干预的,对单片机来说,是程序还没有开始执行,是在做准备工作。显然,准备工作不需要太长的时间,复位只需要5ms的时间就能了。如何进行复位呢?只要在单片机的RST管脚上加上高电平,就能了,按上面所说,时间不少于5ms。为了达到这个要求,能用很多种办法,这里供给一种供参考,见图1。实际上,我们在上一次实验的图中已见到过了。

这种复位电路的工作原理是:通电时,电容两端相当于是短路,于是RST管脚上为高电平,然后电源通过电阻对电容充电,RST端电压慢慢下降,降到一定程序,即为低电平,单片机开始正常工作。

附送郭天祥十天学会51单片机精品教程

下载地址: 请私信我

单片机延时程序分析(汇编详细版)相关推荐

  1. [免费专栏] Android安全之Android so文件分析「详细版」

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...

  2. 合泰单片机触摸例程_合泰触摸单片机新建工程步骤(自编详细版)

    合泰触摸系列单片机新建工程步骤(自编详细版) 第一步: 新建一个工程文件夹,这里以 BS83B12A-3 单片机为实例,将文件夹 命名为 BS83B12A-3_Exam( 根据工程项目自定义,无要求 ...

  3. 红酒数据集分析【详细版】

    红酒数据集分析[详细版] 原文链接:阿里云天池 数据连接:链接:https://pan.baidu.com/s/1UpVkbgOEIjpc_GQTGHyqTQ 提取码:ztjs 介绍 这个notebo ...

  4. pic单片机延时程序C语言,PIC单片机C语言延时程序和循环子程序实现方法

    PIC单片机C语言延时程序和循环子程序实现方法 很多朋友说C中不能精确控制延时时间,不能象汇编那样直观. 其实不然,对延时函数深入了解一下就能设计出一个理想的框价出来. 一般的我们都用 for(x=1 ...

  5. MCS51延时程序分析

    延时方式 单片机控制应用中,延时必不可少.CPU过段时间再做某事,称为延时.延时有两种方法,即硬件延时和软件延时. 硬件延时是通过定时器/计数器实现的,软件延时一般通过执行循环程序实现. 硬件延时中, ...

  6. 汇编语言写c51延时程序,单片机延时程序实例讲解

    在单片机实验中,有一个很重要也是很基本的子程序必须要求我们掌握,那就是延时程序.下面我凭记忆来讲解延时程序. 课本上讲,1个机器周期=6个状态周期=12个时钟周期,而这个时钟周期与晶振频率有关.我们接 ...

  7. c语言51单片机延时程序,51单片机c语言延时.doc

    1,_nop_() 适用于us级的少量延时 标准的C语言中没有空语句.但在单片机的C语言编程中,经常需要用几个空指令产生短延时的效果.这在汇编语言中很容易实现,写几个nop就行了. 在keil C51 ...

  8. 单片机延时程序的实现

    第一种方法: https://blog.csdn.net/leizi_chn/article/details/7257714 void delay500ms(void) { unsigned char ...

  9. c语言:“有一个已排好序的数组,要求输入一个数后,按原来的规律将它插入数组中” 的程序分析及详细代码

    先来分析思路: 已经排好序的数组,有两种情况,一种是顺序,一种是逆序,由于该数组是自己给出的,所以我们不妨将该数组的顺序设为顺序. 1.我们需要创建一个顺序数组(a[ ]),创建时要注意,我们要确保数 ...

  10. 编写10ms延时的子程序c语言,单片机定时器延时程序

    单片机定时器延时程序 单片机的延时程序(包括asm和C程序,都是我在学单片机的过程中用到的),在单片机延时程序中应考虑所使用的晶振的频率,在51系列的单片机中我们常用的是11.0592MHz和12.0 ...

最新文章

  1. PAT(甲级)2020年春季考试 7-4 Replacement Selection
  2. 【JZOJ3636】【BOI2012】Mobile(mobile)
  3. JavaScript 中遍历对象的属性 1
  4. 前端面试题目笔记-5
  5. 080520 雨 大风
  6. java访问kudu,KUDU的java操作
  7. redis下载安装教程(详细步骤)
  8. java案例2-6:登录注册
  9. 正则表达式 匹配一个数字
  10. 基于Outline构建团队的知识库 (上篇)
  11. 性能测试监控TP50、TP99、TP999含义(99分位延时的含义)
  12. 学Python运维,这知识点你肯定会遇到,【必收藏之】nginx 域名跳转相关配置
  13. 区块链普惠云签扶持计划 京东数科助力中小企业复工复产
  14. 长阳土家族自治县政府与升哲科技达成战略合作
  15. 第N次重装系统之win10注册表
  16. 计算机和人脑在线阅读,人脑与电脑(原文)
  17. MT7621原厂openwrt SDK使能串口2和串口3
  18. ChromeFK插件推荐系列二十三:在线文字转语音/语音朗读插件推荐
  19. android 极光推送1011,两条推送信息,一条推送成功,一条推送失败(errcode:1011,errmsg:没有满足条件的推送目标)...
  20. android.os.BatteryManager

热门文章

  1. PS证件照蓝底转白底红底转白底
  2. 【聚合支付】 如何区分界定聚合支付中的“一清”和“二清”?
  3. Masked Autoencoders Are Scalable Vision Learners (MAE)
  4. Linu基本知识(二)——Linux系统以及相关命令
  5. 【Unity】Unity 几何知识、弧度、三角函数、向量运算、点乘、叉乘
  6. 互联网基石:TCP/IP 四层模型,由浅入深直击原理!
  7. 高仿绚丽彩虹悬浮音乐播放器html5源码
  8. Opencv之给图片加水印
  9. ThinkPhp6+Vue+ElementUI前后端分离在线教程
  10. ValueError X has 2 features, but LogisticRegression is expecting 5 features as input