You are on page 1of 5

TẬP LỆNH BỘ VI ĐIỀU KHIỂN 8051

Xưởng Điện tử 9 - Khoa Điện tử


Trường ĐHSPKT Vinh

Tổ chức bộ nhớ:

Địa chỉ Địa chỉ


byte Địa chỉ bit byte Địa chỉ bit
7F FF
F0 F7 F6 F5 F4 F3 F2 F1 F0 B

E0 E7 E6 E5 E4 E3 E2 E1 E0 ACC
80 byte

Vùng RAM dùng chung

D0 D7 D6 D5 D4 D3 D2 D1 D0 PSW

30 B8 - - - BC BB BA B9 B8 IP
2F 7F 7E 7D 7C 7B 7A 79 78
2E 77 76 75 74 73 72 71 70 B0 B7 B6 B5 B4 B3 B2 B1 B0 P3
2D 6F 6E 6D 6C 6B 6A 69 68
2C 67 66 65 64 63 62 61 60 A8 AF - - AC AB AA A9 A8 IE
2B 5F 5E 5D 5C 5B 5A 59 58
Vùng định địa chỉ bit

2A 57 56 55 54 53 52 51 50 A0 A7 A6 A5 A4 A3 A2 A1 A0 P2
29 4F 4E 4D 4C 4B 4A 49 48
28 47 46 45 44 43 42 41 40 99 Không định địa chỉ bit SBUF
27 3F 3E 3D 3C 3B 3A 39 38 98 9F 9E 9D 9C 9B 9A 99 98 SCON
26 37 36 35 34 33 32 31 30
25 2F 2E 2D 2C 2B 2A 29 28 90 97 96 95 94 93 92 91 90 P1
24 27 26 25 24 23 22 21 20
23 1F 1E 1D 1C 1B 1A 19 18 8D Không định địa chỉ bit TH1
22 17 16 15 14 13 12 11 10 8C Không định địa chỉ bit TH0
21 0F 0E 0D 0C 0B 0A 09 08 8B Không định địa chỉ bit TL1
20 07 06 05 04 03 02 01 00 8A Không định địa chỉ bit TL0
1F 89 Không định địa chỉ bit TMOD
Bank 3
18 88 8F 8E 8D 8C 8B 8A 89 88 TCON
17 87 Không định địa chỉ bit PCON
Bank 2
32 byte

10
0F 83 Không định địa chỉ bit DPH
Bank 1
08 82 Không định địa chỉ bit DPL
07 Dãy thanh ghi mặc định 81 Không định địa chỉ bit SP
00 R0 - R7 80 87 86 85 84 83 82 81 80 P0

RAM Các thanh ghi chức năng đặc biệt

-2-
Thanh ghi từ trạng thái chương trình - PSW.

PSW7 PSW6 PSW5 PSW4 PSW3 PSW2 PSW1 PSW0

CY AC F0 RS1 RS0 OV (-) P

- CY(C): cờ nhớ. CY = 1 khi có nhớ hoặc mượn(từ bit 7 của các toán hạng).
- AC: cờ nhớ phụ. AC = 1 khi có nhớ hoặc mượn từ số BCD thấp sang số BCD cao.
- F0: cờ trạng thái đa mục đích.
- RS1, RS0: Các bit chọn dãy thanh ghi.
00: Bank 0(mặc định), địa chỉ từ 00h - 07h.
01: Bank 1, địa chỉ từ 08h - 0Fh
10: Bank 2, địa chỉ từ 10h - 17h.
11: Bank 3, địa chỉ từ 18h - 1Fh
- OV: cờ tràn. OV = 1 khi kết quả là một số bù 2 vượt ra ngoài phạm vi biểu diễn.
- (-): cờ dự trữ.
- P: cờ chẵn/lẻ: P = 1 khi tổng số bit 1 trong thanh A là lẻ.

Các ký hiệu:
Rn Định địa chỉ thanh ghi sử dụng R0 - R7.
Direct địa chỉ 8 bit trong RAM nội(00H - FFH).
@Ri Định địa chỉ gián tiếp sử dụng thanh ghi R0 hoặc R1.
#data Hằng số 8 bit chứa trong lệnh.
#data16 Hằng số 16 bit.
Bit Địa chỉ trực tiếp(8 bit) của một bit.
Rel offset 8 bit có dấu.
Addr11 Địa chỉ 11 bit trong trang hiện hành.
Addr16 Địa chỉ 16 bit.
← Được thay thế bởi...
( ) Nội dung của...
(( )) Dữ liệu được trỏ bởi...
rrr 1 trong 8 thanh ghi của dãy thanh ghi(000 = R0, 001 = R1...).
dddddddd Các bit dữ liệu.
aaaaaaaaa Các bit địa chỉ.
bbbbbbbb Địa chỉ của một bit.
i Định địa chỉ gián tiếp sử dụng R0(i = 0) hoặc R1(i = 1).
eeeeeeeee Địa chỉ tương đối 8 bit

-3-
Tập lệnh:

