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

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

本文引用地址: 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比较

换一批

延伸阅读

[图酷] FZ MCU51-B 51单片机开发板

FZ MCU51-B 51单片机开发板

FZ-MCU51单片机开发板集实验开发、编程、仿真和下载于一体,支持AT89S51、AT89S52、AT89S53的和STC系列单片机如STC89C53RC等全系列单片机的编程和实验,使用配套的仿真模......

关键字:

[趣科技] NASA打印出了复杂的“太空织物金属”:具两面不同的特性

NASA打印出了复杂的“太空织物金属”:具两面不同的特性

NASA 用到了 3D 打印技术,这种“金属织物”可以逐个连接到一起。......

关键字:3D打印 NASA 天文 材料科学

[真心话] 跨度13年,BUG数194个,20年老工程师总结的重要经验教训

跨度13年,BUG数194个,20年老工程师总结的重要经验教训

我在《从你的bug总结经验教训》一文中写道,我一直在如何跟踪遇到的最有意思的bug。我最近回顾了全部194个bug(时间跨度达13年),看看从中学到了什么经验教训。......

关键字:编码 测试 调试

[趣科技] 换个玻璃碟片 硬盘容量轻松上20TB

换个玻璃碟片 硬盘容量轻松上20TB

相比于SSD固态硬盘的突飞猛进,HDD机械硬盘这些年技术提升幅度实在太小,尤其是容量增加过于缓慢,目前投入量产的3.5寸硬盘最大才12TB,不过日本豪雅(Hoya)公司称,只要换上玻璃碟片,硬盘容量就可以轻松达到甚至超过20TB。......

关键字:玻璃碟片 硬盘容量

[真心话] 工程师们,不要想一辈子靠技术混饭吃!

工程师们,不要想一辈子靠技术混饭吃!

我现在是自己做,但我此前有多年在从事软件开发工作,当回过头来想一想自己,觉得特别想对那些初学JAVA/DOT。NET技术的朋友说点心里话,希望你们能从我们的体会中,多少受点启发(也许我说的不好,你不赞同但看在我真心的份上别扔砖头啊).......

关键字:工程师 技术
条评论

我 要 评 论

网友评论

技术子站

更多

项目外包

更多

推荐博客