導航:首頁 > 操作系統 > 51單片機指令

51單片機指令

發布時間:2022-04-28 02:38:29

⑴ 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 條件匯編時,條件為假的不產生清單

⑵ 51單片機單位元組指令有哪些

1.ADD A,Rn 將累加器與寄存器的內容相加,結果存回累加器
2.ADD A,@Ri 將累加器與間接地址的內容相加,結果存回累加器
3.ADDC A,Rn 將累加器與寄存器的內容及進位C相加,結果存回累加器
4.ADDC A,@Ri 將累加器與間接地址的內容及進位C相加,結果存回累加器
5.SUBB A,Rn 將累加器的值減去寄存器的值減借位C,結果存回累加器
6.SUBB A,@Ri 將累加器的值減間接地址的值減借位C,結果存回累加器
7.INC A 將累加器的值加1
8.INC Rn 將寄存器的值加l
9.INC @Ri 將間接地址的內容加1
10.INC DPTR 數據指針寄存器值加1
11.DEC A 將累加器的值減1
12.DEC Rn 將寄存器的值減1
13.DEC @Ri 1 1 將間接地址的內容減1
14.MUL AB 將累加器的值與B寄存器的值相乘,乘積的低位位元組存回累加器,高位位元組存回B寄存器
15.DIV AB 將累加器的值除以B寄存器的值,結果的商存回累加器,余數存回B寄存器
16.DA A 將累加器A作十進制調整,
若(A) 3-0>9或(AC)=1,則(A) 3-0←(A)3-0+6
若(A) 7-4>9或 (C)=1,則(A) 7-4←(A)7-4+6
17.ANL A,Rn 將累加器的值與寄存器的值做AND的邏輯判斷,結果存回累加器
18.ANL A,@Ri 將累加器的值與間接地址的內容做AND的邏輯判斷,結果存回累加器
19.ORL A,Rn 將累加器的值與寄存器的值做OR的邏輯判斷,結果存回累加器
20.ORL A,@Ri 將累加器的值與間接地址的內容做OR的邏輯判斷,結果存回累加器
21.XRL A,Rn 將累加器的值與寄存器的值做XOR的邏輯判斷,結果存回累加器
22.XRL A,@Ri 將累加器的值與間接地扯的內容做XOR的邏輯判斷,結果存回累加器
23.CLR A 清除累加器的值為0
24.CPL A 將累加器的值反相
25.RL A 將累加器的值左移一位
26.RLC A 將累加器含進位C左移一位
27.RR A 將累加器的值右移一位
28.RRC A 將累加器含進位C右移一位
29.SWAP A 將累加器的高4位與低4位的內容交換。(A)3-0←(A)7-4
數據轉移指令 MOV A,Rn 將寄存器的內容載入累加器
30.MOV A,@Ri 將間接地址的內容載入累加器
31.MOV Rn,A 將累加器的內容載入寄存器
32.MOV @Ri,A 將累加器的內容存入某間接地址
33.MOVC A,@A+DPTR (A) ←((A)+(DPTR))
累加器的值再加數據指針寄存器的值為其所指定地址,將該地址的內容讀入累加器
34.MOVC A,@A+PC (PC)←(PC)+1;(A)←((A)+(PC))累加器的值加程序計數器的值作為其所指定地址,將該地址的內容讀入累加器
35.MOVX A,@Ri 將間接地址所指定外部存儲器的內容讀入累加器(8位地址)
36.MOVX A,@DPTR 將數據指針所指定外部存儲器的內容讀入累加器(16位地址)
37.MOVX @Ri,A 將累加器的內容寫入間接地址所指定的外部存儲器(8位地址)
38.MOVX @DPTR,A 將累加器的內容寫入數據指針所指定的外部存儲器(16位地址)
39.XCH A,Rn 將累加器的內容與寄存器的內容互換
40.XCH A,@Ri 將累加器的值與間接地址的內容互換
41.XCHD A,@Ri 將累加器的低4位與間接地址的低4位互換
42.CLR C 清除進位C為0
43.SETB C 設定進位C為1
44.CPL C 將進位C的值反相
45.RET 從子程序返回
46.RETI 從中斷子程序返回
47.JMP @A+DPTR 跳至累加器的內容加數據指針所指的相關地址
48.NOP 無動作

⑶ 51單片機的指令英文全名

