Tải bản đầy đủ (.pdf) (20 trang)

BÀI GIẢNG LÝ THUYẾT VI XỬ LÝ

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (378.37 KB, 20 trang )

ÐẠI HỌC CƠNG NGHIỆP TP. HỒ CHÍ MINH
KHOA CƠNG NGHỆ ðIỆN TỬ
BỘ MÔN ðIỆN TỬ CÔNG NGHIỆP

BÀI GIẢNG LÝ THUYẾT

VI XỬ LÝ
Giáo viên: PHẠM QUANG TRÍ

TP. HỒ CHÍ MINH
THÁNG 0909-2009


ÐẠI HỌC CƠNG NGHIỆP TP. HỒ CHÍ MINH
KHOA CƠNG NGHỆ ðIỆN TỬ
BỘ MƠN ðIỆN TỬ CƠNG NGHIỆP

CHƯƠNG 3

LẬP TRÌNH HỢP NGỮ
CHO 8051


CÁC KIỂU ðỊNH ðỊA CHỈ


CÁC KIỂU ðỊNH ðỊA CHỈ
ðịnh ñịa chỉ thanh ghi (Register Addressing)
ðược dùng ñể truy xuất dữ liệu trong các thanh ghi từ R0 ñến R7.
Số byte của lệnh
lệnh:: 1 byte


byte..
Cấu trúc lệnh:
lệnh:
Ví dụ:
dụ: ADD A, R5 ⇒ Lệnh cộng nội dung thanh ghi A với nội dung thanh
ghi R5. (Giả sử:
sử: (A)=
(A)=05
05H,
H, (R5
(R5)=
)=9
9AH)
AH)..
⇒ Mã lệnh
lệnh::

⇒ Mô tả lệnh
lệnh::


CÁC KIỂU ðỊNH ðỊA CHỈ
ðịnh ñịa chỉ trực tiếp (Direct Addressing)
ðược dùng để truy xuất dữ liệu trong các ơ nhớ RAM nội (00H
00H - 7FH)
FH) và
trong các SFR (A, B, P0, P1, P2, P3, DPH, DPL, …) hay (80H
80H - FFH
FFH)).
Số byte của lệnh

lệnh:: 2 byte
byte..
Cấu trúc lệnh:
lệnh:
Ví dụ:
dụ: ADD A, P1 hoặc ADD A, 90H
90H ⇒ Lệnh cộng nội dung thanh ghi A
với nội dung Port 1 hay ô nhớ 90H
90H. (Giả sử:
sử: (A) = 05H,
05H, (P
(P1
1) = (90H)
90H) =
9AH)
AH)..
⇒ Mã lệnh
lệnh::

⇒ Mô tả lệnh
lệnh::


CÁC KIỂU ðỊNH ðỊA CHỈ
ðịnh ñịa chỉ gián tiếp (Indirect Addressing)
ðược dùng để truy xuất dữ liệu trong các ơ nhớ RAM nội có địa chỉ thay
đổi liên tục khi chương trình đang chạy
chạy.. R0 và R1 hoạt động như các
con trỏ và nội dung của chúng chỉ ra ñịa chỉ ô nhớ RAM cần truy xuất.
xuất.

Số byte của lệnh
lệnh:: 1 byte
byte..
Cấu trúc lệnh:
lệnh:
Ví dụ:
dụ: ADD A, @R0 ⇒ Lệnh cộng nội dung thanh ghi A với nội dung ô
nhớ có địa chỉ chứa trong thanh ghi R0. (Giả sử
sử:: (A) = 05H,
05H, (R0
(R0) = 3BH,
(3BH) = 9AH)
AH).
⇒ Mã lệnh
lệnh::

⇒ Mô tả lệnh
lệnh::


CÁC KIỂU ðỊNH ðỊA CHỈ
ðịnh ñịa chỉ tức thời (Immediate Addressing)
ðược dùng ñể truy xuất một hằng số (giá tr bi t tr c)
c) thay vì là một
biến (giá tr khơng bi t tr c)
c) như các kiểu định địa chỉ trên
trên.. Có thể
dùng để nạp dữ liệu vào mọi ô nhớ và thanh ghi bất kỳ (ñối với thanh ghi
8 bit:
bit: #00H

00H - #0FFH
FFH,, ñối với thanh ghi 16 bit:
bit: #0000
0000H
H - #0FFFFH
FFFFH)).
Số byte của lệnh
lệnh:: 2 byte
byte..
Cấu trúc lệnh:
lệnh:
Ví dụ:
dụ: ADD A, #9AH ⇒ Lệnh cộng nội dung thanh ghi A với giá trị 9AH.
AH.
(Giả sử
sử:: (A) = 05H
05H).
⇒ Mã lệnh
lệnh::

