14课:单片机条件转移指令

发布者:温暖心情最新更新时间:2020-03-11 来源: eefocus关键字:单片机  条件转移指令  相对转移 手机看文章 扫描二维码
随时随地手机看文章

条件转移指令是指在满足一定条件时进行相对转移。

判A内容是否为0转移指令

JZ rel

JNZ rel


第一指令的功能是:如果(A)=0,则转移,不然次序执行(执行本指令的下一条指令)。转移到什么地方去呢?如果按照传统的办法,就要算偏移量,很麻烦,好在现在我们能借助于机器汇编了。因此这第指令我们能这样理解:JZ 标号。即转移到标号处。下面举一例说明:

MOV A,R0

JZ L1

MOV R1,#00H

AJMP L2

L1: MOV R1,#0FFH

L2: SJMP L2

END


在执行上面这段程序前如果R0中的值是0的话,就转移到L1执行,因此最终的执行结果是R1中的值为0FFH。而如果R0中的值不等于0,则次序执行,也就是执行 MOV R1,#00H指令。最终的执行结果是R1中的值等于0。


第一条指令的功能清楚了,第二条当然就好理解了,如果A中的值不等于0,就转移。把上面的那个例程中的JZ改成JNZ试试吧,看看程序执行的结果是什么?


比较转移指令

CJNE A,#data,rel

CJNE A,direct,rel

CJNE Rn,#data,rel

CJNE @Ri,#data,rel


第一条指令的功能是将A中的值和立即数data比较,如果两者相等,就次序执行(执行本指令的下一条指令),如果不相等,就转移,同样地,我们能将rel理解成标号,即:CJNE A,#data,标号。这样利用这条指令,我们就能判断两数是否相等,这在很多场合是非常有用的。但有时还想得知两数比较之后哪个大,哪个小,本条指令也具有这样的功能,如果两数不相等,则CPU还会反映出哪个数大,哪个数小,这是用CY(进位位)来实现的。如果前面的数(A中的)大,则CY=0,不然CY=1,因此在程序转移后再次利用CY就可判断出A中的数比data大还是小了。


例:

MOV A,R0

CJNE A,#10H,L1

MOV R1,#0FFH

AJMP L3

L1: JC L2

MOV R1,#0AAH

AJMP L3

L2: MOV R1,#0FFH

L3: SJMP L3


上面的程序中有一条单片机指令我们还没学过,即JC,这条指令的原型是JC rel,作用和上面的JZ类似,但是它是判CY是0,还是1进行转移,如果CY=1,则转移到JC后面的标号处执行,如果CY=0则次序执行(执行它的下面一条指令)。


分析一下上面的程序,如果(A)=10H,则次序执行,即R1=0。如果(A)不等于10H,则转到L1处继续执行,在L1处,再次进行判断,如果(A)>10H,则CY=1,将次序执行,即执行MOV R1,#0AAH指令,而如果(A)<10H,则将转移到L2处指行,即执行MOV R1,#0FFH指令。因此最终结果是:本程序执行前,如果(R0)=10H,则(R1)=00H,如果(R0)>10H,则(R1)=0AAH,如果(R0)<10H,则(R1)=0FFH。


弄懂了这条指令,其它的几条就类似了,第二条是把A当中的值和直接地址中的值比较,第三条则是将直接地址中的值和立即数比较,第四条是将间址寻址得到的数和立即数比较,这里就不详谈了,下面给出几个对应的例程。


CJNE A,10H ;把A中的值和10H中的值比较(注意和上题的区别)

CJNE 10H,#35H ;把10H中的值和35H中的值比较

CJNE @R0,#35H ;把R0中的值作为地址,从此地址中取数并和35H比较

循环转移指令

DJNZ Rn,rel

DJNZ direct,rel


第一条指令在前面的例程中有详细的分析,这里就不多谈了。第二条指令,只是将Rn改成直接地址,其它一样,也不多说了,给一个例程。

DJNZ 10H,LOOP


3.调用与返回指令

(1)主程序与子程序 在前面的灯的实验中,我们已用到过了子程序,只是我们并没有明确地介绍。子程序是干什么用的,为什么要用子程序技术呢?举个例程,我们数据老师布置了10道算术题,经过观察,每一道题中都包含一个(3*5+2)*3的运算,我们能有两种选择,第一种,每做一道题,都把这个算式算一遍,第二种选择,我们能先把这个结果算出来,也就是51,放在一边,然后要用到这个算式时就将51代进去。这两种办法哪种更好呢?不必多言。设计程序时也是这样,有时一个功能会在程序的不一样地方反复使用,我们就能把这个功能做成一段程序,每次需要用到这个功能时就“调用”一下。


(2)调用及回过程:主程序调用了子程序,子程序执行完之后必须再回到主程序继续执行,不能“一去不回头”,那么回到什么地方呢?是回到调用子程序的下面一条指令继续执行(当然啦,要是还回到这条指令,不又要再调用子程序了吗?那可就没完没了了……)。参考图1

调用指令

LCALL addr16 ;长调用指令

ACALL addr11 ;短调用指令

上面两条指令都是在主程序中调用子程序,两者有一定的区别,但在开始学习单片机的这些指令时,能不加以区别,而且能用LCALL 标号,ACALL 标号,来理解,即调用子程序。