MOV(英文為Move):對內部數據寄存器RAM和特殊功能寄存器SFR的數據進行傳送;
MOVC(Move Code)讀取程序存儲器數據表格的數據傳送;
MOVX (Move External RAM) 對外部RAM的數據傳送;
XCH (Exchange) 位元組交換;
XCHD (Exchange low-order Digit) 低半位元組交換;
PUSH (Push onto Stack) 入棧;
POP (Pop from Stack) 出棧;

(2)算術運算類指令(8種助記符)
ADD(Addition) 加法;
ADDC(Add with Carry) 帶進位加法;
SUBB(Subtract with Borrow) 帶借位減法;
DA(Decimal Adjust) 十進制調整;
INC(Increment) 加1;
DEC(Decrement) 減1;
MUL(Multiplication、Multiply) 乘法;
DIV(Division、Divide) 除法;

(3)邏輯運算類指令(10種助記符)
ANL(AND Logic) 邏輯與;
ORL(OR Logic) 邏輯或;
XRL(Exclusive-OR Logic) 邏輯異或;
CLR(Clear) 清零;
CPL(Complement) 取反;
RL(Rotate left) 循環左移;
RLC(Rotate Left throught the Carry flag) 帶進位循環左移;
RR(Rotate Right) 循環右移;
RRC (Rotate Right throught the Carry flag) 帶進位循環右移;
SWAP (Swap) 低4位與高4位交換;

(4)控制轉移類指令(17種助記符)
ACALL(Absolute subroutine Call)子程序絕對調用;
LCALL(Long subroutine Call)子程序長調用;
RET(Return from subroutine)子程序返回;
RETI(Return from Interruption)中斷返回;
SJMP(Short Jump)短轉移;
AJMP(Absolute Jump)絕對轉移;
LJMP(Long Jump)長轉移;
CJNE (Compare Jump if Not Equal)比較不相等則轉移;
DJNZ (Decrement Jump if Not Zero)減1後不為0則轉移;
JZ (Jump if Zero)結果為0則轉移;
JNZ (Jump if Not Zero) 結果不為0則轉移;
JC (Jump if the Carry flag is set)有進位則轉移;
JNC (Jump if Not Carry)無進位則轉移;
JB (Jump if the Bit is set)位為1則轉移;
JNB (Jump if the Bit is Not set) 位為0則轉移;
JBC(Jump if the Bit is set and Clear the bit) 位為1則轉移,並清除該位;
NOP (No Operation) 空操作;
(5)位操作指令(1種助記符)
SETB(Set Bit) 位 置1

基本是全的,個別有的沒有找到。雖說用到的機會很小,但是對於理解指令功能很有幫住

⑷ MCS-51單片機的輸入輸出指令有哪些

單片機的指令無所謂輸入還是輸出,一般稱為傳送指令,主要有三個:MOV、MOVX和MOVC,其中MOVC是只讀不寫的。

⑸ 51單片機指令集

51匯編語言指令集
符號定義表

符號 含義
Rn R0~R7寄存器n=0~7
Direct 直接地址,內部數據區的地址RAM(00H~7FH)
SFR(80H~FFH) B,ACC,PSW,IP,P3,IE,P2,SCON,P1,TCON,P0
@Ri 間接地址Ri=R0或R1 8051/31RAM地址(00H~7FH) 8052/32RAM地址(00H~FFH)
#data 8位常數
#data16 16位常數
Addr16 16位的目標地址
Addr11 11位的目標地址
Rel 相關地址
bit 內部數據RAM(20H~2FH),特殊功能寄存器的直接地址的位

指令介紹

