http://www.51c51.com/jxue/dpjjx6.htm

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

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

单片机的内外部结构分析(三)

一、延时程序分析

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

DELAY:MOV R7,#250 ;(6)

D1:MOV R6,#250 ;(7)

D2:DJNZ R6,D2 ;(8)

DJNZ R7,D1 ;(9)

RET ;(10)

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

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

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

4.       一个问题:如果在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毫秒。

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

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

三、复位电路

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

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

DJNZ指令:DJNZ R6,D2 ;相关推荐

  1. jnz和djnz_djnz(单片机djnz指令的功能)

    DJNZ是单片机汇编的一条指令,是循环转移指令.eg: DJNZ R6, Loop 意思每转移到标号Loop一次R6就减1:直到R6=0时执行下一条指令. 当前变量减1,不等于零转移 dec 1 jm ...

  2. 【Vue3.0】Vue3.0简介-指令-过滤器-案例D2.0

    [Vue3.0]Vue3.0简介-指令-过滤器-案例 一.Vue3.0简介 1.1.vue3.0与vue2.0对比 vue2.0中绝大多数的API与特性,在vue3.0中同样支持.但是vue3.0中新 ...

  3. jnz和djnz_单片机里的cjne  djnz分别是什么意思?

    cjne的意思是Compare Jump Not Equal 比较不相等转移指令. 参与比较的两个数,若不相等,则转移,若相等则程序顺序执行:利用这条指令,就可以判断两数是否相等. djnz的意思是减 ...

  4. 51单片机 通过环移指令RL 实现LED的逐个移动点亮

    ;通过不带Cy标志位的环移指令RL,累加器A中的最高位与最低位连接后进行左移,同样,因为板子上LED的排布顺序为从 :左到右,因此展示出的效果为LED的右移 ;使接在 P2 管脚的 8 个 LED 灯 ...

  5. jnz和djnz_djnz指令的应用方法

    DLP2: DJNZ R7, DLP2 DJNZ R6, DLP1 RET A.1ms B. 1.5ms C. 2ms D. 4ms 二.填空题(每小题 1 分,共 15 分 1. 执行 ANL A, ...

  6. c51语言语句 指令集,关于 NOP 指令 汇编

    nop函数可以用来延时,请问1个NOP延时多少时间,怎么计算? 附一段说明: void _nop( void ); A NOP instruction is generated, before and ...

  7. c语言延空指令,单片机C言语编程空指令发作短延时怎么办

    规范的C言语中没有空句子.但在单片机的C言语编程中,常常需求用几个空指令发作短延时的效果.这在汇编言语中很简略结束,写几个nop就行了. 在keil C51中,直接调用库函数: #include // ...

  8. c语言 空指令的作用,单片机C语言编程空指令产生短延时怎么办

    标准的C语言中没有空语句.但在单片机的C语言编程中,经常需要用几个空指令产生短延时的效果.这在汇编语言中很容易实现,写几个nop就行了. 在keil C51中,直接调用库函数: #include // ...

  9. 单片机汇编跳转指令延时一秒

    DELAY: MOV      R7,#10    ;延时1S子程序 DL1:   MOV      R6,#200-----1T DL2:   MOV      R5,#248------1T DJ ...

最新文章

  1. R语言使用treemap包中的treemap函数可视化treemap图:treemap将分层数据显示为一组嵌套矩形、自定义设置treemap图的调色板、自定义设置treemap标题字体的大小
  2. 计算机网络期中考试总结反思,期中考试总结反思作文(通用6篇)
  3. hibenate5.1配置mysql_hibernate5.2的基本配置方法(详解)
  4. Font Awesome一套绝佳的图标字体库和CSS框架的使用
  5. rabbitmq 集群 ha负载 Consumer raised exception, processing can restart if the connection factory
  6. ASP.NET Web API的Controller是如何被创建的?
  7. 【人工智能】多标签图像分类综述
  8. c语言 在txt文件中搜索关键词_c语言从文件中查找字符串
  9. 【解决方案】客户端请求数据较大时,nginx返回数据被截断
  10. 标准模块 queue
  11. 数据结构-查找-折半查找-二叉排序树查找
  12. 生物信息数据格式:fastq格式
  13. 残差的正态性检验——概率图和QQ-plot图
  14. 【线性代数(1)】二阶三阶不等式
  15. 【综述笔记】一些弱监督语义分割论文
  16. WPS Excel表格怎么启用宏功能?
  17. java 面试题合集_撩课-Java面试题合辑1-50题
  18. 动态规划法(二)——弗洛伊德算法
  19. ROSCon会议详细资料
  20. 马薇薇论阴天期盼太阳

热门文章

  1. C#汽车租凭(面对对象(封装、继承,多态的应用))
  2. 分布式数据库同步系统之Otter
  3. 前端工程师高手说说CSS学习中的瓶颈
  4. 非2的幂,离散傅里叶变化DFT的快速实现
  5. Server returns invalid timezone. Go to ‘Advanced‘ tab and set ‘serverTimezon‘ 错误
  6. 模拟支付宝、淘宝登录1
  7. 支付宝支付接入-服务器端开发
  8. html 下拉图片列表,图片、表单、下拉选项
  9. python随机生成小写字母表_用小写字母生成大随机字符串的最快方法
  10. 编译程序与解释程序的区别