(5)返回指令则说了,子程序执行完后必须回到主程序,如何返回呢?只要执行一条返回指令就能了,即执行  ret指令


4.空操作指令

nop   就是 空操作,就是什么事也不干,停一个周期,一般用作短时间的延时。

关键字:单片机  条件转移指令  相对转移 引用地址:14课:单片机条件转移指令

上一篇:13课:单片机逻辑与或异或指令祥解
下一篇:15课:单片机位操作指令

推荐阅读最新更新时间:2024-11-12 06:39

芯海单片机按开始键后实现闪烁
;按开始键(PT2.1)后程序实现LED闪烁 ;目的学习I/O口的输入输出控制 ;============================================ ;完整代码下载地址: http://www.51hei.com/f/xhpms.rar ; filename: 111.asm ; chip : csu1181b ; author : ; date : 2012-07-18 ;============================================ include csu1181b.inc ;============================================ ; pro
[单片机]
avr单片机可演奏的电子琴仿真加源码
单片机电子琴仿真原理图如下 avr单片机源程序如下: //----------------------------------------------------------------- // 名称: 电子琴仿真 //----------------------------------------------------------------- // 说明: 本例在键盘矩阵上模拟演奏电子琴,数码管显示键号. // 按下不同按键时将输出不同频率音符,按键长按时发出长音, // 短按时发出短音. // //-------------------------------------------------------
[单片机]
avr<font color='red'>单片机</font>可演奏的电子琴仿真加源码
电视遥控器的单片机译码程序
;电子报2001年18期12版 Cs_X1 EQU 26H ;数据缓冲区字节数 Cs0_X1 EQU 25H ;缓冲区一个字节有几位 U0_X1 EQU 40H ;数据临时存放字节,存满8位后送2AH~2FH N0_M EQU 1EH ;键值存放单元 N0_J EQU 1FH ;遥控器识别码 X1_N1 EQU 2AH ;连续六个单元,(可位操作)作 X1_N2 EQU 2BH ;遥控输入数据缓冲区 X1_N3 EQU 2CH X1_N4 EQU 2DH X1_N5 EQU 2EH X1_N6 EQU 2FH ORG 00H ;转主程序 LJMP REST0 ORG 13H LJMP INT_X1 ;转外部中断1 ORG 100H
[单片机]
PIC单片机的工作过程
PIC单片机的工作过程: 单片机的工作过程实质上是执行程序的过程,单片机系统充电后,在程序计数器的控制下,按一定的顺序从程序存储器(ROM或EEPROM)中取出指令,经控制器分析后,送相应的部件去执行. 也就是说,单片机的工作过程是----------周而复始地取指令,分析指令和执行指令的过程.
[单片机]
单片机外部中断的电平触发和边沿触发程序
折腾了一上午,没有人带只能自己摸索了........ 接法:JP10接J12;JP8接JP16;P3^2接GND;P2^0接LED; 只有打开全局开关,其它各位的开关才可以开启。 所有开关赋值为1则开,赋值为0则关。 位序号 D0 D1 D2 D3 D4 D5 D6 D7 说明 外部中断0 定时/计数0 外部中断1 定时/计数1 串行口中断 定时/计数2 (52单片机) 无效位
[单片机]
<font color='red'>单片机</font>外部中断的电平触发和边沿触发程序
单片机中三极管的使用
三极管在数字电路里的开关特征,最罕见的使用有 2 个:一个是掌握使用,一个是驱动使用。所谓的掌握就是如图 3-7 里边引见的,我们可以经过单片机掌握三极管的基极来直接掌握后边的小灯的亮灭,用法人人根本熟习了。还有一个掌握就是停止分歧电压之间的转换掌握,比方我们的单片机是 5V 零碎,它如今要跟一个 12V 的零碎对接,假如 IO 直接接 12V电压就会烧坏单片机,所以我们加一个三极管,三极管的任务电压高于单片机的 IO 口电压,用 5V 的 IO 口来掌握 12V 的电路,如图 3-8 所示。 图 3-8 三极管完成电压转换 图 3-8 中,当 IO 口输入高电平 5V 时,三极管导通,OUT 输入低电平 0V,当 IO 口输
[单片机]
<font color='red'>单片机</font>中三极管的使用
GD32 MCU机械按键状态的识别
GPIO口的输入功能-机械按键状态的识别 硬件: 深圳标航科技有限公司 暴风 开发板 处理器:GD32F103VET6 开发环境:MDK(keil 5) + STM32CubeMX 1.1 GPIO口的输入的作用 输入,其意是指将处理器外部的逻辑信号0或者1输入到处理器的内部。输入是每一个处理器的IO引脚的基本功能。利用处理器的输入功能我们可以获取外部电路的状态,进而做出进一步的判断。GPIO的输入功能的典型应用是获取机械按键的状态—判断按键是按下还是弹起。 1.2 机械按键状态的识别 1.2.1 机械按键电路的设计 按键有两个状态,一个是按下一个是弹起。通过巧妙的电路设计,会使得按键的按下与弹起时IO引脚的逻辑电平不一样。通
[单片机]
GD32 <font color='red'>MCU</font>机械按键状态的识别
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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