指令 位元組 周期 動作說明
算數運算指令
1.ADD A,Rn 1 1 將累加器與寄存器的內容相加,結果存回累加器
2.ADD A,direct 2 1 將累加器與直接地址的內容相加,結果存回累加器
3.ADD A,@Ri 1 1 將累加器與間接地址的內容相加,結果存回累加器
4.ADD A,#data 2 1 將累加器與常數相加,結果存回累加器
5.ADDC A,Rn 1 1 將累加器與寄存器的內容及進位C相加,結果存回累加器
6.ADDC A,direct 2 1 將累加器與直接地址的內容及進位C相加,結果存回累加器
7.ADDC A,@Ri 1 1 將累加器與間接地址的內容及進位C相加,結果存回累加器
8.ADDC A,#data 2 1 將累加器與常數及進位C相加,結果存回累加器
9.SUBB A,Rn 1 1 將累加器的值減去寄存器的值減借位C,結果存回累加器
10.SUBB A,direct 2 1 將累加器的值減直接地址的值減借位C,結果存回累加器
11.SUBB A,@Ri 1 1 將累加器的值減間接地址的值減借位C,結果存回累加器
12.SUBB A,#data 2 1 將累加器的值減常數值減借位C,結果存回累加器
13.INC A 1 1 將累加器的值加1
14.INC Rn 1 1 將寄存器的值加l
15.INC direct 2 1 將直接地址的內容加1
16.INC @Ri 1 1 將間接地址的內容加1
17.INC DPTR 1 1 數據指針寄存器值加1
說明:將16位的DPTR加1,當DPTR的低位元組(DPL)從FFH溢出至00H時,會使高位元組(DPH)加1,不影響任何標志位
18.DEC A 1 1 將累加器的值減1
19.DEC Rn 1 1 將寄存器的值減1
20.DEC direct 2 1 將直接地址的內容減1
21.DEC @Ri 1 1 將間接地址的內容減1
22.MUL AB 1 4 將累加器的值與B寄存器的值相乘,乘積的低位位元組存回累加器,高位位元組存回B寄存器
說明:將累加器A和寄存器B內的無符號整數相乘,產生16位的積,低位位元組存入A,高位位元組存入B寄存器。如果積大於FFH,則溢出標志位(OV)被設定為1,而進位標志位為0
23.DIV AB 1 4 將累加器的值除以B寄存器的值,結果的商存回累加器,余數存回B寄存器
說明:無符號的除法運算,將累加器A除以B寄存器的值,商存入A,余數存入B。執行本指令後,進位位(C)及溢出位(OV)被清除為0
24.DA A 1 1 將累加器A作十進制調整,
若(A) 3-0>9或(AC)=1,則(A) 3-0←(A)3-0+6
若(A) 7-4>9或 (C)=1,則(A) 7-4←(A)7-4+6
邏輯運算指令
25.ANL A,Rn 1 1 將累加器的值與寄存器的值做AND的邏輯判斷,結果存回累加器
26.ANL A,direct 2 1 將累加器的值與直接地址的內容做AND的邏輯判斷,結果存回累加器
27.ANL A,@Ri 1 1 將累加器的值與間接地址的內容做AND的邏輯判斷,結果存回累加器
28.ANL A,#data 2 1 將累加器的值與常數做AND的邏輯判斷,結果存回累加器
29.ANL direct,A 2 1 將直接地址的內容與累加器的值做AND的邏輯判斷,結果存回該直接地址
30.ANL direct,#data 3 2 將直接地址的內容與常數值做AND的邏輯判斷,結果存回該直接地址
31.ORL A,Rn 1 1 將累加器的值與寄存器的值做OR的邏輯判斷,結果存回累加器
32.ORL A,direct 2 1 將累加器的值與直接地址的內容做OR的邏輯判斷,結果存回累加器
33.ORL A,@Ri 1 1 將累加器的值與間接地址的內容做OR的邏輯判斷,結果存回累加器
34.ORL A,#data 2 1 將累加器的值與常數做OR的邏輯判斷,結果存回累加器
35.ORL direct,A 2 1 將直接地址的內容與累加器的值做OR的邏輯判斷,結果存回該直接地址
36.ORL direct,#data 3 2 將直接地址的內容與常數值做OR的邏輯判斷,結果存回該直接地址
37.XRL A,Rn 1 1 將累加器的值與寄存器的值做XOR的邏輯判斷,結果存回累加器
38.XRL A,direct 2 1 將累加器的值與直接地址的內容做XOR的邏輯判斷,結果存回累加器
39.XRL A,@Ri 1 1 將累加器的值與間接地扯的內容做XOR的邏輯判斷,結果存回累加器
40.XRL A,#data 2 1 將累加器的值與常數作XOR的邏輯判斷,結果存回累加器
41.XRL direct,A 2 1 將直接地址的內容與累加器的值做XOR的邏輯判斷,結果存回該直接地址
42.XRL direct,#data 3 2 將直接地址的內容與常數的值做XOR的邏輯判斷,結果存回該直接地址
43.CLR A 1 1 清除累加器的值為0
44.CPL A 1 1 將累加器的值反相
45.RL A 1 1 將累加器的值左移一位
46.RLC A 1 1 將累加器含進位C左移一位
47.RR A 1 1 將累加器的值右移一位
48.RRC A 1 1 將累加器含進位C右移一位
49.SWAP A 1 1 將累加器的高4位與低4位的內容交換。(A)3-0←(A)7-4
數據轉移指令
50.MOV A,Rn 1 1 將寄存器的內容載入累加器
51.MOV A,direct 2 1 將直接地址的內容載入累加器
52.MOV A,@Ri 1 1 將間接地址的內容載入累加器
53.MOV A,#data 2 1 將常數載入累加器
54.MOV Rn,A 1 1 將累加器的內容載入寄存器
55.MOV Rn,direct 2 2 將直接地址的內容載入寄存器
56.MOV Rn,gdata 2 1 將常數載入寄存器
57.MOV direct,A 2 1 將累加器的內容存入直接地址
58.MOV direct,Rn 2 2 將寄存器的內容存入直接地址
59.MOV direct1, direct2 3 2 將直接地址2的內容存入直接地址1
60.MOV direct,@Ri 2 2 將間接地址的內容存入直接地址
61.MOV direct,#data 3 2 將常數存入直接地址
62.MOV @Ri,A 1 1 將累加器的內容存入某間接地址
63.MOV @Ri,direct 2 2 將直接地址的內容存入某間接地址
64.MOV @Ri,#data 2 1 將常數存入某間接地址
65.MOV DPTR,#data16 3 2 將16位的常數存入數據指針寄存器
66.MOVC A,@A+DPTR 1 2 (A) ←((A)+(DPTR))
累加器的值再加數據指針寄存器的值為其所指定地址,將該地址的內容讀入累加器
67.MOVC A,@A+PC 1 2 (PC)←(PC)+1;(A)←((A)+(PC))累加器的值加程序計數器的值作為其所指定地址,將該地址的內容讀入累加器
68.MOVX A,@Ri 1 2 將間接地址所指定外部存儲器的內容讀入累加器(8位地址)
69.MOVX A,@DPTR 1 2 將數據指針所指定外部存儲器的內容讀入累加器(16位地址)
70.MOVX @Ri,A 1 2 將累加器的內容寫入間接地址所指定的外部存儲器(8位地址)
71.MOVX @DPTR,A 1 2 將累加器的內容寫入數據指針所指定的外部存儲器(16位地址)
72.PUSH direct 2 2 將直接地址的內容壓入堆棧區
73.POP direct 2 2 從堆棧彈出該直接地址的內容
74.XCH A,Rn 1 1 將累加器的內容與寄存器的內容互換
75.XCH A,direct 2 1 將累加器的值與直接地址的內容互換
76.XCH A,@Ri 1 1 將累加器的值與間接地址的內容互換
77.XCHD A,@Ri 1 1 將累加器的低4位與間接地址的低4位互換
布爾代數運算
78.CLR C 1 1 清除進位C為0
79.CLR bit 2 1 清除直接地址的某位為0
80.SETB C 1 1 設定進位C為1
81.SETB bit 2 1 設定直接地址的某位為1
82.CPL C 1 1 將進位C的值反相
83.CPL bit 2 1 將直接地址的某位值反相
84.ANL C,bit 2 2 將進位C與直接地址的某位做AND的邏輯判斷,結果存回進位C
85.ANL C,/bit 2 2 將進位C與直接地址的某位的反相值做AND的邏輯判斷,結果存回進位C
86.ORL C,bit 2 2 將進位C與直接地址的某位做OR的邏輯判斷,結果存回進位C
87.ORL C,/bit 2 2 將進位C與直接地址的某位的反相值做OR的邏輯判斷,結果存回進位C
88.MOV C,bit 2 1 將直接地址的某位值存入進位C
89.MOV bit,C 2 2 將進位C的值存入直接地址的某位
90.JC rel 2 2 若進位C=1則跳至rel的相關地址
91.JNC rel 2 2 若進位C=0則跳至rel的相關地址
92.JB bit,rel 3 2 若直接地址的某位為1,則跳至rel的相關地址
93.JNB bit,rel 3 2 若直接地址的某位為0,則跳至rel的相關地址
94.JBC bit,rel 3 2 若直接地址的某位為1,則跳至rel的相關地址,並將該位值清除為0
程序跳躍
95.ACALL addr11 2 2 調用2K程序存儲器范圍內的子程序
96.LCALL addr16 3 2 調用64K程序存儲器范圍內的子程序
97.RET 1 2 從子程序返回
98.RETI 1 2 從中斷子程序返回
99.AJMP addr11 2 2 絕對跳躍(2K內)
100.LJMP addr16 3 2 長跳躍(64K內)
101.SJMP rel 2 2 短跳躍(2K內)-128~+127位元組
102.JMP @A+DPTR 1 2 跳至累加器的內容加數據指針所指的相關地址
103.JZ rel 2 2 累加器的內容為0,則跳至rel所指相關地址
104.JNZ rel 2 2 累加器的內容不為0,則跳至rel所指相關地址
105.CJNE A,direct,rel 3 2 將累加器的內容與直接地址的內容比較,不相等則跳至rel所指的相關地址
106.CJNE A,#data,rel 3 2 將累加器的內容與常數比較,若不相等則跳至rel所指的相關地址
107.CJNE @Rn,#data,rel 3 2 將寄存器的內容與常數比較,若不相等則跳至rel所指的相關地址
108.CJNE @Ri,#data,rel 3 2 將間接地址的內容與常數比較,若不相等則跳至rel所指的相關地址
109.DJNZ Rn,rel 2 2 將寄存器的內容減1,不等於0則跳至rel所指的相關地址
110.DJNZ direct,rel 3 2 將直接地址的內容減1,不等於0則跳至rel所指的相關地址
111.NOP 1 1 無動作