⇒ Mô tả lệnh
lệnh::


CÁC KIỂU ðỊNH ðỊA CHỈ
ðịnh ñịa chỉ tương ñối (Relative Addressing)
ðược sử dụng cho các lệnh nhảy (rẽ nhánh).
ðịa chỉ tương ñối (hay
(hay offset)
offset) là một giá trị 8 bit có dấu.

dấu.
Tầm nhảy giới hạn là: -128 byte … 127 byte từ vị trí của lệnh tiếp theo
sau lệnh nhảy.
Số byte của lệnh: 2 byte.
byte.
Cấu trúc lệnh:


CÁC KIỂU ðỊNH ðỊA CHỈ
ðịnh ñịa chỉ tương ñối (Relative Addressing)
(Giả sử: nhãn AAA đặt
Ví dụ 1: SJMP AAA ⇒ Lệnh nhảy ñến nhãn AAA (Giả
trước lệnh ở ñịa chỉ 0107H, lệnh SJMP nằm trong bộ nhớ tại ñịa chỉ
0100H và 0101H).
0101H).
⇒ Mã lệnh
lệnh::

⇒ Mô tả lệnh
lệnh::


CÁC KIỂU ðỊNH ðỊA CHỈ
ðịnh ñịa chỉ tương ñối (Relative Addressing)
(Giả sử: nhãn AAA đặt
Ví dụ 2: SJMP AAA ⇒ Lệnh nhảy ñến nhãn AAA (Giả
trước lệnh ở ñịa chỉ 203BH, lệnh SJMP nằm trong bộ nhớ tại ñịa chỉ
2040H và 2041H).
2041H).
⇒ Mã lệnh

lệnh::

⇒ Mô tả lệnh
lệnh::


CÁC KIỂU ðỊNH ðỊA CHỈ
ðịnh ñịa chỉ tuyệt ñối (Absolute Addressing)
ðược sử dụng cho các lệnh nhảy (rẽ nhánh): ACALL và AJMP
AJMP..
ðịa chỉ tuyệt ñối là một giá trị 11 bit.
bit.
Tầm nhảy giới hạn là: trong cùng trang 2KB hiện hành.
hành.
Số byte của lệnh: 2 byte.
byte.
Cấu trúc lệnh:


CÁC KIỂU ðỊNH ðỊA CHỈ
ðịnh ñịa chỉ tuyệt ñối (Absolute Addressing)
(Giả sử: nhãn AAA đặt
Ví dụ: AJMP AAA ⇒ Lệnh nhảy ñến nhãn AAA (Giả
trước lệnh ở ñịa chỉ 0F46H, lệnh AJMP nằm trong bộ nhớ tại ñịa chỉ
0900H và 0901H).
0901H).
⇒ Mã lệnh
lệnh::



CÁC KIỂU ðỊNH ðỊA CHỈ
ðịnh ñịa chỉ tuyệt ñối (Absolute Addressing)
⇒ Mô tả lệnh
lệnh::


CÁC KIỂU ðỊNH ðỊA CHỈ
ðịnh ñịa chỉ dài (Long Addressing)
ðược sử dụng cho các lệnh nhảy (rẽ nhánh): LCALL và LJMP
LJMP..
ðịa chỉ dài là một giá trị 16 bit.
bit.
Tầm nhảy giới hạn là: tồn bộ khơng gian nhớ 64KB.
64KB.
Số byte của lệnh: 3 byte.
byte.
Cấu trúc lệnh:


CÁC KIỂU ðỊNH ðỊA CHỈ
ðịnh ñịa chỉ dài (Long Addressing)
(Giả sử: nhãn AAA đặt
Ví dụ: LJMP AAA ⇒ Lệnh nhảy ñến nhãn AAA (Giả
trước lệnh ở ñịa chỉ A209H, lệnh LJMP nằm trong bộ nhớ tại ñịa chỉ
0100H, 0101H và 0102H).
0102H).
⇒ Mã lệnh
lệnh::

⇒ Mô tả lệnh

lệnh::


