⑴ 51單片機指令有哪些啊
MCS-51共有111條指令,可分為5類:
[1].數據傳送類指令(共29條)
[2].算數運算類指令(共24條)
[3].邏輯運算及移位類指令(共24條)
[4].控制轉移類指令(共17條)
[5].布爾變數操作類指令(共17條)
⑵ 單片機指令
單片機指令功能一覽表
助記符 代碼 說明
MOV A,Rn E8~EF 寄存器A
MOV A,direct E5 dircet 直接位元組送A
MOV A,@Ri ER~E7 間接RAM送A
MOV A,#data 74 data 立即數送A
MOV Rn,A F8~FF A送寄存器
MOV Rn,dircet A8~AF dircet 直接位元組送寄存器
MOV Rn,#data 78~7F data 立即數送寄存器
MOV dircet,A F5 dircet A送直接位元組
MOV dircet,Rn 88~8F dircet 寄存器送直接位元組
MOV dircet1,dircet2 85 dircet1 dircet2 直接位元組送直接位元組
MOV dircet,@Ro 86~87 間接RAM送直接位元組
MOV dircet,#data 75 dircet data 立即數送直接位元組
MOV @Ri,A F6~F7 A送間接RAM
MOV @Ri,#data 76~77 data 直接位元組送間接RAM
MOV @Ri,#data 76~77 data 立即數送間接RAM
MOV DPTR,#data16 90 data 15~8 16位常數送數據指針
data7~0
MOVC A,@A+DPTR 93 由((A)+(DPTR))定址的程序存貯
器位元組選A
MOVC A,@A+PC 83 由((A)+(PC));定址的程序存貯器位元組送A
MOVX A,@Ri E2~E3 送外部數據(8位地址)送A
MOVX A,@DPTR E0 送外部數據(16位地址)送A
MOVX @Ri,A F2~F3 A送外部數據(8位地址)
MOVX @DPTR,A F0 A送外部數據(16位地址)
PUSH dircet C0 dircet 直接位元組進棧,SP加1
POP dircet D0 dircet 直接位元組退棧,SP減1
XCH A,Rn C8~CF 交換A和寄存器
XCH A,dircet C5 dircet 交換A和直接位元組
XCH A,@Ri C6~C7 交換A和間接RAM
XCH A,@Ri D6~D7 交換A和間接RAM的低位
SWAP A C4
算術操作 (A的二個半位元組交換)
ADD A,Rn 28~2F 寄存器加到A
ADD A,dircet 25 dircet 直接位元組加到A
ADD A,@Ri 26~27 間接RAM加到A
ADD A,#data 24data 立即數加到A
ADD A,Rn 38~3F 寄存器和進位位加到A
ADD A,dircet 35dircet 直接位元組和進位位加到A
ADD A,@Ri 36~37 間接位元組和進位位加到A
ADD A,data 34 data 立即數和進位位加到A
ADD A,Rn 98~9F A減去寄存器和進位位
ADD A,dircet 95 dircet A減去直接位元組和進位位
ADD A,@Ri 36~37 間接RAM和進位位加到A
ADD A,data 34 data 立即數和進位位加到A
SUBB A,Rn 98~9F A減去寄存器和進位位
SUBB A,dircet 95 dircet A減去直接位元組和進位位
SUBB A,@Ri 96~97 A減去間接RAM和進位位
SUBB A,#data 94 data A減去立即數和進位位
INC A 04 A加1
INC Rn 08~0F 寄存器加1
INC dircet 05 dircet 直接位元組加1
INC @Ri 06~07 間接RAM加1
DEC A 14 A減1
DEC Rn 18~1F 寄存器減1
DEC dircet 15 dircet 直接位元組減1
DEC @Ri 16~17 間接RAM減1
INC DPTR A3 數據指針加1
MUL AB A4 A乘以B
DIV AB 84 A除以B
DA A D4 A的十進制加法調整
邏輯操作
ANL A,Rn 58~5F 寄存器「與」到A
ANL A,dircet 55 dircet 直接位元組「與」到A
ANL A,@Ri 56~57 間接RAm「與」到A
ANL A,#data 54 data 立即數「與」到A
ANL dircet A 52 dircet A「與」到直接位元組
ANL dircet,#data 53 dircet data 立即數「與」到直接位元組
ORL A,Rn 48~4F 寄存器「或」到A
ORL A,dircet 45 dircet 直接位元組「或」到A
ORL A,@Ri 46~47 間接RAM「或」到A
ORL A,#data 44 data 立即數「或」到A
ORL dircet,A 42 dircet A「或」到直接位元組
ORL dircet,#data 43 dircet data 立即數「或」到直接位元組
XRL A,Rn 68~6F 寄存器「異或」到A
XRL A,dircet 65 dircet 直接位元組「異或」到A
XRL A,@Ri 66~67 間接RAM「異或」到A
XRL A,#data 64 data 立即數「異或」到A
XRL dircet A 62 dircet A「異或」到直接位元組
XRL dircet,#data 63 dircet data 立即數「異或」到直接位元組
CLR A E4 清零
CPL A F4 A取反
RL A 23 A左環移
RLC A 33 A通過進位左環移
RR A 03 A右環移
RRC A 13 A通過進位右環移
控製程序轉移
ACALL addr 11 *1 addr(a7~a0) 絕對子程序調用
LCALL addr 16 12 addr(15~8) 長子程序調用
addr(7~0)
RET 22 子程序調用返回
RETI addr 11 32 中斷調用返回
AJMP addr 11 △1 addr(a7~a6) 絕對轉移
LJMP addr 16 02addr(15~8) 長轉移
addr(7~0)
SJMP rel 80 rel 短轉移,相對轉移
JMP @A+DPTR 73 相對於DPTR間接轉移
JZ rel 60 rel A為零轉移
JNZ rel 70 rel A為零轉移
CJNE A,dircet,rel B5 dircet rel 直接位元組與A比較,不等則轉移
CJNE A,#data,rel B4 data rel 立即數與A比較,不等則轉移
CJNE A,Rn,#data,rel B8~BF data rel 立即數與寄存器比較,不等則轉移
CJNE @Ri,#data,rel B6~B7 data rel 立即數與間接RAM比較,不等則轉移
DJNZ Rn,rel D8~DF rel 寄存器減1,不為零則轉移
DJNZ dircet,rel B5 dircet rel 直接位元組減1,不為零則轉移
NOP 00 空操作
*=a10a9a8l
△=a10a9a80
布爾變數操作
CLR C C3 清零進位
CLR bit C2 清零直接位
SETB C D3 置位進位
SETB bit D2 置位直接位
CPL C B3 進位取反
CPL bit B2 直接位取反
ANL C,bit 82 dit 直接數「與」到進位
ANL C,/bit B0 直接位的反「與」到進位
ORL C,bit 72 bit 直接位「或」到進位
ORL C,/bit A0 bit 直接位的反「或」到進位
MOV C,bit A2 bit 直接位送進位
MOV bit,C 92 bit 進位送直接位
JC rel 40 rel 進位位為1轉移
JNC rel 50 rel 進位位為0轉移
JB bit,rel 20 bit rel 直接位為1相對轉移
JNB bit,rel 30 bit rel 直接位為0相對轉移
JBC bit,rel 10 bit rel 直接位為1相對轉移,然後清零該位
⑶ 51單片機的所有指令
單片機指令功能一覽表
助記符 代碼 說明
MOV A,Rn E8~EF 寄存器A
MOV A,direct E5 dircet 直接位元組送A
MOV A,@Ri ER~E7 間接RAM送A
MOV A,#data 74 data 立即數送A
MOV Rn,A F8~FF A送寄存器
MOV Rn,dircet A8~AF dircet 直接位元組送寄存器
MOV Rn,#data 78~7F data 立即數送寄存器
MOV dircet,A F5 dircet A送直接位元組
MOV dircet,Rn 88~8F dircet 寄存器送直接位元組
MOV dircet1,dircet2 85 dircet1 dircet2 直接位元組送直接位元組
MOV dircet,@Ro 86~87 間接RAM送直接位元組
MOV dircet,#data 75 dircet data 立即數送直接位元組
MOV @Ri,A F6~F7 A送間接RAM
MOV @Ri,#data 76~77 data 直接位元組送間接RAM
MOV @Ri,#data 76~77 data 立即數送間接RAM
MOV DPTR,#data16 90 data 15~8 16位常數送數據指針
data7~0
MOVC A,@A+DPTR 93 由((A)+(DPTR))定址的程序存貯
器位元組選A
MOVC A,@A+PC 83 由((A)+(PC));定址的程序存貯器位元組送A
MOVX A,@Ri E2~E3 送外部數據(8位地址)送A
MOVX A,@DPTR E0 送外部數據(16位地址)送A
MOVX @Ri,A F2~F3 A送外部數據(8位地址)
MOVX @DPTR,A F0 A送外部數據(16位地址)
PUSH dircet C0 dircet 直接位元組進棧,SP加1
POP dircet D0 dircet 直接位元組退棧,SP減1
XCH A,Rn C8~CF 交換A和寄存器
XCH A,dircet C5 dircet 交換A和直接位元組
XCH A,@Ri C6~C7 交換A和間接RAM
XCH A,@Ri D6~D7 交換A和間接RAM的低位
SWAP A C4
算術操作 (A的二個半位元組交換)
ADD A,Rn 28~2F 寄存器加到A
ADD A,dircet 25 dircet 直接位元組加到A
ADD A,@Ri 26~27 間接RAM加到A
ADD A,#data 24data 立即數加到A
ADD A,Rn 38~3F 寄存器和進位位加到A
ADD A,dircet 35dircet 直接位元組和進位位加到A
ADD A,@Ri 36~37 間接位元組和進位位加到A
ADD A,data 34 data 立即數和進位位加到A
ADD A,Rn 98~9F A減去寄存器和進位位
ADD A,dircet 95 dircet A減去直接位元組和進位位
ADD A,@Ri 36~37 間接RAM和進位位加到A
ADD A,data 34 data 立即數和進位位加到A
SUBB A,Rn 98~9F A減去寄存器和進位位
SUBB A,dircet 95 dircet A減去直接位元組和進位位
SUBB A,@Ri 96~97 A減去間接RAM和進位位
SUBB A,#data 94 data A減去立即數和進位位
INC A 04 A加1
INC Rn 08~0F 寄存器加1
INC dircet 05 dircet 直接位元組加1
INC @Ri 06~07 間接RAM加1
DEC A 14 A減1
DEC Rn 18~1F 寄存器減1
DEC dircet 15 dircet 直接位元組減1
DEC @Ri 16~17 間接RAM減1
INC DPTR A3 數據指針加1
MUL AB A4 A乘以B
DIV AB 84 A除以B
DA A D4 A的十進制加法調整
邏輯操作
ANL A,Rn 58~5F 寄存器「與」到A
ANL A,dircet 55 dircet 直接位元組「與」到A
ANL A,@Ri 56~57 間接RAm「與」到A
ANL A,#data 54 data 立即數「與」到A
ANL dircet A 52 dircet A「與」到直接位元組
ANL dircet,#data 53 dircet data 立即數「與」到直接位元組
ORL A,Rn 48~4F 寄存器「或」到A
ORL A,dircet 45 dircet 直接位元組「或」到A
ORL A,@Ri 46~47 間接RAM「或」到A
ORL A,#data 44 data 立即數「或」到A
ORL dircet,A 42 dircet A「或」到直接位元組
ORL dircet,#data 43 dircet data 立即數「或」到直接位元組
XRL A,Rn 68~6F 寄存器「異或」到A
XRL A,dircet 65 dircet 直接位元組「異或」到A
XRL A,@Ri 66~67 間接RAM「異或」到A
XRL A,#data 64 data 立即數「異或」到A
XRL dircet A 62 dircet A「異或」到直接位元組
XRL dircet,#data 63 dircet data 立即數「異或」到直接位元組
CLR A E4 清零
CPL A F4 A取反
RL A 23 A左環移
RLC A 33 A通過進位左環移
RR A 03 A右環移
RRC A 13 A通過進位右環移
控製程序轉移
ACALL addr 11 *1 addr(a7~a0) 絕對子程序調用
LCALL addr 16 12 addr(15~8) 長子程序調用
addr(7~0)
RET 22 子程序調用返回
RETI addr 11 32 中斷調用返回
AJMP addr 11 △1 addr(a7~a6) 絕對轉移
LJMP addr 16 02addr(15~8) 長轉移
addr(7~0)
SJMP rel 80 rel 短轉移,相對轉移
JMP @A+DPTR 73 相對於DPTR間接轉移
JZ rel 60 rel A為零轉移
JNZ rel 70 rel A為零轉移
CJNE A,dircet,rel B5 dircet rel 直接位元組與A比較,不等則轉移
CJNE A,#data,rel B4 data rel 立即數與A比較,不等則轉移
CJNE A,Rn,#data,rel B8~BF data rel 立即數與寄存器比較,不等則轉移
CJNE @Ri,#data,rel B6~B7 data rel 立即數與間接RAM比較,不等則轉移
DJNZ Rn,rel D8~DF rel 寄存器減1,不為零則轉移
DJNZ dircet,rel B5 dircet rel 直接位元組減1,不為零則轉移
NOP 00 空操作
*=a10a9a8l
△=a10a9a80
布爾變數操作
CLR C C3 清零進位
CLR bit C2 清零直接位
SETB C D3 置位進位
SETB bit D2 置位直接位
CPL C B3 進位取反
CPL bit B2 直接位取反
ANL C,bit 82 dit 直接數「與」到進位
ANL C,/bit B0 直接位的反「與」到進位
ORL C,bit 72 bit 直接位「或」到進位
ORL C,/bit A0 bit 直接位的反「或」到進位
MOV C,bit A2 bit 直接位送進位
MOV bit,C 92 bit 進位送直接位
JC rel 40 rel 進位位為1轉移
JNC rel 50 rel 進位位為0轉移
JB bit,rel 20 bit rel 直接位為1相對轉移
JNB bit,rel 30 bit rel 直接位為0相對轉移
JBC bit,rel 10 bit rel 直接位為1相對轉移,然後清零該位
[1]. 循環移位指令(4條)
RL A ;累加器A中的內容左移一位
RR A ;累加器A中的內容右移一位
RLC A ;累加器A中的內容連同進位位CY左移一位
RRC A ;累加器A中的內容連同進位位CY右移一位
[2]. 累加器半位元組交換指令(1條)
SWAP A ; 累加器中的內容高低半位元組互換
[3]. 求反指令(1條)
CPL A ; 累加器中的內容按位取反
[4]. 清零指令(1條)
CLR A ; 0→(A),累加器中的內容清0
[5]. 邏輯與操作指令(6條)
ANL A,data ;累加器A中的內容和直接地址單元中的內容執行與邏輯操作。結果存在寄存器A中。
ANL data,#data ;直接地址單元中的內容和立即數執行與邏輯操作。結果存在直接地址單元中。
ANL A,#data ;累加器A的內容和立即數執行與邏輯操作。結果存在累加器A中。
ANL A,Rn ;累加器A的內容和寄存器Rn中的內容執行與邏輯操作。結果存在累加器A中。
ANL data,A ;直接地址單元中的內容和累加器A的內容執行與邏輯操作。結果存在直接地址單元中。
ANL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執行與邏輯操作。結果存在累加器A中。
[6]. 邏輯或操作指令(6條)
這組指令的作用是將兩個單元中的內容執行邏輯或操作。如果直接地址是I/O地址,則為「讀—修改—寫」操作。
ORL A,data ;累加器A中的內容和直接地址單元中的內容執行邏輯或操作。結果存在寄存器A中。
ORL data,#data ;直接地址單元中的內容和立即數執行邏輯或操作。結果存在直接地址單元中。
ORL A,#data ;累加器A的內容和立即數執行邏輯或操作。結果存在累加器A中。
ORL A,Rn ;累加器A的內容和寄存器Rn中的內容執行邏輯或操作。結果存在累加器A中。
ORL data,A ;直接地址單元中的內容和累加器A的內容執行邏輯或操作。結果存在直接地址單元中。
ORL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執行邏輯或操作。結果存在累加器A中。
[7]. 邏輯異或操作指令(6條)
XRL A,data ;累加器A中的內容和直接地址單元中的內容執行邏輯異或操作。結果存在寄存器A中。
XRL data,#data ;直接地址單元中的內容和立即數執行邏輯異或操作。結果存在直接地址單元中。
XRL A,#data ;累加器A的內容和立即數執行邏輯異或操作。結果存在累加器A中。
XRL A,Rn ;累加器A的內容和寄存器Rn中的內容執行邏輯異或操作。結果存在累加器A中。
XRL data,A ;直接地址單元中的內容和累加器A的內容執行邏輯異或操作。結果存在直接地址單元中。
XRL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執行邏輯異或操作。結果存在累加器A中
控制轉移類指令分析
[1]. 無條件轉移指令(4條)
LJMP addr16 ;addr16→(PC),給程序計數器賦予新值(16位地址)
AJMP addr11 ;(PC)+2→(PC),addr11→(PC10-0)程序計數器賦予新值(11位地址),(PC15-11)不改變
SJMP rel ;(PC)+ 2 + rel→(PC)當前程序計數器先加上2再加上偏移量給程序計數器賦予新值
JMP @A+DPTR ;(A)+ (DPTR)→(PC),累加器所指向地址單元的值加上數據指針的值給程序計數器賦予新值
[2]. 條件轉移指令(8條)
JZ rel ; A=0,(PC)+ 2 + rel→(PC),累加器中的內容為0,則轉移到偏移量所指向的地址,否則程序往下執行
JNZ rel ; A≠0,(PC)+ 2 + rel→(PC),累加器中的內容不為0,則轉移到偏移量所指向的地址,否則程序往下執行
CJNE A, data, rel ; A≠(data),(PC)+ 3 + rel→(PC),累加器中的內容不等於直接地址單元的內容,則轉移到偏移量所指向的地址,否則程序往下執行
CJNE A, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),累加器中的內容不等於立即數,則轉移到偏移量所指向的地址,否則程序往下執行
CJNE Rn, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Rn中的內容不等於立即數,則轉移到偏移量所指向的地址,否則程序往下執行
CJNE @Ri, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Ri指向地址單元中的內容不等於立即數,則轉移到偏移量所指向的地址,否則程序往下執行
布爾變數操作指令分析
[1]. 位傳送指令(2條)
MOV C,bit ;bit→CY,某位數據送CY
MOV bit,C ;CY→bit,CY數據送某位
[2]. 位置位復位指令(4條)
CLR C ; 0→CY,清CY
CLR bit ; 0→bit,清某一位
SETB C ; 1→CY,置位CY
SETB bit ; 1→bit,置位某一位
[3]. 位運算指令(6條)
ANL C,bit ;(CY)∧(bit)→CY
ANL C,/bit ;(CY)∧( )→CY
ORL C,bit ;(CY)∨(bit)→CY
ORL C,/bit ;(CY)∧()→CY
CPL C ;()→CY
CPL bit ;()→bir
[4]. 位控制轉移指令(5)
JC rel ; (CY)=1轉移,(PC)+2+rel→PC,否則程序往下執行,(PC)+2→PC。
JNC rel ; (CY)=0轉移,(PC)+2+rel→PC,否則程序往下執行,(PC)+2→PC。
JB bit, rel ; 位狀態為1轉移。
JNB bit, rel ; 位狀態為0轉移。
JBC bit, rel ; 位狀態為1轉移,並使該位清「0」。
⑷ 單片機系統指令的位操作指令
一、數據位傳送指令
MOV C,bit
MOV bit,C
如MOV C,06H ;(20H).6→Cy
06H是內部RAM 20H位元組位6的位地址。
MOV P1.0,C ;Cy→P1.0
可定址位的具體定義:從20H單元的第一位開始一直到2FH單元的最後一位分別為00H~7FH以及特殊功能寄存器中80H~F7H。
二、位變數修改指令
CLR C ;清「0」Cy
CLR bit ;清「0」bit位
CPL C ;Cy求反
CPL bit ;bit位求反
SETB C ;置「1」 Cy
SETB bit ;置「1」bit位
三、位變數邏輯與指令
ANL C,bit ;bit ∧Cy →Cy
ANL C,/bit; ;/ bit ∧Cy →Cy
四、位變數邏輯或指令
ORL C,bit ;bit ∨ Cy →Cy
ORL C,/bit ;/ bit ∨ Cy →Cy
五、條件轉移類指令
JC rel ;如果進位位Cy=1,則轉移
JNC rel ;如果進位位Cy=0,則轉移
JB bit,rel ;如果直接定址位=1,則轉移
JNB bit,rel ;如果直接定址位=0,則轉移
JBC bit,rel ;如果直接定址位=1,則轉移,並對bit位清0
⑸ 51單片機指令有哪些啊
MCS-51單片機的指令集
1、數據傳送類指令
助記符 功能說明 位元組數 振盪周期
MOV A,Rn 寄存器內容送入累加器 1 12
MOV A,direct 直接地址單元中的數據送入累加器 2 12
MOV A,@Ri 間接RAM中的數據送入累加器 1 12
MOV A,#data8 8位立即數送入累加器 2 12
MOV Rn,A 累加器內容送入寄存器 1 12
MOV Rn,direct 直接地址單元中的數據送入寄存器 2 24
MOV Rn,#data8 8位立即數送入寄存器 2 12
MOV direct,A 累加器內容送入直接地址單元 2 12
MOV direct,Rn 寄存器內容送入直接地址單元 2 24
MOV direct,direct 直接地址單元中的數據送入直接地址單元 3 24
MOV direct,@Ri 間接RAM中的數據送入直接地址單元 2 24
MOV direct,#data8 8位立即數送入直接地址單元 3 24
MOV @Ri,A 累加器內容送入間接RAM單元 1 12
MOV @Ri,direct 直接地址單元中的數據送入間接RAM單元 2 24
MOV @Ri,#data8 8位立即數送入間接RAM單元 2 12
MOV DPTR,#data16 16位立即數地址送入地址寄存器 3 24
MOVC A,@A+DPTR 以DPTR為基地址變址定址單元中的數據送入累加器 1 24
MOVC A,@A+PC 以PC為基地址變址定址單元中的數據送入累加器 1 24
MOVX A,@Ri 外部RAM(8位地址)送入累加器 1 24
MOVX A,@DPTR 外部RAM(16位地址)送入累加器 1 24
MOVX @Ri,A 累加器送入外部RAM(8位地址) 1 24
MOVX @DPTR,A 累加器送入外部RAM(16位地址) 1 24
PUSH direct 直接地址單元中的數據壓入堆棧 2 24
POP DIRECT 堆棧中的數據彈出到直接地址單元 2 24
XCH A,Rn 寄存器與累加器交換 1 12
XCH A,direct 直接地址單元與累加器交換 2 12
XCH A,@Ri 間接RAM與累加器交換 1 12
XCHD A,@Ri 間接RAM與累加器進行低半位元組交換 1 12
2、算術操作類指令
助記符 功能說明 位元組數 振盪周期
ADD A,Rn 寄存器內容加到累加器 1 12
ADD A,direct 直接地址單元加到累加器 2 12
ADD A,@Ri 間接RAM內容加到累加器 1 12
ADD A,#data8 8位立即數加到累加器 2 12
ADDC A,Rn 寄存器內容帶進位加到累加器 1 12
ADDC A,dirct 直接地址單元帶進位加到累加器 2 12
ADDC A,@Ri 間接RAM內容帶進位加到累加器 1 12
ADDC A,#data8 8位立即數帶進位加到累加器 2 12
SUBB A,Rn 累加器帶借位減寄存器內容 1 12
SUBB A,dirct 累加器帶借位減直接地址單元 2 12
SUBB A,@Ri 累加器帶借位減間接RAM內容 1 12
SUBB A,#data8 累加器帶借位減8位立即數 2 12
INC A 累加器加1 1 12
INC Rn 寄存器加1 1 12
INC direct 直接地址單元內容加1 2 12
INC @Ri 間接RAM內容加1 1 12
INC DPTR DPTR加1 1 24
DEC A 累加器減1 1 12
DEC Rn 寄存器減1 1 12
DEC direct 直接地址單元內容減1 2 12
DEC @Ri 間接RAM內容減1 1 12
MUL A,B A乘以B 1 48
DIV A,B A除以B 1 48
DA A 累加器進行十進制轉換 1 12
3、邏輯操作類指令
助記符 功能說明 位元組數 振盪周期
ANL A,Rn 累加器與寄存器相「與」 1 12
ANL A,direct 累加器與直接地址單元相「與」 2 12
ANL A,@Ri 累加器與間接RAM內容相「與」 1 12
ANL A,#data8 累加器與8位立即數相「與」 2 12
ANL direct,A 直接地址單元與累加器相「與」 2 12
ANL direct,#data8 直接地址單元與8位立即數相「與」 3 24
ORL A,Rn 累加器與寄存器相「或」 1 12
ORL A,direct 累加器與直接地址單元相「或」 2 12
ORL A,@Ri 累加器與間接RAM內容相「或」 1 12
ORL A,#data8 累加器與8位立即數相「或」 2 12
ORL direct,A 直接地址單元與累加器相「或」 2 12
ORL direct,#data8 直接地址單元與8位立即數相「或」 3 24
XRL A,Rn 累加器與寄存器相「異或」 1 12
XRL A,direct 累加器與直接地址單元相「異或」 2 12
XRL A,@Ri 累加器與間接RAM內容相「異或」 1 12
XRL A,#data8 累加器與8位立即數相「異或」 2 12
XRL direct,A 直接地址單元與累加器相「異或」 2 12
XRL direct,#data8 直接地址單元與8位立即數相「異或」 3 24
CLR A 累加器清0 1 12
CPL A 累加器求反 1 12
RL A 累加器循環左移 1 12
RLC A 累加器帶進位循環左移 1 12
RR A 累加器循環右移 1 12
RRC A 累加器帶進位循環右移 1 12
SWAP A 累加器半位元組交換 1 12
4、控制轉移類指令
助記符 功能說明 位元組數 振盪周期
ACALL addr11 絕對短調用子程序 2 24
LACLL addr16 長調用子程序 3 24
RET 子程序返回 1 24
RETI 中斷返回 1 24
AJMP addr11 絕對短轉移 2 24
LJMP addr16 長轉移 3 24
SJMP rel 相對轉移 2 24
JMP @A+DPTR 相對於DPTR的間接轉移 1 24
JZ rel 累加器為零轉移 2 24
JNZ rel 累加器非零轉移 2 24
CJNE A,direct,rel 累加器與直接地址單元比較,不等則轉移 3 24
CJNE A,#data8,rel 累加器與8位立即數比較,不等則轉移 3 24
CJNE Rn,#data8,rel 寄存器與8位立即數比較,不等則轉移 3 24
(相等則執行本指令的下一條)
CJNE @Ri,#data8,rel 間接RAM單元,不等則轉移 3 24
(但有時還想得知兩數比較之後哪個大,哪個小,
本條指令也具有這樣的功能,如果兩數不相等,
則CPU還會反映出哪個數大,哪個數小,
這是用CY(進位標志位)來實現的。
如果左邊的數(A,Rn,@Ri)大或者等於右邊的數(direct,#date8),則CY=0;否則CY=1)
DJNZ Rn,rel 寄存器減1,非零轉移 3 24
DJNZ direct,rel 直接地址單元減1,非零轉移 3 24
NOP 空操作 1 12
控制轉移指令共有17條,可分為「無條件轉移指令」 「有條件轉移指令」 「子程序調用指令」 及 「返回指令」。
5、布爾變數操作類指令
助記符 功能說明 位元組數 振盪周期
CLR C 清進位位 1 12
CLR bit 清直接地址位 2 12
SETB C 置進位位 1 12
SETB bit 置直接地址位 2 12
CPL C 進位位求反 1 12
CPL bit 直接地址位求反 2 12
ANL C,bit 進位位和直接地址位相「與」 2 24
ANL C,/bit 進位位和直接地址位的反碼相「與」 2 24
ORL C,bit 進位位和直接地址位相「或」 2 24
ORL C,/bit 進位位和直接地址位的反碼相「或」 2 24
MOV C,bit 直接地址位送入進位位 2 12
MOV bit,C 進位位送入直接地址位 2 24
JC rel 進位位為1則轉移(CY=O不轉移,=1轉移) 2 24
JNC rel 進位位為0則轉移(和上面相反) 2 24
JB bit,rel 直接地址位為1則轉移 3 24
JNB bit,rel 直接地址位為0則轉移 3 24
JBC bit,rel 直接地址位為1則轉移,該位清零 3 24
偽指令
助記符 功能說明
ORG 設置程序起始地址
END 標志源代碼結束
EQU 定義常數
SET 定義整型數
DATA 給位元組類型符號定值
BYTE 給位元組類型符號定值
WROD 給字類型符號定值
BIT 給位地址取名
ALTNAME 用自定義名取代保留字
DB 給一塊連續的存儲區裝載位元組型數據
DW 給一塊連續的存儲區裝載字型數據
DS 預留一個連續的存儲區或裝入指定位元組。
INCLUDE 將一個源文件插入程序中
TITLE 列表文件中加入標題行
NOLIST 匯編時不產生列表文件
NOCODE 條件匯編時,條件為假的不產生清單
⑹ 單片機的各種命令及解釋
你好,解析如下;
數據傳送類指令
MOV A, Rn 寄存器內容送入累加器
MOV A, direct 直接地址單元中的數據送入累加器
MOV A, @Ri 間接RAM中的數據送入累加器
MOV A, #data 立即送入累加器
MOV Rn, A 累加器內容送入寄存器
MOV Rn, direct 直接地址單元中的數據送入寄存器
MOV Rn, #data 立即數送入寄存器
MOV direct, A 累加器內容送入直接地址單元
MOV direct, Rn 寄存器內容送入直接地址單元
MOV direct, direct 直接地址單元中的數據送入另一個直接地址單元
MOV direct, @Ri 間接RAM中的數據送入直接地址單元
MOV direct, #data 立即數送入直接地址單元
MOV @Ri, A 累加器內容送間接RAM單元
MOV @Ri, direct 直接地址單元數據送入間接RAM單元
MOV @Ri, #data 立即數送入間接RAM單元
MOV DPTR,#data16 16位立即數送入地址寄存器
MOVC A, @A+DPTR 以DPTR為基地址變址定址單元中的數據送入累加器
MOVC A, @A+PC 以PC為基地址變址定址單元中的數據送入累加器
MOVX A, @Ri 邏輯上在外部的片內擴展RAM,(8位地址)送入累加器
MOVX A, @DPTR 邏輯上在外部的片內擴展RAM,(16位地址)送入累加器
MOVX @Ri, A 累加器送邏輯上在外部的片內擴展RAM(8位地址)
MOVX @DPTR, A 累加器送邏輯上在外部的片內擴展RAM(16位地址)
PUSH direct 直接地址單元中的數據壓入堆棧
POP direcct 出棧送直接地址單元
XCH A, Rn 寄存器與累加器交換
XCH A,direct 直接地址單元與累加器交換
XCH A, @Ri 間接RAM與累加器交換
XCHD A, @Ri 間接RAM的低半位元組與累加器交換
算術操作類指令
ADD A,Rn 寄存器內容送入累加器
ADD A,direct 直接地址單元中的數據加到累加器
ADD A,@Ri 間接RAM中的數據加到累加器
ADD A,#data 立即加到累加器加到累加器累加器
ADDC A,Rn 寄存器內容帶?位加到累加器
ADDC A,direct 直接地址單元的內容帶?位加到累加器
ADDC A,@Ri 間接RAM內容帶?位加到累加器
ADDC A,#data 立即數帶?位加到累加器
SUBB A,Rn 累加器帶借位減寄存器內容容
SUBB A,direct 累加器帶借位減直接地址單元的內容容
SUBB A,@Ri 累加器帶借位減間接RAM中的內容容
SUBB A,#data 累加器帶借位減立即數數
INC A 累加器加1
INC Rn 寄存器加1
INC direct 直接地址單元加1
INC @Ri 間接RAM單元加1
DEC A 累加器減1
DEC Rn 寄存器減1
DEC direct 直接地址單元減1
DEC @Ri 間接RAM單元減1
INC DPTR 地址寄存器DPTR加1
MUL AB A乘B
DIV AB A除B
DA A 累加器十制調整整
邏輯操作類指令
ANL A,Rn 累加器與寄存器相「與」
ANL A,direct 累加器與直接地址單元相「與」
ANL A,@Ri 累加器與間接RAM單元相「 與」
ANL A,#data 累加器與立即數相「與」
ANL direct, A 直接地址單元與累加器相「與」
ANL direct,#data 直接地址單元與立即數相「與」
ORL A, Rn 累加器與寄存器相「或」
ORL A,direct 累加器與直接地址單元相「或」
ORL A,@Ri 累加器與間接RAM單元相「或」
ORL A,#data 累加器與立即數相「或」
ORL direct, A 直接地址單元與累加器相「或」
ORL direct, #data 直接地址單元與立即數相「或」
XRL A, Rn 累加器與寄存器相「異或」
XRL A, d irect 累加器與直接地址單元相「異或」
XRL A, @Ri 累加器與間接RAM單元相「異或」
XRL A, # data 累加器與立即數相「異或」
XRL direct, A 直接地址單元與累加器相「異或」
XRL direct,#data 直接地址單元與立即數相「異或」
CLR A 累加器清「0」
CPL A 累加器求反反
RL A 累加器循環左移移
RLC A 累加器帶?位位循環左移移
RR A 累加器循環右移移
RRC A 累加器帶?位位循環右
SWAP A 累加器半位元組交換換
控制轉移類指令
ACALL addr11 絕對(短)調用子程序序
LCALL addr16 長調用子程序序
RET 子程序返回回
RETI 中斷返回回
AJMP addr11 絕對(短)轉移移
LJMP addr16 長轉移
SJMP re1 相對轉移
JMP @A+DPTR 相對於DPTR的間接轉移移
JZ re1 累加器為零轉移移
JNZ re1 累加器非零轉移移
CJNE A,direct,re1 累加器與直接地址單元比較,不相等則轉移移
CJNE A,#data,re1 累加器與立即數比較,不相等則轉移移
CJNE Rn,#data,re1 寄存器與立即數比較,不相等則轉移移
CJNE @Ri,#data,re1 間接RAM單元與立即數比較,不相等則轉移移
DJNZ Rn,re1 寄存器減1,非零轉移移
DJNZ direct,re1 直接地址單元減1,非零轉移移
NOP 空操作
布爾變數操作類指令
CLR C 清零進位位
CLR bit 清0直接地址位
SETB C 置1進位位
SETB bit 置1直接地址位
CPL C 進位位求反
CPL bit 直接地址位求反
ANL C, bit 進位位和直接地址位相「與」
ANL C, /bit 進位位和直接地址位的反碼相「與」
ORL C, bit ?位位和直接地址位相「或」
ORL C, /bit ?位位和直接地址位的反碼相「或」
MOV C, bit 直接地址位送入?位位位
MOV bit, C ?位位送入直接地址位
JC rel ?位位為1則轉移
JNC rel ?位位為0則轉移
JB bit, rel 直接地址位為1則轉移
JNB bit, rel 直接地址位為0則轉移
JBC bit, rel 直接地址位為1則轉移,該位清0
希望對你有幫助!給個好評吧,謝謝你了!
⑺ 51單片機指令
TF1是定時器1溢出標志位,$是取地址。JNB TF1,$ 實現的功能是查詢定時器1溢出標志位,如果為0,跳轉到本條指令繼續執行(即繼續查詢)直到定時時間到,TF1置位,才執行下一條指令。
給你注釋一下:
MOV TMOD,#10H //設置定時器工作方式(定時器1,工作方式2)
SETB TR1 //開啟定時器1
LOOP: MOV TH1,#0D8H //裝初值D8F0H 即55536,定時10mS(晶振12M)時間隨晶振改變
MOV TL1,#0F0H
JNB TF1,$ //查詢等待定時器1中斷
CLR TF1 //定時器溢出標志位清0(定時時間到後硬體自動給TF1置位,需軟體清0)
CPL P1.1 //P1.1取反
SJMP LOOP //跳到LOOP處循環(是個死循環)
該段程序實現的功能是:每隔10mS對P1.1取反一次。(10mS當然是晶振為12M的情況下)
⑻ 單片機的基本指令有哪些
不知道你是問的哪種單片機下面給你的是MCS-51的,希望對你有幫助,如有,麻煩採納,謝謝 數據傳送指令共有29條,數據傳送指令一般的操作是把源操作數傳送到目的操作數,指令執行完成後,源操作數不變,目的操作數等於源操作數。如果要求在進行數據傳送時,目的操作數不丟失,則不能用直接傳送指令,而採用交換型的數據傳送指令,數據傳送指令不影響標志C,AC和OV,但可能會對奇偶標志P有影響。
[1]. 以累加器A為目的操作數類指令(4條)
這4條指令的作用是把源操作數指向的內容送到累加器A。有直接、立即數、寄存器和寄存器間接定址方式:
MOV A,data ;(data)→(A) 直接單元地址中的內容送到累加器A
MOV A,#data ;#data→(A) 立即數送到累加器A中
MOV A,Rn ;(Rn)→(A) Rn中的內容送到累加器A中
MOV A,@Ri ;((Ri))→(A) Ri內容指向的地址單元中的內容送到累加器A
[2]. 以寄存器Rn為目的操作數的指令(3條)
這3條指令的功能是把源操作數指定的內容送到所選定的工作寄存器Rn中。有直接、立即和寄存器定址方式:
MOV Rn,data ;(data)→(Rn) 直接定址單元中的內容送到寄存器Rn中
MOV Rn,#data ;#data→(Rn) 立即數直接送到寄存器Rn中
MOV Rn,A ;(A)→(Rn) 累加器A中的內容送到寄存器Rn中
[3]. 以直接地址為目的操作數的指令(5條)
這組指令的功能是把源操作數指定的內容送到由直接地址data所選定的片內RAM中。有直接、立即、寄存器和寄存器間接4種定址方式:
MOV data,data ;(data)→(data) 直接地址單元中的內容送到直接地址單元
MOV data,#data ;#data→(data) 立即數送到直接地址單元
MOV data,A ;(A)→(data) 累加器A中的內容送到直接地址單元
MOV data,Rn ;(Rn)→(data) 寄存器Rn中的內容送到直接地址單元
MOV data,@Ri ;((Ri))→(data) 寄存器Ri中的內容指定的地址單元中數據送到直接地址單元
[4]. 以間接地址為目的操作數的指令(3條)
這組指令的功能是把源操作數指定的內容送到以Ri中的內容為地址的片內RAM中。有直接、立即和寄存器3種定址方式:
MOV @Ri,data ;(data)→((Ri)) 直接地址單元中的內容送到以Ri中的內容為地址的RAM單元
MOV @Ri,#data ;#data→((Ri)) 立即數送到以Ri中的內容為地址的RAM單元
MOV @Ri,A ;(A)→((Ri)) 累加器A中的內容送到以Ri中的內容為地址的RAM單元
[5]. 查表指令(2條)
這組指令的功能是對存放於程序存儲器中的數據表格進行查找傳送,使用變址定址方式:
MOVC A,@A+DPTR ;((A))+(DPTR)→(A) 表格地址單元中的內容送到累加器A中
MOVC A,@A+PC ;((PC))+1→(A),((A))+(PC)→(A) 表格地址單元中的內容送到累加器A中
[6]. 累加器A與片外數據存儲器RAM傳送指令(4條)
這4條指令的作用是累加器A與片外RAM間的數據傳送。使用寄存器定址方式:
MOVX @DPTR,A ;(A)→((DPTR)) 累加器中的內容送到數據指針指向片外RAM地址中
MOVX A, @DPTR ;((DPTR))→(A) 數據指針指向片外RAM地址中的內容送到累加器A中
MOVX A, @Ri ;((Ri))→(A) 寄存器Ri指向片外RAM地址中的內容送到累加器A中
MOVX @Ri,A ;(A)→((Ri)) 累加器中的內容送到寄存器Ri指向片外RAM地址中
[7]. 堆棧操作類指令(2條)
這4類指令的作用是把直接定址單元的內容傳送到堆棧指針SP所指的單元中,以及把SP所指單元的內容送到直接定址單元中。這類指令只有兩條,下述的第一條常稱為入棧操作指令,第二條稱為出棧操作指令。需要指出的是,單片機開機復位後,(SP)默認為07H,但一般都需要重新賦值,設置新的SP首址。入棧的第一個數據必須存放於SP+1所指存儲單元,故實際的堆棧底為SP+1所指的存儲單元。
PUSH data ;(SP)+1→(SP),(data)→(SP) 堆棧指針首先加1,直接定址單元中的數據送到堆棧指針SP所指的單元中
POP data ;(SP)→(data)(SP)-1→(SP), 堆棧指針SP所指的單元數據送到直接定址單元中,堆棧指針SP再進行減1操作
[8]. 交換指令(5條)
這5條指令的功能是把累加器A中的內容與源操作數所指的數據相互交換。
XCH A,Rn ;(A)←→(Rn)累加器與工作寄存器Rn中的內容互換
XCH A,@Ri ;(A)←→((Ri))累加器與工作寄存器Ri所指的存儲單元中的內容互換
XCH A,data ;(A)←→(data)累加器與直接地址單元中的內容互換
XCHD A,@Ri ;(A 3-0 )←→((Ri) 3-0 )累加器與工作寄存器Ri所指的存儲單元中的內容低半位元組互換
SWAP A ;(A 3-0 )←→(A 7-4 )累加器中的內容高低半位元組互換
[9]. 16位數據傳送指令(1條)
這條指令的功能是把16位常數送入數據指針寄存器。
MOV DPTR,#data16 ;#dataH→(DPH),#dataL→(DPL)16位常數的高8位送到DPH,低8位送到DPL
MCS-51算術運算指令
算術運算指令共有24條,算術運算主要是執行加、減、乘、除法四則運算。另外MCS-51指令系統中有相當一部分是進行加、減1操作,BCD碼的運算和調整,我們都歸類為運算指令。雖然MCS-51單片機的算術邏輯單元ALU僅能對8位無符號整數進行運算,但利用進位標志C,則可進行多位元組無符號整數的運算。同時利用溢出標志,還可以對帶符號數進行補碼運算。需要指出的是,除加、減1指令外,這類指令大多數都會對PSW(程序狀態字)有影響。這在使用中應特別注意。
[1]. 加法指令(4條)
這4條指令的作用是把立即數,直接地址、工作寄存器及間接地址內容與累加器A的內容相加,運算結果存在A中。
ADD A,#data ;(A)+#data→(A) 累加器A中的內容與立即數#data相加,結果存在A中
ADD A,data ;(A)+(data)→(A) 累加器A中的內容與直接地址單元中的內容相加,結果存在A中
ADD A,Rn ;(A)+(Rn)→(A) 累加器A中的內容與工作寄存器Rn中的內容相加,結果存在A中
ADD A,@Ri ;(A)+((Ri))→(A) 累加器A中的內容與工作寄存器Ri所指向地址單元中的內容相加,結果存在A中
[2]. 帶進位加法指令(4條)
這4條指令除與[1]功能相同外,在進行加法運算時還需考慮進位問題。
ADDC A,data ;(A)+(data)+(C)→(A) 累加器A中的內容與直接地址單元的內容連同進位位相加,結果存在A中
ADDC A,#data ;(A)+#data +(C)→(A) 累加器A中的內容與立即數連同進位位相加,結果存在A中
ADDC A,Rn ;(A)+Rn+(C)→(A) 累加器A中的內容與工作寄存器Rn中的內容、連同進位位相加,結果存在A中
ADDC A,@Ri ;(A)+((Ri))+(C)→(A) 累加器A中的內容與工作寄存器Ri指向地址單元中的內容、連同進位位相加,結果存在A中
[3]. 帶借位減法指令(4條)
這組指令包含立即數、直接地址、間接地址及工作寄存器與累加器A連同借位位C內容相減,結果送回累加器A中。
這里我們對借位位C的狀態作出說明,在進行減法運算中,CY=1表示有借位,CY=0則無借位。OV=1聲明帶符號數相減時,從一個正數減去一個負數結果為負數,或者從一個負數中減去一個正數結果為正數的錯誤情況。在進行減法運算前,如果不知道借位標志位C的狀態,則應先對CY進行清零操作。
SUBB A,data ;(A)-(data) - (C)→(A) 累加器A中的內容與直接地址單元中的內容、連同借位位相減,結果存在A中
SUBB A,#data ;(A)-#data -(C)→(A) 累加器A中的內容與立即數、連同借位位相減,結果存在A中
SUBB A,Rn ;(A)-(Rn) -(C)→(A) 累加器A中的內容與工作寄存器中的內容、連同借位位相減,結果存在A中
SUBB A,@Ri ;(A)-((Ri)) -(C)→(A) 累加器A中的內容與工作寄存器Ri指向的地址單元中的內容、連同借位位相減,結果存在A中
[4]. 乘法指令(1條)
這個指令的作用是把累加器A和寄存器B中的8位無符號數相乘,所得到的是16位乘積,這個結果低8位存在累加器A,而高8位存在寄存器B中。如果OV=1,說明乘積大於FFH,否則OV=0,但進位標志位CY總是等於0。
MUL AB ;(A)×(B)→(A)和(B) 累加器A中的內容與寄存器B中的內容相乘,結果存在A、B中
[5]. 除法指令(1條)
這個指令的作用是把累加器A的8位無符號整數除以寄存器B中的8位無符號整數,所得到的商存在累加器A,而余數存在寄存器B中。除法運算總是使OV和進位標志位CY等於0。如果OV=1,表明寄存器B中的內容為00H,那麼執行結果為不確定值,表示除法有溢出。
DIV AB ;(A)÷(B)→(A)和(B) 累加器A中的內容除以寄存器B中的內容,所得到的商存在累加器A,而余數存在寄存器B中。
[6]. 加1指令(5條)
這5條指令的的功能均為原寄存器的內容加1,結果送回原寄存器。上述提到,加1指令不會對任何標志有影響,如果原寄存器的內容為FFH,執行加1後,結果就會是00H。這組指令共有直接、寄存器、寄存器減間址等定址方式:
INC A ;(A)+1→(A) 累加器A中的內容加1,結果存在A中
INC data ;(data)+1→(data) 直接地址單元中的內容加1,結果送回原地址單元中
INC @Ri ;((Ri))+1→((Ri)) 寄存器的內容指向的地址單元中的內容加1,結果送回原地址單元中
INC Rn ;(Rn)+1→(Rn)寄存器Rn的內容加1,結果送回原地址單元中
INC DPTR ;(DPTR)+1→(DPTR)數據指針的內容加1,結果送回數據指針中
在INC data這條指令中,如果直接地址是I/O,其功能是先讀入I/O鎖存器的內容,然後在CPU進行加1操作,再輸出到I/O上,這就是「讀—修改—寫」操作。
[7]. 減1指令(4條)
這組指令的作用是把所指的寄存器內容減1,結果送回原寄存器,若原寄存器的內容為00H,減1後即為FFH,運算結果不影響任何標志位,這組指令共有直接、寄存器、寄存器間址等定址方式,當直接地址是I/O口鎖存器時,「讀—修改—寫」操作與加1指令類似。
DEC A ;(A)-1→(A)累加器A中的內容減1,結果送回累加器A中
DEC data ;(data)-1→(data)直接地址單元中的內容減1,結果送回直接地址單元中
DEC @Ri ;((Ri))-1→((Ri))寄存器Ri指向的地址單元中的內容減1,結果送回原地址單元中
DEC Rn ;(Rn)-1→(Rn)寄存器Rn中的內容減1,結果送回寄存器Rn中
[8]. 十進制調整指令(1條)
在進行BCD碼運算時,這條指令總是跟在ADD或ADDC指令之後,其功能是將執行加法運算後存於累加器A中的結果進行調整和修正。
DA A
MCS-51邏輯運算及移位指令
邏輯運算和移位指令共有25條,有與、或、異或、求反、左右移位、清0等邏輯操作,有直接、寄存器和寄存器間址等定址方式。這類指令一般不影響程序狀態字(PSW)標志。
[1]. 循環移位指令(4條)
這4條指令的作用是將累加器中的內容循環左或右移一位,後兩條指令是連同進位位CY一起移位。
RL A ;累加器A中的內容左移一位
RR A ;累加器A中的內容右移一位
RLC A ;累加器A中的內容連同進位位CY左移一位
RRC A ;累加器A中的內容連同進位位CY右移一位
[2]. 累加器半位元組交換指令(1條)
這條指令是將累加器中的內容高低半位元組互換,這在上一節中內容已有介紹。
SWAP A ; 累加器中的內容高低半位元組互換
[3]. 求反指令(1條)
這條指令將累加器中的內容按位取反。
CPL A ; 累加器中的內容按位取反
[4]. 清零指令(1條)
這條指令將累加器中的內容清0。
CLR A ; 0→(A),累加器中的內容清0
[5]. 邏輯與操作指令(6條)
這組指令的作用是將兩個單元中的內容執行邏輯與操作。如果直接地址是I/O地址,則為「讀—修改—寫」操作。
ANL A,data ;累加器A中的內容和直接地址單元中的內容執行與邏輯操作。結果存在寄存器A中。
ANL data,#data ;直接地址單元中的內容和立即數執行與邏輯操作。結果存在直接地址單元中。
ANL A,#data ;累加器A的內容和立即數執行與邏輯操作。結果存在累加器A中。
ANL A,Rn ;累加器A的內容和寄存器Rn中的內容執行與邏輯操作。結果存在累加器A中。
ANL data,A ;直接地址單元中的內容和累加器A的內容執行與邏輯操作。結果存在直接地址單元中。
ANL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執行與邏輯操作。結果存在累加器A中。
[6]. 邏輯或操作指令(6條)
這組指令的作用是將兩個單元中的內容執行邏輯或操作。如果直接地址是I/O地址,則為「讀—修改—寫」操作。
ORL A,data ;累加器A中的內容和直接地址單元中的內容執行邏輯或操作。結果存在寄存器A中。
ORL data,#data ;直接地址單元中的內容和立即數執行邏輯或操作。結果存在直接地址單元中。
ORL A,#data ;累加器A的內容和立即數執行邏輯或操作。結果存在累加器A中。
ORL A,Rn ;累加器A的內容和寄存器Rn中的內容執行邏輯或操作。結果存在累加器A中。
ORL data,A ;直接地址單元中的內容和累加器A的內容執行邏輯或操作。結果存在直接地址單元中。
ORL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執行邏輯或操作。結果存在累加器A中。
[7]. 邏輯異或操作指令(6條)
這組指令的作用是將兩個單元中的內容執行邏輯異或操作。如果直接地址是I/O地址,則為「讀—修改—寫」操作。
XRL A,data ;累加器A中的內容和直接地址單元中的內容執行邏輯異或操作。結果存在寄存器A中。
XRL data,#data ;直接地址單元中的內容和立即數執行邏輯異或操作。結果存在直接地址單元中。
XRL A,#data ;累加器A的內容和立即數執行邏輯異或操作。結果存在累加器A中。
XRL A,Rn ;累加器A的內容和寄存器Rn中的內容執行邏輯異或操作。結果存在累加器A中。
XRL data,A ;直接地址單元中的內容和累加器A的內容執行邏輯異或操作。結果存在直接地址單元中。
XRL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執行邏輯異或操作。結果存在累加器A中。
MCS-51控制轉移指令
控制轉移指令用於控製程序的流向,所控制的范圍即為程序存儲器區間,MCS-51系列單片機的控制轉移指令相對豐富,有可對64kB程序空間地址單元進行訪問的長調用、長轉移指令,也有可對2kB位元組進行訪問的絕對調用和絕對轉移指令,還有在一頁范圍內短相對轉移及其它無條件轉移指令,這些指令的執行一般都不會對標志位有影響。
[1]. 無條件轉移指令(4條)
這組指令執行完後,程序就會無條件轉移到指令所指向的地址上去。長轉移指令訪問的程序存儲器空間為16地址64kB,絕對轉移指令訪問的程序存儲器空間為11位地址2kB空間。
LJMP addr16 ;addr16→(PC),給程序計數器賦予新值(16位地址)
AJMP addr11 ;(PC)+2→(PC),addr11→(PC 10-0 )程序計數器賦予新值(11位地址),(PC 15-11 )不改變
SJMP rel ;(PC)+ 2 + rel→(PC)當前程序計數器先加上2再加上偏移量給程序計數器賦予新值
JMP @A+DPTR ;(A)+ (DPTR)→(PC),累加器所指向地址單元的值加上數據指針的值給程序計數器賦予新值
[2]. 條件轉移指令(8條)
程序可利用這組豐富的指令根據當前的條件進行判斷,看是否滿足某種特定的條件,從而控製程序的轉向。
JZ rel ; A=0,(PC)+ 2 + rel→(PC),累加器中的內容為0,則轉移到偏移量所指向的地址,否則程序往下執行
JNZ rel ; A≠0,(PC)+ 2 + rel→(PC),累加器中的內容不為0,則轉移到偏移量所指向的地址,否則程序往下執行
CJNE A, data, rel ; A≠(data),(PC)+ 3 + rel→(PC),累加器中的內容不等於直接地址單元的內容,則轉移到偏移量所指向的地址,否則程序往下執行
CJNE A, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),累加器中的內容不等於立即數,則轉移到偏移量所指向的地址,否則程序往下執行
CJNE Rn, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Rn中的內容不等於立即數,則轉移到偏移量所指向的地址,否則程序往下執行
CJNE @Ri, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Ri指向地址單元中的內容不等於立即數,則轉移到偏移量所指向的地址,否則程序往下執行
DJNZ Rn, rel ; (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)工作寄存器Rn減1不等於0,則轉移到偏移量所指向的地址,否則程序往下執行
DJNZ data, rel ; (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)直接地址單元中的內容減1不等於0,則轉移到偏移量所指向的地址,否則程序往下執行
[3]. 子程序調用指令(1條)
子程序是為了便於程序編寫,減少那些需反復執行的程序佔用多餘的地址空間而引入的程序分支,從而有了主程序和子程序的概念,需要反復執行的一些程序,我們在編程時一般都把它們編寫成子程序,當需要用它們時,就用一個調用命令使程序按調用的地址去執行,這就需要子程序的調用指令和返回指令。
LCALL addr16 ; 長調用指令,可在64kB空間調用子程序。此時(PC)+ 3→(PC),(SP)+ 1→(SP),(PC 7-0 )→(SP),(SP)+ 1→(SP),(PC 15-8 )→(SP),addr16→(PC),即分別從堆棧中彈出調用子程序時壓入的返回地址
ACALL addr11 ; 絕對調用指令,可在2kB空間調用子程序,此時(PC)+ 2→(PC),(SP)+ 1→(SP),(PC 7-0 )→(SP),(SP)+ 1→(SP),(PC 15-8 )→(SP),addr11→(PC 10-0 )
RET ; 子程序返回指令。此時(SP)→(PC 15-8 ),(SP)- 1→(SP),(SP)→(PC 7-0 ),(SP)- 1→(SP)
RETI ; 中斷返回指令,除具有RET功能外,還具有恢復中斷邏輯的功能,需注意的是,RETI指令不能用RET代替
[4]. 空操作指令(1條)
這條指令將累加器中的內容清0。
NOP ; 這條指令除了使PC加1,消耗一個機器周期外,沒有執行任何操作。可用於短時間的延時
MCS-51布爾變數操作指令
布爾處理功能是MCS-51系列單片機的一個重要特徵,這是出於實際應用需要而設置的。布爾變數也即開關變數,它是以位(bit)為單位進行操作的。
在物理結構上,MCS-51單片機有一個布爾處理機,它以進位標志做為累加位,以內部RAM可定址的128個為存儲位。
既然有布爾處理機功能,所以也就有相應的布爾操作指令集,下面我們分別談論。
[1]. 位傳送指令(2條)
位傳送指令就是可定址位與累加位CY之間的傳送,指令有兩條。
MOV C,bit ;bit→CY,某位數據送CY
MOV bit,C ;CY→bit,CY數據送某位
[2]. 位置位復位指令(4條)
這些指令對CY及可定址位進行置位或復位操作,共有四條指令。
CLR C ; 0→CY,清CY
CLR bit ; 0→bit,清某一位
SETB C ; 1→CY,置位CY
SETB bit ; 1→bit,置位某一位
[3]. 位運算指令(6條)
位運算都是邏輯運算,有與、或、非三種指令,共六條。
ANL C,bit ;(CY)∧(bit)→CY
ANL C,/bit ;(CY)∧( )→CY
ORL C,bit ;(CY)∨(bit)→CY
ORL C,/bit ;(CY)∧( )→CY
CPL C ;( )→CY
CPL bit ;( )→bir
[4]. 位控制轉移指令(5)
位控制轉移指令是以位的狀態作為實現程序轉移的判斷條件,介紹如下:
JC rel ; (CY)=1轉移,(PC)+2+rel→PC,否則程序往下執行,(PC)+2→PC。
JNC rel ; (CY)=0轉移,(PC)+2+rel→PC,否則程序往下執行,(PC)+2→PC。
JB bit, rel ; 位狀態為1轉移。
JNB bit, rel ; 位狀態為0轉移。
JBC bit, rel ; 位狀態為1轉移,並使該位清「0」。
後三條指令都是三位元組指令,如果條件滿足,(PC)+3+rel→PC,否則程序往下執行,(PC)+3→PC
⑼ 單片機的常用指令有哪些medwin
單片機指令功能一覽表
助記符 代碼 說明
MOV A,Rn E8~EF 寄存器A
MOV A,direct E5 dircet 直接位元組送A
MOV A,@Ri ER~E7 間接RAM送A
MOV A,#data 74 data 立即數送A
MOV Rn,A F8~FF A送寄存器
MOV Rn,dircet A8~AF dircet 直接位元組送寄存器
MOV Rn,#data 78~7F data 立即數送寄存器
MOV dircet,A F5 dircet A送直接位元組
MOV dircet,Rn 88~8F dircet 寄存器送直接位元組
MOV dircet1,dircet2 85 dircet1 dircet2 直接位元組送直接位元組
MOV dircet,@Ro 86~87 間接RAM送直接位元組
MOV dircet,#data 75 dircet data 立即數送直接位元組
MOV @Ri,A F6~F7 A送間接RAM
MOV @Ri,#data 76~77 data 直接位元組送間接RAM
MOV @Ri,#data 76~77 data 立即數送間接RAM
MOV DPTR,#data16 90 data 15~8 16位常數送數據指針
data7~0
MOVC A,@A+DPTR 93 由((A)+(DPTR))定址的程序存貯
器位元組選A
MOVC A,@A+PC 83 由((A)+(PC));定址的程序存貯器位元組送A
MOVX A,@Ri E2~E3 送外部數據(8位地址)送A
MOVX A,@DPTR E0 送外部數據(16位地址)送A
MOVX @Ri,A F2~F3 A送外部數據(8位地址)
MOVX @DPTR,A F0 A送外部數據(16位地址)
PUSH dircet C0 dircet 直接位元組進棧,SP加1
POP dircet D0 dircet 直接位元組退棧,SP減1
XCH A,Rn C8~CF 交換A和寄存器
XCH A,dircet C5 dircet 交換A和直接位元組
XCH A,@Ri C6~C7 交換A和間接RAM
XCH A,@Ri D6~D7 交換A和間接RAM的低位
SWAP A C4
算術操作 (A的二個半位元組交換)
ADD A,Rn 28~2F 寄存器加到A
ADD A,dircet 25 dircet 直接位元組加到A
ADD A,@Ri 26~27 間接RAM加到A
ADD A,#data 24data 立即數加到A
ADD A,Rn 38~3F 寄存器和進位位加到A
ADD A,dircet 35dircet 直接位元組和進位位加到A
ADD A,@Ri 36~37 間接位元組和進位位加到A
ADD A,data 34 data 立即數和進位位加到A
ADD A,Rn 98~9F A減去寄存器和進位位
ADD A,dircet 95 dircet A減去直接位元組和進位位
ADD A,@Ri 36~37 間接RAM和進位位加到A
ADD A,data 34 data 立即數和進位位加到A
SUBB A,Rn 98~9F A減去寄存器和進位位
SUBB A,dircet 95 dircet A減去直接位元組和進位位
SUBB A,@Ri 96~97 A減去間接RAM和進位位
SUBB A,#data 94 data A減去立即數和進位位
INC A 04 A加1
INC Rn 08~0F 寄存器加1
INC dircet 05 dircet 直接位元組加1
INC @Ri 06~07 間接RAM加1
DEC A 14 A減1
DEC Rn 18~1F 寄存器減1
DEC dircet 15 dircet 直接位元組減1
DEC @Ri 16~17 間接RAM減1
INC DPTR A3 數據指針加1
MUL AB A4 A乘以B
DIV AB 84 A除以B
DA A D4 A的十進制加法調整
邏輯操作
ANL A,Rn 58~5F 寄存器「與」到A
ANL A,dircet 55 dircet 直接位元組「與」到A
ANL A,@Ri 56~57 間接RAm「與」到A
ANL A,#data 54 data 立即數「與」到A
ANL dircet A 52 dircet A「與」到直接位元組
ANL dircet,#data 53 dircet data 立即數「與」到直接位元組
ORL A,Rn 48~4F 寄存器「或」到A
ORL A,dircet 45 dircet 直接位元組「或」到A
ORL A,@Ri 46~47 間接RAM「或」到A
ORL A,#data 44 data 立即數「或」到A
ORL dircet,A 42 dircet A「或」到直接位元組
ORL dircet,#data 43 dircet data 立即數「或」到直接位元組
XRL A,Rn 68~6F 寄存器「異或」到A
XRL A,dircet 65 dircet 直接位元組「異或」到A
XRL A,@Ri 66~67 間接RAM「異或」到A
XRL A,#data 64 data 立即數「異或」到A
XRL dircet A 62 dircet A「異或」到直接位元組
XRL dircet,#data 63 dircet data 立即數「異或」到直接位元組
CLR A E4 清零
CPL A F4 A取反
RL A 23 A左環移
RLC A 33 A通過進位左環移
RR A 03 A右環移
RRC A 13 A通過進位右環移
控製程序轉移
ACALL addr 11 *1 addr(a7~a0) 絕對子程序調用
LCALL addr 16 12 addr(15~8) 長子程序調用
addr(7~0)
RET 22 子程序調用返回
RETI addr 11 32 中斷調用返回
AJMP addr 11 △1 addr(a7~a6) 絕對轉移
LJMP addr 16 02addr(15~8) 長轉移
addr(7~0)
SJMP rel 80 rel 短轉移,相對轉移
JMP @A+DPTR 73 相對於DPTR間接轉移
JZ rel 60 rel A為零轉移
JNZ rel 70 rel A為零轉移
CJNE A,dircet,rel B5 dircet rel 直接位元組與A比較,不等則轉移
CJNE A,#data,rel B4 data rel 立即數與A比較,不等則轉移
CJNE A,Rn,#data,rel B8~BF data rel 立即數與寄存器比較,不等則轉移
CJNE @Ri,#data,rel B6~B7 data rel 立即數與間接RAM比較,不等則轉移
DJNZ Rn,rel D8~DF rel 寄存器減1,不為零則轉移
DJNZ dircet,rel B5 dircet rel 直接位元組減1,不為零則轉移
NOP 00 空操作
*=a10a9a8l
△=a10a9a80
布爾變數操作
CLR C C3 清零進位
CLR bit C2 清零直接位
SETB C D3 置位進位
SETB bit D2 置位直接位
CPL C B3 進位取反
CPL bit B2 直接位取反
ANL C,bit 82 dit 直接數「與」到進位
ANL C,/bit B0 直接位的反「與」到進位
ORL C,bit 72 bit 直接位「或」到進位
ORL C,/bit A0 bit 直接位的反「或」到進位
MOV C,bit A2 bit 直接位送進位
MOV bit,C 92 bit 進位送直接位
JC rel 40 rel 進位位為1轉移
JNC rel 50 rel 進位位為0轉移
JB bit,rel 20 bit rel 直接位為1相對轉移
JNB bit,rel 30 bit rel 直接位為0相對轉移
JBC bit,rel 10 bit rel 直接位為1相對轉移,然後清零該位
[1]. 循環移位指令(4條)
RL A ;累加器A中的內容左移一位
RR A ;累加器A中的內容右移一位
RLC A ;累加器A中的內容連同進位位CY左移一位
RRC A ;累加器A中的內容連同進位位CY右移一位
[2]. 累加器半位元組交換指令(1條)
SWAP A ; 累加器中的內容高低半位元組互換
[3]. 求反指令(1條)
CPL A ; 累加器中的內容按位取反
[4]. 清零指令(1條)
CLR A ; 0→(A),累加器中的內容清0
[5]. 邏輯與操作指令(6條)
ANL A,data ;累加器A中的內容和直接地址單元中的內容執行與邏輯操作。結果存在寄存器A中。
ANL data,#data ;直接地址單元中的內容和立即數執行與邏輯操作。結果存在直接地址單元中。
ANL A,#data ;累加器A的內容和立即數執行與邏輯操作。結果存在累加器A中。
ANL A,Rn ;累加器A的內容和寄存器Rn中的內容執行與邏輯操作。結果存在累加器A中。
ANL data,A ;直接地址單元中的內容和累加器A的內容執行與邏輯操作。結果存在直接地址單元中。
ANL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執行與邏輯操作。結果存在累加器A中。
[6]. 邏輯或操作指令(6條)
這組指令的作用是將兩個單元中的內容執行邏輯或操作。如果直接地址是I/O地址,則為「讀—修改—寫」操作。
ORL A,data ;累加器A中的內容和直接地址單元中的內容執行邏輯或操作。結果存在寄存器A中。
ORL data,#data ;直接地址單元中的內容和立即數執行邏輯或操作。結果存在直接地址單元中。
ORL A,#data ;累加器A的內容和立即數執行邏輯或操作。結果存在累加器A中。
ORL A,Rn ;累加器A的內容和寄存器Rn中的內容執行邏輯或操作。結果存在累加器A中。
ORL data,A ;直接地址單元中的內容和累加器A的內容執行邏輯或操作。結果存在直接地址單元中。
ORL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執行邏輯或操作。結果存在累加器A中。
[7]. 邏輯異或操作指令(6條)
XRL A,data ;累加器A中的內容和直接地址單元中的內容執行邏輯異或操作。結果存在寄存器A中。
XRL data,#data ;直接地址單元中的內容和立即數執行邏輯異或操作。結果存在直接地址單元中。
XRL A,#data ;累加器A的內容和立即數執行邏輯異或操作。結果存在累加器A中。
XRL A,Rn ;累加器A的內容和寄存器Rn中的內容執行邏輯異或操作。結果存在累加器A中。
XRL data,A ;直接地址單元中的內容和累加器A的內容執行邏輯異或操作。結果存在直接地址單元中。
XRL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執行邏輯異或操作。結果存在累加器A中
控制轉移類指令分析
[1]. 無條件轉移指令(4條)
LJMP addr16 ;addr16→(PC),給程序計數器賦予新值(16位地址)
AJMP addr11 ;(PC)+2→(PC),addr11→(PC10-0)程序計數器賦予新值(11位地址),(PC15-11)不改變
SJMP rel ;(PC)+ 2 + rel→(PC)當前程序計數器先加上2再加上偏移量給程序計數器賦予新值
JMP @A+DPTR ;(A)+ (DPTR)→(PC),累加器所指向地址單元的值加上數據指針的值給程序計數器賦予新值
[2]. 條件轉移指令(8條)
JZ rel ; A=0,(PC)+ 2 + rel→(PC),累加器中的內容為0,則轉移到偏移量所指向的地址,否則程序往下執行
JNZ rel ; A≠0,(PC)+ 2 + rel→(PC),累加器中的內容不為0,則轉移到偏移量所指向的地址,否則程序往下執行
CJNE A, data, rel ; A≠(data),(PC)+ 3 + rel→(PC),累加器中的內容不等於直接地址單元的內容,則轉移到偏移量所指向的地址,否則程序往下執行
CJNE A, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),累加器中的內容不等於立即數,則轉移到偏移量所指向的地址,否則程序往下執行
CJNE Rn, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Rn中的內容不等於立即數,則轉移到偏移量所指向的地址,否則程序往下執行
CJNE @Ri, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Ri指向地址單元中的內容不等於立即數,則轉移到偏移量所指向的地址,否則程序往下執行
布爾變數操作指令分析
[1]. 位傳送指令(2條)
MOV C,bit ;bit→CY,某位數據送CY
MOV bit,C ;CY→bit,CY數據送某位
[2]. 位置位復位指令(4條)
CLR C ; 0→CY,清CY
CLR bit ; 0→bit,清某一位
SETB C ; 1→CY,置位CY
SETB bit ; 1→bit,置位某一位
[3]. 位運算指令(6條)
ANL C,bit ;(CY)∧(bit)→CY
ANL C,/bit ;(CY)∧( )→CY
ORL C,bit ;(CY)∨(bit)→CY
ORL C,/bit ;(CY)∧()→CY
CPL C ;()→CY
CPL bit ;()→bir
[4]. 位控制轉移指令(5)
JC rel ; (CY)=1轉移,(PC)+2+rel→PC,否則程序往下執行,(PC)+2→PC。
JNC rel ; (CY)=0轉移,(PC)+2+rel→PC,否則程序往下執行,(PC)+2→PC。
JB bit, rel ; 位狀態為1轉移。
JNB bit, rel ; 位狀態為0轉移。
JBC bit, rel ; 位狀態為1轉移,並使該位清「0」。
⑽ 單片機大佬教我幾個指令吧
對於51單片機的指令 先寫入R1存儲要訪問的ram地址
1:MOVC A,@A+DPTR 先A==0再DPL和DPH寫入訪問程序存儲器地址
2:MOV A,@R1 讀R1指向RAM地址的值 , MOV @R1,A 寫R1指向RAM地址的值
3:MOVX A,@R1 讀R1指向外部RAM地址的值 ,MOVX @R1,A 寫R1指向外部RAM地址的值
4:棧地址在SP中操作SP命令用PUSH ACC 將ACC的內容壓棧, POP ACC出棧到ACC寄存器
5:特殊功能例如 MOV A,90H讀P1口值到A寄存器, MOV 90H,A 將A寄存器值寫入P1口