⑹ 51單片機指令包括操作碼和操作數,其中操作數是指

操作數表示參加操作的數或操作數所在的地址(即操作數所存放的地方編號)。

因為單片機是一種可編程器件,只「認得」二進碼(0、1)。要單片機運作,單片機系統中的所有指令,都必須以二進制編碼的形式來表示。

例如,在Intel公司的MCS-51系列單片機中,從存貯器中取出一數到CPU中的累加器(在運算器中,參與運算、存放運算結果的專用寄存器)的指令代碼為74H,

累加器內容加立即數的代碼為24H,再加上立即數代碼,累加器送數到內部RAM存貯器的代碼為F6H~F7H等。這些指令是用十六進製表示二進制的機器碼。

(6)51單片機指令擴展閱讀

MCS-51中數的傳送常用MOV(Move的縮寫)、加法用Add(Addition的縮寫)來作為助記符。這樣,每條指令有明顯的動作特徵,易於記憶和理解,也不容易出錯。用助記符來編寫的程序稱為匯編語言程序。

但是,助記符編寫的程序便於人理解,可單片機卻只認識二進制機器代碼,因此,為了讓單片機能「讀懂」匯編語言程序必須在轉換成由二進制機器碼構成的程序,這種轉換過程,就稱為「匯編」。

