當前位置:編程學習大全網 - 編程語言 - 單片機系統指令的控制轉移指令

單片機系統指令的控制轉移指令

壹、無條件轉移指令 AJMP addrll (2字節指令)

2K(地址211)字節範圍內的無條件跳轉指令。

64K程序存儲器空間分為32個區,每區2K字節,轉移的目標地址必須與AJMP下壹條指令的地址高5位地址碼A15-A11相同。

指令執行時,先PC加2,然後把addrll送入PC.10~PC.0,

PC.15~PC.11保持不變,程序轉移到目標地址。

註意:轉移目標首地址必須在AJMP指令下壹條指令地址(PC+2)的2KB範圍內。

二、長跳轉指令 LJMP addr16 (3字節指令)

64K字節範圍內的無條件跳轉指令。

指令執行時,把指令的第二和第三字節分別裝入PC的高位和低位字節中,無條件地轉向addr16指出的目標地址。

目標地址可以在64K程序存儲器地址空間的任何位置。

註意:短跳轉、長跳轉指令中addrll、addr16直接寫上要轉向的目標地址標號(即符號地址)就可以。

三、相對轉移指令 SJMP rel (雙字節)

rel為8位帶符號二進制補碼數(-128~+127),實現程序的雙向轉移。

在編寫程序時,直接寫上要轉向的目標地址標號就可以。

四、間接跳轉(散轉)指令JMP @A+DPTR (三字節)

由A中8位無符號數與DPTR的16位數內容之和來確定。以DPTR內容作為基址,A的內容作變址。

五、條件轉移指令 (雙字節)

JZ rel ; 如果累加器為“0”,則轉移

JNZ rel; 如果累加器非“0”,則轉移

六、比較不相等轉移指令(3字節指令)

CJNE A, direct, rel

CJNE A, #data, rel

CJNE Rn, #data, rel

CJNE @Ri, #data, rel

1、比較前面兩個操作數(無符號整數)的大小,如果不相等則

轉移,若相等則順序執行下壹條指令。

2、如果第壹操作數小於第二操作數, 則Cy標誌位置1, 否則清0。

如常把CJNE 第壹操作數, 第二操作數, $+3

和JNC rel或JC rel 寫在壹塊來判別2個數的大小。

$:本條指令在程序存儲單元的首地址;

$+3:CJNE指令的下壹條指令,即JNC rel或JC rel

七、減1不為0轉移指令

DJNZ Rn, rel ;n=0~7

DJNZ direct, rel

將源操作數內容減1,結果回送到Rn寄存器或direct中去。如果源操作數內容不為0則轉移,為0則順序執行下壹條指令。

主要用於控制程序循環。

1、把寄存器Rn或內部RAM的direct單元用作程序循環計數器

2、以減1後是否為“0”作為轉移條件,實現按次數控制循環

八、子程序調用、返回指令

1、短調用指令 ACALL addr11 (雙字節)

2K範圍內的子程序調用。

2、長調用指令 LCALL addr16 (三字節)

64K範圍內的子程序調用。

執行本指令時:

(1)斷點地址(調用指令的下壹條指令的首地址PC+2或PC+3)

保護

(SP)+1→SP,然後PCL →(SP)

(SP)+1→SP,然後PCH →(SP)

(2)將子程序首地址送入PC,執行子程序

3、子程序返回指令 RET

斷點地址恢復

(SP) →PCH,(SP) - 1→SP

(SP) →PCL ,(SP) - 1→SP

功能:從堆棧中退出PC的高8位和低8位字節,把棧指針減2,從PC值開始繼續執行程序。不影響標誌位。

4、中斷返回指令 RETI

與RET指令相似,不同之處在於斷點地址恢復,清除中斷響應時被置“1”的51內部中斷優先級寄存器的優先級狀態。

子程序是編程時就已確定的固定位置調用,而中斷服務子程序是由中斷系統控制在特定條件下隨機調用的。

九、空操作指令 NOP,消耗1個機器周期的時間

  • 上一篇:電腦掃描器的五個使用技巧
  • 下一篇:電腦如何撞開工業之門?
  • copyright 2024編程學習大全網