You are on page 1of 9

Vi điều khiển và bộ nhớ

Vi điều Bộ nhớ ngoài


DÙNG:
khiển
• @Ri
RAM nội
• Địa chỉ ô
MOVX @DPTR,A RAM
nhớ
• thanh ghi
tương ứng ô ROM
nhớ đó
chương
trình
nội MOVX A,@DPTR ROM

MOVC
A,@A+DPTR
Vi điều khiển và bộ nhớ
1. Truy xuất RAM nội:

Đọc từ RAM nội Ghi vào RAM nội


MOV dest, MOV
source dest, source

Source: Source:
 @Ri  thanh ghi

 địa chỉ ô nhớ  địa chỉ ô nhớ

Dest:  giá trị

 thanh ghi Dest:


 @Ri

 địa chỉ ô nhớ


Vi điều khiển và bộ nhớ
1. Truy xuất RAM nội:

Đọc từ RAM nội Ghi vào RAM nội


Vd: Vd:
Đọc ô nhớ 30h vào tghi  Ghi vào ô nhớ 30h nội
R7 dung thanh ghi A
MOV R7,30h
MOV 30h,A
Đọc ô nhớ được trỏ bởi xóa ô nhớ được trỏ bởi
@Ri vào thanh ghi A @Ri
MOV A,@R1
MOV @R1,#0
Không có dấu # là địa
chỉ của ô nhớ
Vi điều khiển và bộ nhớ
2. Truy xuất bộ nhớ chương trình nội:
Dạng lệnh: MOVC A,@A+DPTR

Ví dụ khai báo mảng bình phương một số như


sau:INDEX: độ lệch vị BASE: gốc -
trí của phần tử
Bangbinhphuong: thường trỏ đến
muốn lấy tính từ phần tử đầu tiên
DBBASE0, 1, 4, 9, 16, 25, 36, 49của bảng
độ lệch A

DPTR Phần tử
muốn lấy ra

Chú ý: phần tử đầu tiên của bảng có độ lệch bằng 0 so


với gốc
Vi điều khiển và bộ nhớ
2. Truy xuất bộ nhớ chương trình nội:
Ví dụ: đoạn chương trình lấy phần tử thứ 5 của mảng trên

MOV DPTR,#Bangbinhphuong
; trỏ DPTR vào phần tử đầu tiên của bảng
MOV A,#5
; gán A bằng độ dời tính từ gốc

MOVC A,@A+DPTR
; lấy phần tử thứ 5 của bảng cất vào thanh ghi A
Vi điều khiển và bộ nhớ
3. Truy xuất bộ nhớ ngoài:
Đọc từ bộ nhớ ngoài Ghi ra bộ nhớ ngoài
Dạng MOVX A, @DPTR MOVX @DPTR, A
lệnh
Ví dụ: Đọc nội dung ô nhớ Xóa ô nhớ ngoài địa chỉ
ngoài có địa chỉ 2000h: 2000h nội dung thanh
ghi A:

MOV DPTR,#2000h MOV A,#0 ; gán A = 0


MOVX A,@DPTR MOV DPTR,#2000h
MOVX @DPTR,A
Vi điều khiển và bộ nhớ
3. Một vài vấn đề về truy xuất bộ nhớ:
A. Chép các ô nhớ nội liên tiếp:
Địa chỉ cuối Địa chỉ cuối
MOV R0,#đchỉ_đầu_X
Dãy Dãy
MOV R1,#đchỉ_đầu_Y
nhớ nhớ
X Y MOV R7,#số_byte_copy
Thanh ghi
trung Loop:
gian
MOV A,@R0

@R0 @R1 MOV @R1,A


Copy
@R0 @R1 DJNZ R7,loop
Copy
Địa chỉ Địa chỉ
đầu đầu
Vi điều khiển và bộ nhớ
3. Một vài vấn đề về truy xuất bộ nhớ:
B. Chép các ô nhớ ngoài liên tiếp:
Cách làm tương tự như trên nhưng cần
lưu ý:
thanh ghi trung gian phải là thanh ghi A
phải dùng DPTR để trỏ đến địa chỉ đầu dãy ô nhớ thay
cho @Ri
• 8951 chỉ có 01 DPTR nên phải lưu DPTR cũ trước khi
trỏ đến ô nhớ khác
Ví dụ: chép 100 ô nhớ ngoài liên tiếp có địa chỉ đầu 1234h sang các
ô nhớ ngoài liên tiếp có địa chỉ đầu là 5678h

Source 12 34 Dest. Address 56 78


Address (hex)
(hex)
Byte H Low Byte H Low
igh igh
Vi điều khiển và bộ nhớ
MOV R4,#BYTE_CAO_ĐCHỈ_NGUỒN MOV DPH,R6 ; TRỎ ĐẾN DEST
MOV MOV DPL,R7
R5.#BYTE_THẤP_ĐCHỈ_NGUỒN
MOVX @DPTR,A ; GHI DATA
MOV R6,#BYTE_CAO_ĐCHỈ_ ĐÍCH
INC DPTR ; TRỎ Ô NHỚ KẾ
MOV R7.#BYTE_THẤP_ĐCHỈ_ ĐÍCH
MOV R6,DPH ; CẤT DPTR
MOV R3,#SỐ_BYTE_COPY
MOV R7,DPL
LOOP:
DJNZ R3,LOOP ; LẶP LẠI QUÁ TRÌNH
MOV DPH,R4 ; TRỎ ĐẾN SOURCE ; COPY
MOV DPL,R5
MOVX A,@DPTR ; ĐỌC DATA
INC DPTR ; TRỎ Ô NHỚ KẾ
MOV R4,DPH ; CẤT DPTR
MOV R5,DPL

You might also like