mcs-51单片机汇编语言条件转移指令(8条)编程举例

发布者:创新火箭最新更新时间:2017-10-17 来源: eefocus关键字:mcs-51  单片机  汇编语言  条件转移指令 手机看文章 扫描二维码
随时随地手机看文章

控制转移指令用于控制程序的流向,所控制的范围即为程序存储器区间,MCS-51系列单片机的控制转移指令相对丰富,有可对64kB程序空间地址单元进行访问的长调用、长转移指令,也有可对2kB字节进行访问的绝对调用和绝对转移指令,还有在一页范围内短相对转移及其它无条件转移指令,这些指令的执行一般都不会对标志位有影响。


[2]. 条件转移指令(8条)
条件转移指令是指在满足一定条件时进行相对转移

JZ  rel               ; A=0,(PC)+ 2 + rel→(PC),累加器中的内容为0,则转移到偏移量所指向的地址,否则程序往下执行

JNZ  rel              ; A≠0,(PC)+ 2 + rel→(PC),累加器中的内容不为0,则转移到偏移量所指向的地址,否则程序往下执行


这两条指令是判断A内容是否为0转移指令
第一条指令的功能是:如果(A)=0,则转移,否则顺序执行(执行本指令的下一条指令)。转移到什么地方去呢?如果按照传统的方法,就要算偏移量,很麻烦,好在现在我们可以借助机器汇编了,因此这条指令我们可以这样理解:
JB  标号
即转移到标号处,下面举一例说明:
   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     ; A≠(data),(PC)+ 3 + rel→(PC),累加器中的内容不等于直接地址单元的内容,则转移到偏移量所指向的地址,否则程序往下执行

CJNE  A, #data, rel    ; A≠#data,(PC)+ 3 + rel→(PC),累加器中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行 

CJNE  Rn, #data, rel  ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Rn中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行

CJNE  @Ri, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Ri指向地址单元中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行 


第一条指令的功能是将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 ; (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)工作寄存器Rn减1不等于0,则转移到偏移量所指向的地址,否则程序往下执行

DJNZ  data, rel ; (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)直接地址单元中的内容减1不等于0,则转移到偏移量所指向的地址,否则程序往下执行 


这两条指令在前面我们已有提到,这里就不多说了。


关键字:mcs-51  单片机  汇编语言  条件转移指令 引用地址:mcs-51单片机汇编语言条件转移指令(8条)编程举例

上一篇:51单片机汇编语言子程序调用指令RET RETI
下一篇:51单片机无条件转移指令(4条)

推荐阅读最新更新时间:2024-03-16 15:40

