Professional Documents
Culture Documents
Tóm Tắt 8051 Trong Đề Thi
Tóm Tắt 8051 Trong Đề Thi
Nhóm lệnh rẽ nhánh Nhóm lệnh xử lý biến Boole Các lệnh ảnh hưởng cờ
Mnemonic Opcode #bytes #MCs Mnemonic Opcode #bytes #MCs Cờ Cờ
Lệnh Lệnh
ACALL addr11 xem CT 2 2 CLR C C3H 1 1 C OV AC C
LCALL addr16 12H 3 2 CLR bit C2H 2 1 ADD X X X SETB C 1
RET 22H 1 2 SETB C D3H 1 1 ADDC X X X CLR C 0
RETI 32H 1 2 SETB bit D2H 2 1 SUBB X X X CPL C X
AJMP addr11 xem CT 2 2 CPL C B3H 1 1 MUL 0 X ANL C,bit X
LJMP addr16 02H 3 2 CPL bit B2H 2 1 DIV 0 X ANL C,/bit X
SJMP rel 80H 2 2 ANL C,bit 82H 2 2 DA X ORL C,bit X
JMP @A+DPTR 73H 1 2 ANL C,/bit B0H 2 2 RLC X ORL C,/bit X
JZ rel 60H 2 2 ORL C,bit 72H 2 2 RRC X MOV C,bit X
JNZ rel 70H 2 2 ORL C,/bit A0H 2 2 CJNE X
CJNE A,direct,rel B5H 3 2 MOV C,bit A2H 2 1
CJNE A,#data,rel B4H 3 2 MOV bit,C 92H 2 2
CJNE Rn,#data,rel B8H+n 3 2 JC rel 40H 2 2
CJNE @Ri,#data,rel B6H+i 3 2 JNC rel 50H 2 2
DJNZ Rn,rel D8H+n 2 2 JB bit,rel 20H 3 2
DJNZ direct,rel D5H 3 2 JNB bit,rel 30H 3 2
NOP 00H 1 1 JBC bit,rel 10H 3 2
Chú thích (CT): Một số chỉ thị của trình biên dịch hợp ngữ TD: Chương trình C dùng Keil C
1. Qui ước trong bảng tóm tắt tập lệnh: #include <reg51.h> // để dùng các tên SFR
Opcode = mã lệnh Chỉ thị Mô tả sbit inbit = P1^0;
#bytes = số byte Cho biết lệnh/data tiếp theo bắt sbit LED = P1^7;
#MCs = số chu kỳ máy (Machine Cycle) ORG void Timer0(char val); // định nghĩa prototype
đầu từ địa chỉ theo sau ORG
1 MC = 12/FXTAL EQU Định nghĩa giá trị ký hiệu
data = hằng số dữ liệu 8 bit main()
d16 = hằng số dữ liệu 16 bit BIT Định nghĩa địa chỉ trong vùng bit { char val;
Rn = thanh ghi 8 bit (n=0,1,.., 7) DB Định nghĩa 1 hay nhiều giá trị byte inbit = 1; // cấu hình nhập
Ri = thanh ghi 8 bit (i=0 hay 1) DW Định nghĩa 1 giá trị word TMOD = 0x01; // Timer 0 chế độ 1
direct = địa chỉ trực tiếp byte (00H–FFH) DS Dành 1 số byte với số theo sau DS While(1)
bit = địa chỉ trực tiếp của bit END Kết thúc chương trình { val = (inbit !=1) ? 0 : 1;
rel = độ dời (–128 đến +127) LED = 0; Timer0(val);
HIGH Lấy byte cao của biểu thức
addr11 = địa chỉ A10. . . A0 LED = 1; Timer0(val); }
addr16 = địa chỉ A15. . . A0 LOW Lấy byte thấp của biểu thức }
2. Mã máy của định địa chỉ tuyệt đối: TD:
AJMP addr11 có mã máy COUNT EQU 100 void Timer0(char val)
A10 A9 A8 1 0 0 0 1 A7 A6 A5 A4 A3 A2 A1 A0 LED EQU P1.0 ; hoặc dùng LED BIT P1.0 {
ACALL addr11 có mã máy LOAD_T0 EQU 50000 if (val == 0)
ORG 0 { // T0 –50000
A10 A9 A8 0 0 0 0 1 A7 A6 A5 A4 A3 A2 A1 A0
SETB LED TH0 = 0x3C; TL0=0xB0; }
3. Các lệnh 3 byte có addr16 gồm có byte 1 là MOV A,#COUNT else
mã lệnh, byte 2 là byte cao của addr16 và MOV TL0,#LOW(–LOAD_T0) { // T0 –30000
byte 3 là byte thấp của addr16. MOV TH0,#HIGH(–LOAD_T0) TH0 = 0x8A; TL0=0xD0; }
4. Các lệnh 3 byte CJNE có byte 1 là mã lệnh, MOV DPTR,#TABLE TR0 = 1; // cho Timer 0 chạy
byte 2 là direct (hoặc data), byte 3 là độ MOV DPTR,#STR while (TF0 != 1);
dời rel. ORG 100H TF0 = 0;
5. Lệnh 3 byte MOV DPTR,#d16 có byte 1 là TABLE: DB 12, 0F5H, ‘B’, 10110101B, ‘A’–‘a’ TR0 = 0; // dừng Timer 0
mã lệnh, byte 2 là byte cao của d16 và byte STR: DB “Hello the world!” }
3 là byte thấp của d16