首页 > 应用 > 单片机应用
[导读] 条件转移指令是指在满足一定条件时进行相对转移。

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

本文引用地址: http://www.21ic.com/app/mcu/201710/741454.htm

(1)比较转移指令
CJNEA,#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大还是小了。
(2)举例:
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比较

换一批

延伸阅读

[单片机应用] 51单片机扩展protues仿真

51单片机扩展protues仿真

  在51单片机当中,一般的at89s51就是两个外部中断源,其它加强型的我想应该会多两个,但是依旧还是不是很多,某些时候需要对其进行扩展,一般用定时器/计数器作外部中断,将其设定为计数器模式,并置初始化数为0xffH,这样......

关键字:51单片机 扩展 protues仿真

[单片机应用] 51单片机特殊功能寄存器和位定义

51单片机特殊功能寄存器和位定义

接下来的几节,我们会带着大家编写第一个单片机程序。在此之前,我们先来了解一些 51 单片机特有的程序语法以及 Keil 软件的基本操作步骤,请大家一定要有耐心。我们主要是用 C 语言来对单片机编程,而有的单片机有那......

关键字:51单片机 特殊功能寄存器 位定义

[单片机应用] 51单片机开发系列二_1602字符液晶显示

51单片机开发系列二_1602字符液晶显示

从51单片机入门,对流水灯有了一定的认识后,就可以进入学习显示类的外设驱动,因为学习时往往需要直接验证、跟踪结果,显示类的外设可以把代码运行情况以非常直观的方式反馈回来。因此,笔者此处首先分析讲解1602字......

关键字:51单片机 1602字符 液晶显示

[单片机应用] 详解51单片机的复位电路

详解51单片机的复位电路

51单片机采用高电平复位。以当前使用较多的AT89系列单片机来说,电路图如下。在复位脚加高电平2个机器周期可使单片机复位。复位后的主要特征是各IO口呈现高电平,程序计数器从零开始执行程序。复位方式有两种。1.上......

关键字:51单片机 复位电路

[单片机应用] 51单片机的串行口通信方式

51单片机的串行口通信方式

介绍:串行口是单片机与外界进行信息交换的工具。8051单片机的通信方式有两种:并行通信:数据的各位同时发送或接收。 串行通信:数据一位一位次序发送或接收。参看下图:串行通信的方式:异步通信:它用一个起始位表示......

关键字:51单片机 串行口 通信方式

[单片机应用] STM32的nvic之理解

STM32的nvic之理解

例程: /* Configure one bit for preemption priority */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); /* Enable the WAKEUP......

关键字:STM32 NVIC

我 要 评 论

网友评论

芯闻号

技术子站

更多

项目外包

更多

推荐博客