MÃ CHU KỲ
LỆNH HOẠT ĐỘNG
Byte 1 Byte 2 Byte 3 MÁY
ACALL addr11 Gọi đến địa chỉ tuyệt đối aaa10001 aaaaaaaa 2
ADD A, Rn (A) ← (A) + (Rn) 00101rrr 1
ADD A, direct (A) ← (A) + (direct) 00100101 aaaaaaaa 1
ADD A, @Ri (A) ← (A) + ((Ri)) 0010011i 1
ADD A, #data (A) ← (A) + #data 00100100 dddddddd 1
ADDC A, Rn (A) ← (A) + (C) + (Rn) 00110rrr 1
ADDC A, direct (A) ← (A) + (C) + (direct) 00110101 aaaaaaaa 1
ADDC A, @Ri (A) ← (A) + (C) + ((Ri)) 0011011i 1
ADDC A, #data (A) ← (A) + (C) + #data 00110100 dddddddd 1
AJMP addr11 Nhảy đến địa chỉ tuyệt đối aaa00001 aaaaaaaa 2
ANL A, Rn (A) ← (A) and (Rn) 01011rrr 1
ANL A, direct (A) ← (A) and (direct) 01010101 aaaaaaaa 1
ANL A, @Ri (A) ← (A) and ((Ri)) 0101011i 1
ANL A, #data (A) ← (A) and #data 01010100 dddddddd 1
ANL drect, A (direct) ← (direct) and (A) 01010010 aaaaaaaa 1
ANL drect, #data (direct) ← (direct) and #data 01010011 aaaaaaaa dddddddd 2
ANL C, bit (C) ← (C) and (bit) 10000010 bbbbbbbb 2
ANL C, /bit (C) ← (C) and NOT(bit) 10110000 bbbbbbbb 2
CJNE A, direct, rel 10110101 aaaaaaaa eeeeeeee 2
CJNE A, #data, rel 10110100 dddddddd eeeeeeee 2
So sánh và nhảy nếu không bằng
CJNE Rn, #data, rel 10111rrr dddddddd eeeeeeee 2
CJNE @Ri, #data, rel 1011011i dddddddd eeeeeeee 2
CLR A (A) ← 0 11100100 1
CLR C (C) ← 0 11000011 1
CLR bit (bit) ← 0 11000010 bbbbbbbb 1
CPL A (A) ← NOT(A) 11110100 1
CPL C (C) ← NOT(C) 10110011 1
CPL bit (bit) ← NOT(bit) 10110010 bbbbbbbb 1
DA A Chỉnh thập phân nội dung Acc 11010100 1
DEC A (A) ← (A) - 1 00010100 1
DEC Rn (Rn) ← (Rn) - 1 00011rrr 1
DEC direct (direct) ← (direct) - 1 00010101 aaaaaaaa 1
DEC @Ri ((Ri)) ← ((Ri)) - 1 0001011i 1
DIV AB (B, A) ← (A)/(B) ; A: thương, B: số dư 10000100 4
DJNZ Rn, rel Giảm (Rn) và nhảy nếu (Rn) ≠ 0 11011rrr eeeeeeee 2

-4-
DJNZ direct, rel Giảm (direct) và nhảy nếu (direct) ≠ 0 11010101 aaaaaaaa eeeeeeee 2
INC A (A) ← (A) + 1 00000100 1
INC Rn (Rn) ← (Rn) + 1 00001rrr 1
INC direct (direct) ← (direct) + 1 00000101 aaaaaaaa 1
INC @Ri ((Ri)) ← ((Ri)) + 1 0000011i 1
INC DPTR (DPTR) ← (DPTR) + 1 10100011 2
JB bit, rel Nhảy nếu bit = 1 00100000 bbbbbbbb eeeeeeee 2
JBC bit, rel Nhảy nếu bit = 1 sau đó xóa bit. 00010000 bbbbbbbb eeeeeeee 2
JC rel Nhảy nếu (C) = 1 01000000 eeeeeeee 2
JMP @A+DPTR (PC) ← (A) + (DPTR) 01110011 2
JNB bit, rel Nhảy nếu bit = 0 00110000 bbbbbbbb eeeeeeee 2
JNC rel Nhảy nếu (C) = 0 01010000 eeeeeeee 2
JNZ rel Nhảy nếu (A) ≠ 0 01110000 eeeeeeee 2
JZ rel Nhảy nếu (A) = 0 01100000 eeeeeeee 2
LCALL addr16 Gọi một chương trình con(gọi dài) 00010010 aaaaaaaa aaaaaaaa 2
LJMP addr16 Nhảy dài tới địa chỉ addr16 00000010 aaaaaaaa aaaaaaaa 2
MOV A, Rn (A) ← (Rn) 11101rrr 1
MOV A, direct (A) ← (direct) 11100101 aaaaaaaa 1
MOV A, @Ri (A) ← ((Ri)) 1110011i 1
MOV A, #data (A) ← #data 01110100 dddddddd 1
MOV Rn, A (Rn) ← (A) 11111rrr 1
MOV Rn, direct (Rn) ← (direct) 10101rrr aaaaaaaa 2
MOV Rn, #data (Rn) ← #data 01111rrr dddddddd 1
MOV direct, A (direct) ← (A) 11110101 aaaaaaaa 1
MOV direct, Rn (direct) ← (Rn) 10001rrr aaaaaaaa 2
MOV direct, direct (direct) ← (direct) 10000101 aaaaaaaa aaaaaaaa 2
MOV direct, @Ri (direct) ← ((Ri)) 1000011i aaaaaaaa 2
MOV direct, #data (direct) ← #data 01110101 aaaaaaaa dddddddd 2
MOV @Ri, A ((Ri)) ← (A) 1111011i 1
MOV @Ri, direct ((Ri)) ← (direct) 1010011i aaaaaaaa 2
MOV @Ri, #data ((Ri)) ← #data 0111011i dddddddd 1
MOV C, bit (C) ← (bit) 10100010 bbbbbbbb 1
MOV bit, C (bit) ← (C) 10010010 bbbbbbbb 2
MOV DPTR, #data16 (DPTR) ← #data16 10010000 dddddddd dddddddd 2
MOVC A, @A+DPTR (A) ← ((A) + (DPTR)) 10010011 2
MOVC A, @A+PC (A) ← ((A) + (PC)) 10000011 2
MOVX A, @Ri (A) ← ((Ri)) ; bộ nhớ ngoài 1110001i 2
MOVX A, @DPTR (A) ← ((DPTR)) ; bộ nhớ ngoài 11100000 2
MOVX @Ri, A ((Ri)) ← (A) ; bộ nhớ ngoài 1111001i 2

