direct A 1 Bảng lệnh MOV 8bits Chuyển dữ liệu trong RAM nội và vùng SFR... LỆNH MOV TT... Chú ý: với các số HEX nếu bắt đầu bằng chữ thì phải thêm số 0 phía trước chữ đó.. Chú ý: với
Trang 1Lệnh chuyển dữ liệu
8 bits của 8051
Trang 2Lệnh chuyển dữ liệu 8bits của 8051
2
Võ Thị Thu Hồng
Trang 3(direct A 1
Bảng lệnh MOV (8bits)
Chuyển dữ liệu trong RAM nội và vùng SFR
Trang 4(direct)
data
2
MOV @Ri, A 1 1 1 1 0 1 1 i F6 ÷ F7 (Ri) A 1
MOV @Ri, direct 1
(Ri) (direct)
DPTR data16
2
Bảng lệnh MOV (8bits) của 8051 (TT)
1 LỆNH MOV (TT)
Trang 5Ký hiệu
Rn Định địa chỉ thanh ghi (các thanh ghi R0 đến R7)
direct Địa chỉ trực tiếp 8 bit (00H đến FFH), tên gọi các SFR (VD: Port1 là P1)
@Ri Định địa chỉ gián tiếp (thanh ghi R0 hoặc R1)
#data Hằng số 8 bit Chú ý: với các số HEX nếu bắt đầu bằng chữ thì phải
thêm số 0 phía trước chữ đó
#data16 Hằng số 16 bit Chú ý: với các số HEX nếu bắt đầu bằng chữ thì phải
thêm số 0 phía trước chữ đó
(XXH) Nội dung ô nhớ ở địa chỉ XXH ( Ví dụ : (20H)=15H )
Không dùng chung nguồn và đích các cách định địa chỉ sau:
Trang 6A0H
17H
17H
Trang 7MOV R3, 45H ; R3 <- (45H)
(MOV Rn, Direct)
Opcode 10101 011 01110101 (HEX) ABH 45H
45H
03H
2AH
2AH RAM Nội
Rn
(direct)
2
Trang 803H
2AH
45H RAM Nội
Rn
(direct)
2
Trang 9MOV R3,45H tương đương MOV 03H,45H MOV 3,45H
( MOV Rn, Direct) ( MOV direct1 ,direct2)
Opcode ABH 45H
Opcode 85H 45H 03h
Chú ý : lệnh MOV direct1, direct2 có 3 byte, byte 1 là mã
lệnh , byte 2 là mã địa chỉ nguồn , byte 3 là mã địa chỉ đích
Dest Src
Trang 10R0
FBH
(1) (2)
Trang 13MOV R0 , # 0F7H ; R0=F7H
MOV X A , @R0 -> A (F7H) = 8AH
Opcode E2H
Chuyển data từ ngoại vi
vào 8051 (địa chỉ 1 byte)
Trang 15Truy xuất vùng nhớ chương trình
MOVC A , Src ; A Src
- (Destination) (Source)
+Dùng đọc data cất trong bộ nhớ chương trình
NÊN : DÙNG DPTR để dễ quản lý hơn
Trang 1632H 100FH
Trang 17TABLE EQU 1340H; khai báo đầu chương trình
71H 1365H
Giá trị lúc sau
3 Lệnh MOVC (Ví dụ)
Trang 18
Hex Opcode
0000 ORG 0000H ; địa chỉ đầu chương trình
0000 90 00 30 MOV DPTR,#BANG ; nạp giá trị địa chỉ BANG
0003 75 90 FF MOV P1,#0FFH ; đặt port 1 chế độ nhập
0006 E5 90 LAP: MOV A,P1 ; đọc dữ liệu từ port 1 vào A
0008 93 MOVC A,@A+DPTR ; truy xuất dữ liệu từ bảng
0009 F5 A0 MOV P2,A ; xuất giá trị này ra port 2
000B 80 F9 SJMP LAP ; nhảy đến địa chỉ LAP để chạy lại
0030 ORG 0030H ; địa chỉ đầu bảng
0030 00 01 04 09 BANG: DB 00H,01H,04H,09H ; BANG ghi các giá trị
Tính giá trị x 2 , với x là ngõ vào port1 Giả sử x có
giá trị thập phân tương đương từ 0 đến 9
Trang 19Vùng SFR
80H
83H 82H
19H 0035H
Giá trị lúc sau
3 Lệnh MOVC (Ví dụ)
Tính giá trị x 2 , với x là ngõ vào port1 Giả sử x có
giá trị thập phân tương đương từ 0 đến 9 Hình sau minh họa giá trị x= 5 = 05H
0030H 0031H 0032H
01H 04H
19H
P2
MOV P2,A (3)
Trang 20Trong hay Ngoài
Trang 21A (direct) 1 XCH A, @Ri 1 1 0 0 0 1 1 i C6 ÷ C7 A (Ri) 1
Hoán đổi dữ liệu giữa ô nhớ RAM nội
Mnemonic Opcode (binary) Opcode
Trang 2315H
01H 15H
Trang 245 Lệnh PUSH,POP
Chú ý:
+ Mặc định, ban đầu SP=07H => STACK chiếm cùng vị trí Bank
thanh ghi 1 do đó không nên dùng các địa chỉ vùng này khi sử
dụng STACK
+ Có thể đặt lại SP ban đầu: VD: MOV SP,#30H
+ Vùng Stack dao động từ địa chỉ 08H đến 7FH
+ Các lệnh tác động Stack: PUSH, POP , CALL (Gọi chương trình
con), RET và RETI (Lệnh quay về từ chương trình con)
0
C0 Byte 2
SP SP + 1 (SP) (direct)
0
D0 Byte 2
Trang 25PUSH direct; Opcode 2bytes : C0H và byte địa chỉ direct
6BH
34H
6BH 07H
0AH 09H 08H
81H
SP 07H
20H 34H
81H
SP 08H
20H 34H
R0 R1
07H
0AH 09H 08H
81H
SP 09H
20H 34H
R0 R1
07H
0AH 09H 08H
81H
SP 0AH
20H 34H
R0 R1
Trang 26POP direct ; Opcode 2bytes : D0H và byte địa chỉ direct
81H
SP 0AH
07H
0AH 09H 08H
20H 34H
81H
SP 09H
20H 12H
6BH 00H
Sau lệnh 4 POP 20H
01H
21H
12H D4H
R0 R1
81H
SP 08H
20H 34H
34H 00H
Sau lệnh 5 POP 00H
01H
21H
12H D4H
R0 R1
81H
SP 07H
20H 34H
6BH 00H
Sau lệnh 6 POP 21H
01H
21H
12H 6BH
R0 R1
Trang 29SP
0BH
0EH 0DH 0CH 0FH
Trang 30SP
00H
0CH 0DH
SP
00H
0CH 0DH
57H
về đúng vị trí sau LCALL
0BH