Các kiểu định địa chỉ.-Khi một lệnh được thực thi và lệnh này yêu cầu dữ liệu, một câu hỏi được đặt ra là "Dữ liệu chứa ở đâu?" Câu trả lời cho câu hỏi này tạo ra các kiểu mode định đị
Trang 13 TẬP LỆNH CỦA 8051
Trang 21 Các kiểu định địa chỉ.
-Khi một lệnh được thực thi và lệnh này yêu cầu
dữ liệu, một câu hỏi được đặt ra là "Dữ liệu chứa
ở đâu?" Câu trả lời cho câu hỏi này tạo ra các kiểu (mode) định địa chỉ của 8051.
- Các kiểu định địa chỉ cho phép ta xác định rõ nguồn và đích của dữ liệu theo nhiều cách khác nhau phụ thuộc vào tình huống lập trình
Trang 3• Bộ nhớ dữ liệu: RAM – 128 Byte
R4 R5
7F 7E 7D 7C 7B 7A 79 78
…
… 1F 1E 1D 1C 1B 1A 19 18
17 16 15 14 13 12 11 10 0F 0E 0D 0C 0B 0A 09 08
07 06 05 04 03 02 01 00
2F 2E
20
Byte address
Trang 5Định địa chỉ tức thời (Immediate)
- Khi toán hạng nguồn là một hằng số thay vì là một biến và đây là byte dữ liệu tức thời.
- Trước dữ liệu phải có dấu #
-Tất cả các lệnh sử dụng kiểu định địa chỉ tức thời đều sử dụng hằng
dữ liệu 8-bit làm dữ liệu tức thời
-Có một ngoại lệ khi ta khởi động con trỏ dữ liệu 16-bit DPTR, hằng
dữ liệu 16-bit được cần đến.
MOV R6,#55H
Trang 6Kiểu thanh ghi (Register)
- Sử dụng thanh ghi làm việc để lưu dữ liệu cần thao tác
Hợp ngữ của 8051 chỉ ra kiểu định địa chỉ thanh ghi bằng
ký hiệu Rn, trong đó n có giá trị từ 0 đến 7
VD: ADD A,R7.
- Thanh nguồn và đích phải phù hợp nhau về kích thước
- Không được phép chuyển trực tiếp giữa các thanh ghi Rn với nhau
Trang 7Định địa chỉ trực tiếp (Direct)
-Địa chỉ của dữ liệu được chỉ ra trực tiếp trong lệnh.
-Chế độ định địa chỉ trực tiếp có thể dùng để truy cập toàn bộ không gian của bộ nhớ trong RAM Tuy nhiên, thực tế chế độ này thường được dùng để truy cập các ngăn nhớ RAM từ địa chỉ 30H đến 7FH
-Cần phân biệt với chế độ định địa chỉ tức thời
-Các thanh ghi R0 đến R7 có thể truy cập bằng 2 cách: Thanh ghi và trực tiếp
Trang 8Định địa chỉ gián tiếp (Indirect)
-Ở chế độ này, thanh ghi được dùng để trỏ đến dữ liệu có trong
bộ nhớ Nếu dữ liệu ở trên chip thì các thanh ghi R0 và R1
được sử dụng, hoạt động như những con trỏ (pointer)
-Kiểu định địa chỉ gián tiếp được nhận biết dựa vào ký hiệu
@.
Ví dụ
Ví dụ: Ghi số 55H vào các ô nhớ từ 40H đến 44H trong RAM
MOV A,#55H ; Nạp vào A giá trị 55H MOV R0,#40H ; Nạp vào con trỏ R0 = 40H MOV @R0,A ; Ghi A vào thanh ghi do R0 trỏ đến
INC R0 ; Tăng con trỏ Bây giờ R0 = 41H MOV @R0,A ; Ghi A vào thanh ghi do R0 trỏ đến (41H)
INC R0 ; Tăng con trỏ Bây giờ R0 = 42H
Trang 9+ Định địa chỉ chỉ số.
- Sử dụng một thanh ghi nền (hoặc bộ đếm chương trình
hoặc con trỏ dữ liệu) và một offset (thanh chứa A) tạo
thành dạng địa chỉ hữu dụng cho lệnh JMP hoặc MOVC.
- Trong nhiều ứng dụng, các bảng nhảy hoặc các bảng tìm kiếm được tạo ra dễ dàng bằng cách sử dụng kiểu định địa chỉ chỉ số.
VD: Đọc giá trị từ x (0 đến 9) ở cổng P0 và xuất ra giá trị
Trang 12(A) (A) + (C) + (Source)
Nhóm lệnh số học (tiếp)
Trang 13(A) (A) - (C) - (source)
Nhóm lệnh số học (tiếp)
Trang 16LỆNH MÔ TẢ
MUL AB trong A và B Byte thấp của tích số 16-bit Nhân các số nguyên không dấu 8-bit chứa
cất trong A, byte cao cất trong B
DIV AB
Chia số nguyên không dấu 8-bit chứa trong A với số nguyên không dấu 8-bit chứa trong B Thương số cất trong A, còn số dư cất trong B
DA A Hiệu chỉnh thập phân nội dung của thanh
Nhóm lệnh số học (tiếp)
Trang 17(des) (des) AND (source)
2 Nhóm lệnh Logic
Trang 18toán hạng đích.
(des) (des) OR (source)
Nhóm lệnh Logic (tiếp)
Trang 19toán hạng đích.
(des) (des) XOR (source)
Nhóm lệnh Logic (tiếp)
Trang 22Nhóm lệnh di chuyển dữ liệu (tiếp)
Trang 23Nhóm lệnh di chuyển dữ liệu (tiếp)
Trang 2416-bit
Nhóm lệnh di chuyển dữ liệu (tiếp)
Trang 25LỆNH MÔ TẢ
MOVC A,@A+DPTR
PUSH direct
Nhóm lệnh di chuyển dữ liệu (tiếp)
Trang 26ANL C,/bit (not bit)
AND bit với C AND NOT bit với C
ORL C,bit
ORL C,/bit (not bit)
OR bit với C
OR NOT bit với C
Trang 275 Nhóm lệnh điều khiển rẽ nhánh
+ Gọi chương trình con
ACALL addr11
RET Quay trở về từ chương trình con
Trang 28JMP @A+DPTR Nhảy gián tiếp
5 Nhóm lệnh điều khiển rẽ nhánh
+ Nhảy không điều kiện
Trang 29Ví dụ: Viết chương trình nhấp nháy led
Trang 30LỆNH MÔ TẢ
JZ rel Nhảy đến địa chỉ(hoặc nhãn) chỉ ra trong lệnh nêú nội dung A bằng 0.
Jump if A Zero
Jump if A Not Zero
5 Nhóm lệnh điều khiển rẽ nhánh
+ Nhảy có điều kiện
Trang 31hiện lệnh tiếp theo.
Decrease and Jump if Not Zero
Nhóm lệnh điều khiển rẽ nhánh (tiếp)
Trang 32Ví dụ: Viết đoạn chương trình delay
• ORG 0000H
• MAIN:
• CPL P3.0 // THAY DOI TRANG THAI P3.0
• ACALL DELAY // TAO TRE
Trang 33lệnh nếu dest và source không
bằng nhau Nếu bằng nhau, thực hiện lệnh tiếp theo.
Compare and jump if not
equal
Nhóm lệnh điều khiển rẽ nhánh (tiếp)
Trang 34Ví dụ: Viết chương trình điều khiển đèn giao thông
Trang 35LỆNH MÔ TẢ
JNB bit,rel nhảy đến địa chỉ được chỉ ra trong lệnh Nếu bit được chỉ ra trong lệnh bằng 0,
Ngược lại, thực hiện lệnh tiếp theo
JB bit,rel Nếu bit được chỉ ra trong lệnh bằng 1, xóa bit và nhảy đến địa chỉ được chỉ ra trong
lệnh Ngược lại, thực hiện lệnh tiếp theo
Nhóm lệnh điều khiển rẽ nhánh (tiếp)
Trang 36Viết chương trình thực hiên phép cộng các nội dung ô nhớ trong RAM từ ô nhớ 50H đến 100H:
Trang 38Viết chương trình thực hiên phép cộng các nội dung ô nhớ trong RAM từ ô nhớ 50H đến 100H:
- Yêu cầu: Byte cao chứa trong R2, Byte thấp chứa
trong R1
- Hướng giải quyết:
- Dùng chế độ định địa chỉ gián tiếp thanh ghi @Ri để truy cập
Trang 39Vi du
• Viết chương trình thay đổi giá trị thời gian
bằng các nút ấn tăng giảm.
Trang 40• Sử dụng các lệnh nhảy để tạo các cấu trúc lập
trình cơ bản
• Cấu trúc chọn kiểu IF
• Cấu trúc chọn kiểu IF – ELSE
• Cấu trúc chọn kiểu CASE
• Cấu trúc lặp WHILE; WHILE – DO; FOR;