-5-
MOVX @DPTR, A ((DPTR)) ← (A) ; bộ nhớ ngoài 11110000 2
MUL AB (BA) ← (A) * (B) 10100100 4
NOP Không làm gì cả 00000000 1
ORL A, Rn (A) ← (A) or (Rn) 01001rrr 1
ORL A, direct (A) ← (A) or (direct) 01000101 aaaaaaaa 1
ORL A, @Ri (A) ← (A) or ((Ri)) 0100011i 1
ORL A, #data (A) ← (A) or #data 01000100 dddddddd 1
ORL drect, A (direct) ← (direct) or (A) 01000010 aaaaaaaa 1
ORL drect, #data (direct) ← (direct) or #data 01000011 aaaaaaaa dddddddd 2
ORL C, bit (C) ← (C) or (bit) 01110010 bbbbbbbb 2
ORL C, /bit (C) ← (C) or NOT(bit) 10100000 bbbbbbbb 2
POP direct (direct) ← ((SP)) ; (SP) ← (SP) - 1 11010000 aaaaaaaa 2
PUSH direct (SP) ← (SP) - 1 ; ((SP)) ← (direct) 11000000 aaaaaaaa 2
RET Trở về từ chương trình con 00100010 2
RETI Trở về từ chương trình phục vụ ngắt 00110010 2
RL A Quay trái 1 bit thanh chứa A 00100011 1
RLC A Quay trái thanh chứa A cùng với cờ nhớ 00110011 1
RR A Quay phải 1 bit thanh chứa A 00000011 1
RRC A Quay phải thanh chứa A cùng với cờ nhớ 00010011 1
SETB C (C) ← 1 11010011 1
SETB bit (bit) ← 1 11010010 bbbbbbbb 1
SJMP rel Nhảy ngắn tới rel (rel = -128 ÷ 127) 10000000 eeeeeeee 2
SUBB A, Rn (A) ← (A) - (C) - (Rn) 10011rrr 1
SUBB A, direct (A) ← (A) - (C) - (direct) 10010101 aaaaaaaa 1
SUBB A, @Ri (A) ← (A) - (C) - ((Ri)) 1001011i 1
SUBB A, #data (A) ← (A) - (C) - #data 10010100 dddddddd 1
SWAP A (A3 ÷ A0) ↔ (A7 ÷ A4) 11000100 1
XCH A, Rn (A) ↔ (Rn) 11001rrr 1
XCH A, direct (A) ↔ (direct) 11000101 aaaaaaaa 1
XCH A, @Ri (A) ↔ ((Ri)) 1100011i 1
XCHD A, @Ri (A3 ÷ A0) ↔ ((Ri3 ÷ Ri0)) 1101011i 1
XRL A, Rn (A) ← (A) ⊕ (Rn) 01101rrr 1
XRL A, direct (A) ← (A) ⊕ (direct) 01100101 aaaaaaaa 1
XRL A, @Ri (A) ← (A) ⊕ ((Ri)) 0110011i 1
XRL A, #data (A) ← (A) ⊕ #data 01100100 dddddddd 1
XRL drect, A (direct) ← (direct) ⊕ (A) 01100010 aaaaaaaa 1
XRL drect, #data (direct) ← (direct) ⊕ #data 01100011 aaaaaaaa dddddddd 2

-6-

You might also like