您的位置 首页 IOT

单片机常识(五)

条件转移指令:条件转移指令是指在满足一定条件时进行相对转移。判A内容是否为0转移指令JZrelJNZrel第一指令的功能是:如果(A)=0,则转

条件搬运指令:

条件搬运指令是指在满意必定条件时进行相对搬运。

判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

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

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/iot/261976.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部