基于MPI协议的S7-300 PLC与单片机通信的实现
MPI协议在PLC之间可组态为主/主协议或主/从协议。介绍了基于MPI协议的西门子S7-300 PLC与单片机实现数据通信的应用实例及其主要设置。 西门子S7-300 PLC因其功能强、速度快、扩展灵活,在工业控制领域中占有重要地位。MPI网络是西门子工业控制系统中经常用到的一种通信方式,其使用RS485物理接口进行数据传输。目前,S7-300 PLC与PC的通信是通过专用接口卡5611卡和MPI电缆实现的。通信软件为SIMATIC Manager、STEP7、PRODAVE_S7_mini以及功能十分强大的WinCC。但是,由于西门子MPI协议是不公开的,所以一些单片机控制器不能接入到MPI网络与S7-300 PLC通信。本文
[单片机]
基于MPI协议的S7-300 PLC与<font color='red'>单片机</font>通信的实现
基于STM32F103单片机的矩阵按键设计
需要知识点 按键的原理 GPIO输入输出 寄存器 操作,如果学过51或者对 C语言 很熟练这里不存在问题。寄存器说白了就是操作他们的位(寄存器我理解就是一串羊肉串,让你找出你先吃哪个,比如我要吃中间的哪一个该怎么取出来) 矩阵按键原理 本实验使用 STM32 F103 单片机 ,主题代码通用的。 如果每个按键占用一个GPIO引脚,对于使用多个按键来说就是一种资源的浪费,因此当我们在设计时,可以考虑矩阵这种方式。本实验使用4*4也就是16个按键。 矩阵按键相对于独立按键稍微麻烦一点。4x4矩阵按键按照矩阵方式分别分为4行4列。主要有两种方式,一种是逐行扫描、一种是行列扫描。 原理图: 逐行扫描 通过在矩阵按键的每一条行线上
[单片机]
基于STM32F103<font color='red'>单片机</font>的矩阵按键设计
浅谈51单片机2个外部中断的应用案例
;51单片机的P1口上接有8只LED。 ;在外部中断0输入引脚P3.2接有一只按钮开关K1。 ;在外部中断1输入引脚P3.3接有一只按钮开关K2。 ;要求K1和K2都未按下时,P1口的8只LED呈流水灯显示, ;仅K1(P3.2)按下时,左右4只LED交替闪烁。 ;仅按下K2(P3.3)时,P1口的8只LED全部闪亮。 ;两个外中断的优先级相同。 ;============================================= ;用 PROTSUE 仿真界面如下: ;下列程序,可以满足要求。 ORG 0000H SJMP MAIN ORG 0003H SJMP X0_INT ORG 0013H SJMP X1_IN
[单片机]
浅谈51<font color='red'>单片机</font>2个外部中断的应用案例
瑞萨退出遥控器8位MCU产品 国内业者重新卡位
日本半导体大厂瑞萨电子(Renesas)持续聚焦高阶MCU市场,业界传出,瑞萨近来已对下游客户发出通知,将全面退出应用于遥控器的8位元MCU产品,预计不久之后即停止出货,国内MCU业者中以凌通受惠转单效应最高,盛群也将考虑重新卡位,不放过此机会。 继南韩三星电子退出8位元MCU(Microcontroller Unit,微控制器)市场后,全球MCU龙头厂瑞萨因持续进行业务整顿,聚焦获利事业,决定退出应用于遥控器的8位元MCU产品,瑞萨在该领域市占率超过50%,几乎处独霸地位,靠着IDM(Integrated Device Manufacturer,整合元件制造厂)营运模式,打出低价策略,击退不少台系厂商。 台厂准备接收
[单片机]
Microchip推出60 MIPS增强型内核dsPIC33数字信号控制器和PIC24单片机
    全新产品具有更大存储空间(536 KB闪存)和更高集成度(USB 2.0 OTG);随这九款新器件同时推出的还有入门工具包、接插模块、软件库和应用笔记     全球领先的整合单片机、模拟器件和闪存专利解决方案的供应商——Microchip Technology Inc.(美国微芯科技公司)宣布,推出60 MIPS 16位dsPIC®数字信号控制器(DSC)和PIC24单片机(MCU)。60 MIPS dsPIC33和PIC24“E”器件基于新一代dsPIC DSC/PIC24 MCU内核,与前一代dsPIC DSC/PIC24 MCU内核相比,具备更大的闪存(536 KB)、更大的RAM(52 KB)、采用144引脚封
[单片机]
单片机的应用在哪些方面
单片机的应用主要有哪些方面呢?总共分6大类。在智能仪器仪表上的应用有哪些呢?在工业控制中的应用是什么呢?在家用电器中的应用又是什么呢?在计算机网络和通信领域中的应用是什么呢?单片机在医用设备领域中的应用是什么呢?单片机在医用设备领域中的应用是什么呢?在各种大型电器中的模块化应用是什么呢?下面一一例举吧。     目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动
[单片机]
单片机系列指令快速记忆法
简介: 大家都知道,汇编语言指令由操作码、操作数两部分组成。MCS-51使用汇编语言指令,它共有44个操作码助记符,33种功能,其操作数有#data、direct、Rn、@Ri等。这里先介绍指令助记符及其相关符号的记忆方法 一、助记符号的记忆方法 1.表格列举法 把44个指令助记符按功能分为五类,每类列表记忆。此处从略,请读者自己总结。 2.英文还原法单片机的操作码助记符是该指令功能的英文缩写,将缩写还原成英语原文,再对照汉语有助于理解其助记符含义,从而加强记忆。 例如: 增量 INC-Incremect 减量 DNC-Decrement 短转移 SJMP-Short jump 长转移 LJMP-Long ju
[单片机]
STM32单片机IO中断实现步骤
STM32推出了全新的HAL驱动源码,本文给出GPIO中断代码实现的步骤: 步骤1)类似下方初始化用GPIO_InitStruct结构体初始化需要的GPIO,注意Mode参数和NVIC的中断使能: GPIO_InitTypeDef GPIO_InitStruct; /* Configure GPIO pins : PB6 */ __GPIOB_CLK_ENABLE(); GPIO_InitStruct.Pin = GPIO_PIN_6;// GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; // interrupt mode , rising GPIO_Ini
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved