Lệnh chuyển liệu bits 8051 Võ Thị Thu Hồng Lệnh chuyển liệu 8bits 8051 1.Chuyển liệu RAM nội ,SFR (MOV) 2.Chuyển liệu nhớ nhớ liệu (MOVX) 3.Truy xuất liệu từ vùng nhớ chương trình(MOVC) 4.Hốn đổi liệu nhớ RAM nội (XCH, XCHD) 5.Lưu (PUSH) hay lấy (POP) liệu STACK Võ Thị Thu Hồng LỆNH MOV Chuyển liệu RAM nội vùng SFR MOV Dest, Src ; (Destination) - Dest Src (Source) Bảng lệnh MOV (8bits) Opcode (binary) D5 D4 D3 D2 Diễn giải Số MC D1 D0 Opcode (HEX) n2 n1 n0 E8 ÷ EF A Rn a3 a2 a1 a0 A (direct) 0 1 i E5 Byte E6 ÷ E7 A (Ri) 1 d5 d4 d3 d2 d1 d0 A data 1 1 n2 n1 n0 74 Byte F8 ÷ FF Rn A 1 a7 a6 a5 a4 a3 n2 a2 n1 a1 n0 a0 A8 ÷ AF Byte Rn (direct) MOV Rn, #data d7 d6 d5 d4 d3 n2 d2 n1 d1 n0 d0 78 ÷ 7F Byte Rn data MOV direct, A a7 a6 a5 a4 a3 a2 a1 a0 F5 Byte (direct A Mnemonic D7 D6 1 1 a7 a6 a5 a4 1 d7 d6 MOV Rn, direct MOV A, Rn MOV A, direct MOV A, @Ri MOV A, #data MOV Rn, A Võ Thị Thu Hồng LỆNH MOV (TT) Bảng lệnh MOV (8bits) 8051 (TT) Opcode (binary) Mnemonic Opcode (HEX) D7 D6 D5 D4 D3 D2 D1 D0 MOV direct, Rn a7 a6 a5 a4 a3 n2 a2 n1 a1 n0 a0 MOV direct1, direct2 a7 a7 a6 a6 a5 a5 a4 a4 a3 a3 a2 a2 a1 a1 a0 a0 MOV direct, @Ri a7 a6 a5 a4 a3 a2 a1 i a0 MOV direct, #data a7 d7 a6 d6 a5 d5 a4 d4 a3 d3 a2 d2 a1 d1 a0 d0 1 1 1 i 88 ÷ 8F Byte 85 Byte 2(direct 2) Byte 3(direct 1) 86 ÷ 87 Byte 75 Byte 2(direct) Byte 3(data) F6 ÷ F7 MOV @Ri, direct a7 a6 a5 a4 a3 a2 a1 i a0 MOV @Ri, #data d7 d6 d5 d4 d3 d2 d1 MOV DPTR, #data16 d15 d7 d14 d6 d13 d5 d12 d4 d11 d3 d10 d2 d9 d1 MOV @Ri, A Võ Thị Thu Hồng Diễn giải Số MC (direct) Rn (direct1) (direct2) (direct) (Ri) (direct) data (Ri) A A6 ÷ A7 Byte (Ri) (direct) i d0 76 ÷ 77 Byte (Ri) data d8 d0 90 Byte Byte DPTR data16 2 LỆNH MOV (TT) Chú ý: Khơng dùng chung nguồn đích cách định địa sau: Rn - Rn Rn - @Ri @Ri - @Ri Ký hiệu Rn Định địa ghi (các ghi R0 đến R7) direct Địa trực tiếp bit (00H đến FFH), tên gọi SFR (VD: Port1 P1) @Ri Định địa gián tiếp (thanh ghi R0 R1) #data Hằng số bit Chú ý: với số HEX bắt đầu chữ phải thêm số phía trước chữ #data16 Hằng số 16 bit Chú ý: với số HEX bắt đầu chữ phải thêm số phía trước chữ (XXH) Nội dung ô nhớ địa XXH ( Ví dụ : (20H)=15H ) Võ Thị Thu Hồng LỆNH MOV (Ví dụ) Opcode (binary) D7 D6 D5 D4 D3 D2 D1 D0 Opcode (HEX) d7 d6 d5 d4 d3 d2 d1 d0 74 Byte Mnemonic MOV A, #data Diễn giải Số MC A data MOV A, #0CFH ; A A (25H+1340H)= 71H Vùng SFR Giá trị lúc đầu ACC 71H 25H ROM/RAM Chương trình Giá trị lúc sau E0H DPH 13H 83H DPL 40H 82H (2) 1365H 71H (1) 0H Võ Thị Thu Hồng 17 Lệnh MOVC (Ví dụ) Hex Opcode Tính giá trị x2 , với x ngõ vào port1 Giả sử x có giá trị thập phân tương đương từ đến ORG 0000H ; địa đầu chương trình 0000 0000 90 00 30 MOV DPTR,#BANG ; nạp giá trị địa BANG 0003 75 90 FF MOV P1,#0FFH ; đặt port chế độ nhập 0006 E5 90 LAP: MOV A,P1 ; đọc liệu từ port vào A 0008 93 MOVC A,@A+DPTR ; truy xuất liệu từ bảng 0009 F5 A0 MOV P2,A ; xuất giá trị port 000B 80 F9 SJMP LAP ; nhảy đến địa LAP để chạy lại 0030 ORG 0030H ; địa đầu bảng BANG: DB 00H,01H,04H,09H ; BANG ghi giá trị 0030 00 01 04 09 0034 10 19 24 31 DB 0038 40 51 DB END 10H, 19H,24H,31H 40H, 51H ; số HEX x2 ; 10 giá trị BANG ; chiếm 10 ô nhớ từ địa 0030h đến 0039h Võ Thị Thu Hồng 18 Lệnh MOVC (Ví dụ) Tính giá trị x2 , với x ngõ vào port1 Giả sử x có giá trị thập phân tương đương từ đến Hình sau minh họa giá trị x= = 05H P2 Vùng SFR Giá trị lúc đầu ACC DPH DPL 19H 05H ROM/RAM Chương trình 19H Giá trị lúc sau MOV P2,A (3) E0H 00H 83H 30H 82H (2) 0035H 19H 0032H 04H 0031H 01H 0030H 00H (1) 80H BANG Võ Thị Thu Hồng 19 Lệnh MOVX MOVC Bus Dữ Liệu Đọc Ghi Đọc RD A Dữ liệu Đọc Dữ liệu WR MOVX A, @Ri (Đọc) R0 hay R1 Ghi MOVX @Ri, A (Ghi) MOVX A, @DPTR (Đọc) MOVX @DPTR, A (Ghi) MOVX RAM @ Ri,A (Ghi) ROM Ngoài MOVX A,@ Ri (Đọc) Trong hay Ngoài MOVX A, @A + DPTR (Đọc) MOVX A, @A + PC (Đọc) PSEN Võ Thị Thu Hồng 20 Lệnh XCH, XCHD Hoán đổi liệu ô nhớ RAM nội Opcode (binary) XCH A, Rn XCH A, direct XCH A, @Ri Số MC D7 D6 D5 D4 D3 D2 D1 D0 1 0 n2 n1 n0 C8 ÷ CF A Rn 1 d7 1 d6 d5 0 d4 0 d3 d2 d1 1 d0 i C5 Byte C6 ÷ C7 A (direct) A (Ri) XCH A, Src ; (Destination) - Diễn giải Opcode (HEX) Mnemonic A Src (Source) i=0,1 Hoán đổi liệu 4bits thấp ô nhớ RAM nội Mnemonic XCHD A, @Ri XCHD D7 D6 1 Opcode (binary) D5 D4 D3 D2 1 A, @Ri; D1 D0 Opcode (HEX) i D6 ÷ D7 Diễn giải A ÷ @Ri ÷ Số MC A3 ÷ @Ri ÷ Võ Thị Thu Hồng 21 Lệnh XCH, XCHD (Ví dụ) XCH A, P3; (XCH A, direct) Opcode C5H B0H Giá trị lúc đầu Vùng SFR Giá trị lúc sau Vùng SFR ACC 45H E0H ACC 78H E0H P3 78H B0H P3 45H B0H 80H 80H Võ Thị Thu Hồng 22 Lệnh XCH, XCHD (Ví dụ) XCHD A, @R1; (XCHD A, @Ri) Opcode D7H Cho R1= 15H, A= 2BH, (15H)=1AH Giá trị lúc đầu ACC 2BH 1AH R1 15H Giá trị lúc sau E0H ACC 15H 01H R1 2AH E0H 1BH 1BH 15H 15H 01H 00H 00H RAM Nội RAM Nội Võ Thị Thu Hồng 23 Lệnh PUSH,POP Lưu liệu (PUSH) hay lấy (POP) liệu STACK Opcode (binary) Mnemonic D7 D6 D5 D4 D3 Diễn giải Số MC C0 Byte SP SP + (SP) (direct) D0 Byte (direct) (SP) SP SP - Opcode D2 D1 D (HEX) PUSH direct d7 d6 d5 d4 d3 d2 d1 d POP direct d7 d6 d5 d4 d3 d2 d1 d Chú ý: + Mặc định, ban đầu SP=07H => STACK chiếm vị trí Bank ghi khơng nên dùng địa vùng sử dụng STACK + Có thể đặt lại SP ban đầu: VD: MOV SP,#30H + Vùng Stack dao động từ địa 08H đến 7FH + Các lệnh tác động Stack: PUSH, POP, CALL (Gọi chương trình con), RET RETI (Lệnh quay từ chương trình con) Võ Thị Thu Hồng 24 Lệnh PUSH,POP (Ví dụ) PUSH 07H 81H SP 08H 81H D4H 34H 21H 20H D4H 34H 21H 20H Vùng STACK SP R1 R0 direct; Opcode 2bytes : C0H byte địa direct 12H 6BH Ban đầu 0AH 09H 08H 07H 6BH 6BH 01H R1 00H R0 12H 6BH Sau lệnh PUSH 09H 81H D4H 34H 0AH 09H 08H 07H 01H R1 00H R0 SP 0AH 81H 21H 20H D4H 34H 21H 20H 34H 34H 6BH 6BH 0AH 09H 08H 07H 12H 34H 6BH 0AH 09H 08H 07H 12H 6BH 01H 00H 12H 6BH 01H 00H Sau lệnh PUSH 20H Võ Thị Thu Hồng SP R1 R0 Sau lệnh PUSH 01H 25 Lệnh PUSH,POP (Ví dụ) POP SP R1 R0 direct ; Opcode 2bytes : D0H byte địa direct 07H 81H 21H 20H 6BH 34H 21H 20H 12H 34H 6BH 0AH 09H 08H 07H 12H 34H 6BH 0AH 12H 34H 01H 00H 12H 6BH 01H 00H 09H 81H SP 08H 81H 21H 20H D4H 12H 21H 20H D4H 34H 12H 34H 6BH 0AH 09H 08H 07H 12H 34H 6BH 0AH 09H 08H 07H 12H 6BH 01H 00H 12H 6BH 01H R1 00H R0 0AH 81H D4H 34H Sau lệnh SP R1 R0 Sau lệnh POP 00H Sau lệnh POP 20H Võ Thị Thu Hồng SP R1 R0 09H 08H 07H Sau lệnh POP 21H 26 Lệnh PUSH,POP (Ví dụ) Cho đoạn chương trình: HEX 0000 0000 0003 0005 0007 0009 000B 000D 000F 0011 0013 0013 Opcode 75 81 0A 79 23 7A 34 7B F2 C0 01 C0 02 C0 03 D0 04 D0 05 D0 06 ORG 0000H MOV SP, #0AH ; SP=0AH MOV R1, #23H ; R1= 23H MOV R2, #34H ; R2= 34H MOV R3, #0F2H ; R3= F2H PUSH ; SP=0BH (0BH) = 23H PUSH ; SP=0CH (0CH)=34H PUSH ; SP=0DH (0DH)=F2H POP ; R4=(04H)=F2H SP=0CH POP ; R5=(05H)=34H SP=0BH POP ; R6=(06H)=23H SP=0AH END Võ Thị Thu Hồng 27 Lệnh PUSH,POP (Ví dụ) Cho đoạn chương trình: HEX Opcode 00FDH ORG 00FDH 00FDH 75 81 0B MOV SP,#0BH ; SP=0BH 0100 75 F0 10 MOV B,#57H ; B=57H 0103 75 E0 34 MOV Acc,#34H ; A= 34H 0106 7F 00 PUSH B ; SP=0CH 0108 12 02 34 LCALL CT1 ; Gọi CT CT1 010B F5 90 MOV P1,A 0234 7D 25 CT1: MOV R5,#25H 0236 22 0236 (0CH)=57H RET END Võ Thị Thu Hồng 28 Lệnh PUSH,POP (Ví dụ) SP 0108 12 02 34 LCALL CT1 010B F5 90 MOV P1,A 0234 7D 25 0236 22 0236 01H 0BH 57H CT1: MOV R5,#25H RET END PC SP 0CH 01H 0BH 57H PC 0EH 81H 81H 10H 0FH 0EH 0DH 0CH 0BH 0234H Sau lệnh LCALL CT1 10H 0FH 0EH 0DH 0CH 0BH 010BH Sau lệnh RET Võ Thị Thu Hồng 29 Lệnh PUSH,POP (Ví dụ) Nếu thêm vào CT1 lệnh POP 0108 12 02 34 LCALL CT1 010B F5 90 MOV P1,A 0234 7D 25 0236 D0 00 POP 0238 22 RET 0EH SP 01H 0BH 10H CT1: MOV R5,#25H 0236 PC 81H 10H 0FH 0EH 0DH 0CH 0BH 0234H Sau lệnh LCALL CT1 END SP PC 0DH SP 81H 0BH 81H 01H 0BH 57H 0EH 0DH 0CH 01H 0BH 57H 0EH 0DH 0CH 0BH 01H 00H 01H 00H PC 0238H Sau lệnh POP Võ Thị Thu Hồng Khơng quay vị trí sau LCALL 0B57H Sau lệnh RET 30 ... Opcode 2bytes : D0H byte địa direct 07H 81H 21 H 20 H 6BH 34 H 21 H 20 H 12H 34 H 6BH 0AH 09H 08H 07H 12H 34 H 6BH 0AH 12H 34 H 01H 00H 12H 6BH 01H 00H 09H 81H SP 08H 81H 21 H 20 H D4H 12H 21 H 20 H D4H 34 H 12H... MOV R1, #23 H ; R1= 23 H MOV R2, #34 H ; R2= 34 H MOV R3, #0F2H ; R3= F2H PUSH ; SP=0BH (0BH) = 23 H PUSH ; SP=0CH (0CH) =34 H PUSH ; SP=0DH (0DH)=F2H POP ; R4=(04H)=F2H SP=0CH POP ; R5=(05H) =34 H SP=0BH... MOV Acc, #34 H ; A= 34 H 0106 7F 00 PUSH B ; SP=0CH 0108 12 02 34 LCALL CT1 ; Gọi CT CT1 010B F5 90 MOV P1,A 0 23 4 7D 25 CT1: MOV R5, #25 H 0 23 6 22 0 23 6 (0CH)=57H RET END Võ Thị Thu Hồng 28 Lệnh PUSH,POP