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

c51單片機指令

發布時間:2022-12-17 01:33:34

Ⅰ 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單片機指令有哪些啊

MCS-51共有111條指令,可分為5類:

[1].數據傳送類指令(共29條)
[2].算數運算類指令(共24條)
[3].邏輯運算及移位類指令(共24條)
[4].控制轉移類指令(共17條)
[5].布爾變數操作類指令(共17條)

Ⅲ 關於51單片機中的CALL與JMP指令

可能編譯器會根據偏移量自動用LCALL或者ACALL代替CALL指令,JMP 標號也類似,你可以看看反匯編的結果,對比一下

Ⅳ 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
基本是全的,個別有的沒有找到。雖說用到的機會很小,但是對於理解指令功能很有幫住

Ⅳ 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單片機指令

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單片機指令有哪些啊

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

Ⅷ C51寫單片機程序如何插入匯編指令.

C51些單片機程序插入匯編指令的方法如下:

1、以#pragma asm開始,以#pragma endasm結束,

用pragma asm和#pragma endasm這兩個偽指令將匯編代碼包起來。

比如:

3、如果勾選橢圓圈中的兩項,這樣就可以了。

閱讀全文

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

熱點內容
51單片機程序單步視頻 瀏覽:239
家庭寬頻如何連接伺服器 瀏覽:117
汽車高壓泵解壓 瀏覽:770
上門正骨用什麼app 瀏覽:758
安卓為什麼免費使用 瀏覽:397
加密貨幣都有哪些平台 瀏覽:625
python和matlab難度 瀏覽:388
python爬蟲很難學么 瀏覽:572
小米解壓積木可以組成什麼呢 瀏覽:816
為什麼滴滴出行app還能用 瀏覽:564
怎麼升級手機android 瀏覽:923
php權威編程pdf 瀏覽:994
扣扣加密技巧 瀏覽:720
蘋果如何創建伺服器錯誤 瀏覽:497
軟考初級程序員大題分值 瀏覽:475
js壓縮視頻文件 瀏覽:580
linux如何通過命令創建文件 瀏覽:991
應用加密app還能訪問應用嘛 瀏覽:435
安卓怎麼用支付寶交違章罰款 瀏覽:667
php面向對象的程序設計 瀏覽:506