51單片機比較轉移指令CJNE簡介及舉例
條件轉移指令是指在滿足一定條件時進行相對轉移。
本文引用地址:http://www.104case.com/article/201807/383732.htm(1)比較轉移指令
CJNEA,#data,rel
CJNE A,direct,rel
CJNE Rn,#data,rel
CJNE @Ri,#data,rel
第一條指令的功能是將A中的值和立即數data比較,如果兩者相等,就次序執(zhí)行(執(zhí)行本指令的下一條指令),如果不相等,就轉移,同樣地,我們能將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后面的標號處執(zhí)行,如果CY=0則次序執(zhí)行(執(zhí)行它的下面一條指令)。
分析一下上面的程序,如果(A)=10H,則次序執(zhí)行,即R1=0。如果(A)不等于10H,則轉到L1處繼續(xù)執(zhí)行,在L1處,再次進行判斷,如果(A)>10H,則CY=1,將次序執(zhí)行,即執(zhí)行MOV R1,#0AAH指令,而如果(A)10H,則將轉移到L2處指行,即執(zhí)行MOV R1,#0FFH指令。因此最終結果是:本程序執(zhí)行前,如果(R0)=10H,則(R1)=00H,如果(R0)>10H,則(R1)=0AAH,如果(R0)10H,則(R1)=0FFH。
弄懂了這條指令,其它的幾條就類似了,第二條是把A當中的值和直接地址中的值比較,第三條則是將直接地址中的值和立即數比較,第四條是將間址尋址得到的數和立即數比較,這里就不詳談了,下面給出幾個對應的例程。
CJNE A,10H ;把A中的值和10H中的值比較(注意和上題的區(qū)別)
CJNE 10H,#35H ;把10H中的值和35H中的值比較
CJNE @R0,#35H ;把R0中的值作為地址,從此地址中取數并和35H比較
評論