CÁC KIỂU ðỊNH ðỊA CHỈ
ðịnh ñịa chỉ chỉ số (Indexed Addressing)
ðược dùng trong các ứng dụng cần tạo bảng nhảy hay bảng tìm kiếm.
kiếm.
Kiểu định địa chỉ này dùng một thanh ghi nền (PC hay DPTR
DPTR)) kết hợp
với một offset (A) ñể tạo thành dạng ñịa chỉ cho lệnh
lệnh:: JMP và MOVC
MOVC..
Số byte của lệnh
lệnh:: 1 byte
byte..
Cấu trúc lệnh:
lệnh:

Ví dụ:
dụ: JMP @A+DPTR ⇒ Lệnh nhảy gián tiếp (Giả sử
sử:: (A) = 25H
25H và
(DPTR) = 1234
1234H
H ).
(A) + (DPTR) = 25H + 1234H = 1259H
⇒ Vậy chương trình sẽ nhảy đến thực thi lệnh tại ñịa chỉ 1259H


CÁC KIỂU ðỊNH ðỊA CHỈ

ðịnh ñịa chỉ thanh ghi (Register Addressing)
ðịnh ñịa chỉ trực tiếp (Direct Addressing)
ðịnh ñịa chỉ gián tiếp (Indirect Addressing)
ðịnh ñịa chỉ tức thời (Immediate Addressing)
ðịnh ñịa chỉ tương ñối (Relative Addressing)
ðịnh ñịa chỉ tuyệt ñối (Absolute Addressing)
ðịnh ñịa chỉ dài (Long Addressing)
ðịnh ñịa chỉ chỉ số (Indexed Addressing)


TẬP LỆNH CỦA 8051
Giới thiệu tập lệnh của 8051
8051::
Tối ưu hóa cho các ứng dụng điều khiển 8 bit.
bit.
Có nhiều kiểu ñịnh ñịa chỉ ñể truy xuất dữ liệu
liệu..
Hỗ trợ các ứng dụng ñiều khiển 1 bit.
bit.
Tập lệnh gồm 255 lệnh
lệnh::
• 139 lệnh có độ dài 1 byte
byte..
• 92 lệnh có độ dài 2 byte
byte..
• 24 lệnh có độ dài 3 byte
byte..

Tập lệnh được chia làm 5 nhóm
nhóm::







Nhóm lệnh số học (Arithmetic Operations)
Operations)..
Nhóm lệnh logic (Logical Operations)
Operations)..
Nhóm lệnh di chuyển dữ liệu (Data Transfer)
Transfer)..
Nhóm lệnh xử lý bit (Boolean Variable Manipulation)
Manipulation)..
Nhóm lệnh rẽ nhánh (Program Branching)
Branching)..


TẬP LỆNH CỦA 8051
Một số ký hiệu dùng trong lệnh :
Rn
direct
@Ri
source
dest
#data
#data16
bit
rel
addr11

addr16
←…
(…)
((…))
rrr
i
dddddddd
aaaaaaaa
eeeeeeee

ðịa chỉ thanh ghi sử dụng (R0
(R0 – R7).
R7).
ðịa chỉ trực tiếp của một byte trong RAM nội.
ðịa chỉ gián tiếp sử dụng (R0
(R0 hoặc R1).
R1).
Toán hạng nguồn (Rn,
(Rn, direct hoặc @Ri).
@Ri).
Tốn hạng đích (Rn,
(Rn, direct hoặc @Ri).
@Ri).
Hằng số 8 bit .
Hằng số 16 bit.
ðịa chỉ trực tiếp của một bit (địa
(địa chỉ bit).
bit).
Offset 8 bit có dấu.
ðịa chỉ 11 bit.

ðịa chỉ 16 bit.
ðược thay thế bởi …
Nội dung của …
Nội dung ñược chứa bởi …
Thanh ghi của dãy thanh ghi (R0
(R0 - R7).
R7).
ðịa chỉ gián tiếp sử dụng (R0 hoặc R1).
Các bit dữ liệu.
Các bit ñịa chỉ.
ðịa chỉ tương ñối.


TẬP LỆNH CỦA 8051
NHÓM LỆNH SỐ HỌC

1. Lệnh cộng (Add):
(Add):
ADD A, Mô tả
tả:: ADD cộng nội dung của thanh ghi A (A) với nội dung của một
byte có địa chỉ ñược chỉ ra trong lệnh (srcsrc-byte
byte)) và ñặt kết quả vào
thanh ghi A. Các cờ bị ảnh hưởng
hưởng..
Các dạng lệnh
lệnh::
ADD A, Rn
(A) ← (A) + (Rn)
ADD A, direct

(A) ← (A) + (direct)
ADD A, @Ri
(A) ← (A) + ((Ri))
ADD A, #data
(A) ← (A) + #data



×