匯編可藉助於人工查表法來實現,也可藉助PC機通過所謂「交叉匯編程序」來完成。由機器碼構成的用戶程序一旦「進入」了單片機,再「啟動」單片機,就可讓它執行輸入程序所規定的任務。

⑺ 51單片機指令的

不知道你想實現什麼功能?
你的意思是不是想說明如果P1=P2,那你的程序就有點問題,If {p1=p2}這句話的意思是如果P2的值賦給P1,應該寫作If {p1==p2},雙等號是測試等於的意思,但等號是賦值的意思。

⑻ 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」。

⑼ 51單片機指令按功能分為哪幾類

五大類,傳送,算術運算,轉移,邏輯運算,位操作。

⑽ 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的情況下)

閱讀全文

與51單片機指令相關的資料

熱點內容
購買浪潮伺服器如何部署雲 瀏覽:359
把pdf轉為word的軟體 瀏覽:799
程序員去面試產品經理 瀏覽:463
魏晉玄學pdf 瀏覽:160
單片機步進電機接線圖 瀏覽:148
如何關閉安卓通話設置 瀏覽:417
方舟生存進化雲伺服器配置 瀏覽:216
微信app廣告的廣告主是什麼 瀏覽:984
java兩個隊列實現棧 瀏覽:700
先學c語言還是單片機 瀏覽:48
伺服器的全稱和英文是什麼 瀏覽:23
zip包解壓庫java 瀏覽:498
白嫖pdf 瀏覽:482
有什麼app可以控制空調的 瀏覽:863
python標識符可以有減號 瀏覽:911
股票kd中k值完整演算法 瀏覽:74
mysqlmac命令行啟動 瀏覽:708
app會閃退怎麼辦啊 瀏覽:415
濟寧程序員培訓 瀏覽:678
世界五千年pdf 瀏覽:155