chuong 3 khao sat tap lenh va ltrinh vdk
DESCRIPTION
vi điều khiển cho cơ khí động lực c3TRANSCRIPT
![Page 1: Chuong 3 khao sat tap lenh va ltrinh vdk](https://reader031.vdocuments.pub/reader031/viewer/2022020207/5590d87f1a28ab11768b45d1/html5/thumbnails/1.jpg)
Nội dung:
• Chương 1: Giới thiệu về Vi xử lý
• Chương 2: Giới thiệu về cấu trúc của Họ Vi điều
khiển 8051
• Chương 3: Khảo sát tập lệnh và lập trình Vi điềukhiển 8051
• Chương 4: Hoạt động của bộ định thời
• Chương 5: Hoạt động ngắt
• Chương 6: Hoạt động truyền thông nối tiếp
• Chương 7: Thiết kế giao tiếp
Chương 3: Khảo sát tập lệnh và lập trình
Các ký hiệu cần chú ý:
• Rn : Các thanh ghi từ R0 – R7 (bank thanh ghi hiện hành)
• Ri : Các thanh ghi từ R0 – R1 (bank thanh ghi hiện hành)
• @Rn : định địa chỉ gián tiếp 8 bit dùng thanh ghi Rn
• @DPTR : định địa chỉ gián tiếp 16 bit dùng thanh ghi DPTR
• direct : Định địa chỉ trực tiếp RAM nội (00h – 7Fh)
hay SFR (80h – FFh)
• (direct) : nội dung của bộ nhớ tại địa chỉ direct
• #data8 : giá trị tức thời 8 bit
• #data16 : giá trị tức thời 16 bit
• bit : địa chỉ bit của các ô nhớ có thể định địa chỉ bit
3.1. Các chế độ định địa chỉ của MCS - 51
Có 8 chế độ định địa chỉ:
� Định địa chỉ trực tiếp.
� Định địa chỉ gián tiếp.
� Định địa chỉ tức thời.
� Định địa chỉ thanh ghi.
� Định địa chỉ tương đối.
� Định địa chỉ tuyệt đối.
� Định địa chỉ dài.
� Định địa chỉ chỉ số.
3.1. Các chế độ định địa chỉ
3.1.1. Định địa chỉ trực tiếp (Direct Addressing)
• Dùng để truy xuất các ô nhớ trong RAM nội (00h – 7Fh)
và các thanh ghi chức năng đặc biệt (80h - FFh).
• Các lệnh có kiểu định địa chỉ trực tiếp thường chiếm
2 byte: byte thứ nhất là mã lệnh (opcode), byte thứ hai
là địa chỉ trực tiếp của ô nhớ.
![Page 2: Chuong 3 khao sat tap lenh va ltrinh vdk](https://reader031.vdocuments.pub/reader031/viewer/2022020207/5590d87f1a28ab11768b45d1/html5/thumbnails/2.jpg)
3.1. Các chế độ định địa chỉ
3.1.1. Định địa chỉ trực tiếp (Direct Addressing)
Ví dụ: Các lệnh sau có kiểu định địa chỉ trực tiếp:
MOV A, P0
⇒⇒⇒⇒ Chuyển nội dung từ Port 0 vào thanh ghi A
MOV A, 30h
⇒⇒⇒⇒ Chuyển nội dung của ô nhớ có địa chỉ 30h vào
thanh ghi A
3.1. Các chế độ định địa chỉ
3.1.2. Định địa chỉ gián tiếp (Indirect Addressing)
Dùng để truy xuất cho cả RAM nội và RAM ngoài.
• Các thanh ghi R0 và R1 hoạt động như các con trỏ, dùng
để truy xuất RAM nội. Nội dung của các thanh ghi này là
địa chỉ của RAM nội.
Ví dụ: MOV A, @R0
⇒⇒⇒⇒ Chuyển nội dung của RAM nội có địa chỉ chứa trong
R0 vào thanh chứa A.
3.1. Các chế độ định địa chỉ
3.1.2. Định địa chỉ gián tiếp (Indirect Addressing)
• Thanh ghi DPTR dùng để truy xuất RAM ngoại
Ví dụ: MOV DPTR, #5000h
MOVX A, @DPTR
⇒Nạp địa chỉ 5000h (RAM ngoài) vào con trỏ DPTR;
⇒ Chuyển nội dung của RAM ngoài có địa chỉ chứa trong
DPTR vào thanh chứa A.
• Các lệnh ở chế độ địa chỉ gián tiếp chỉ chiếm 1 byte
3.1. Các chế độ định địa chỉ
3.1.3. Định địa chỉ tức thời (Immediate Addressing)
• Dùng để đưa trực tiếp hằng số vào mã lệnh của chương
trình. Hằng số được xác định bằng cách sử dụng dấu #.
Ví dụ: MOV A, #10h; ⇒⇒⇒⇒ Nạp giá trị 10h vào thanh chứa A.
• Lệnh này chiếm từ 2 đến 3 byte
![Page 3: Chuong 3 khao sat tap lenh va ltrinh vdk](https://reader031.vdocuments.pub/reader031/viewer/2022020207/5590d87f1a28ab11768b45d1/html5/thumbnails/3.jpg)
3.1. Các chế độ định địa chỉ
3.1.4. Định địa chỉ thanh ghi (Register Addressing)
• Dùng cho các lệnh xử lý dữ liệu chứa trong thanh ghi.
Việc truy xuất thanh ghi làm việc trong 8 thanh ghi
(R0 đến R7) được mã hóa bằng 3 bit trong Opcode.
Ví dụ: ADD A, R2⇒⇒⇒⇒ Cộng nội dung của R2 và A
MOV R0, A
⇒⇒⇒⇒ Chuyển nội dung thanh ghi A vào R0
• Mã lệnh thuộc kiểu này chiếm 1 byte
3.1. Các chế độ định địa chỉ
3.1.5. Định địa chỉ tương đối (Relative Addressing)
• Kiểu định địa chỉ này sử dụng cho các lệnh nhảy. Nơi nhảy
đến có địa chỉ bằng địa chỉ hiện hành trong thanh ghi PC
cộng với địa chỉ tương đối (Relative Offset).
• Địa chỉ tương đối là một số 8 bit có dấu nên tầm nhảy ngắn
giới hạn từ -127 byte (nhảy lùi) đến 128 byte (nhảy tới).
Ví dụ: SJMP X1
⇒⇒⇒⇒ Nhảy đến nhãn có tên X1 nằm trong giới hạn 256 byte
3.1. Các chế độ định địa chỉ
3.1.5. Định địa chỉ tương đối (Relative Addressing)
Lệnh nhảy thuộc kiểu định địa chỉ này chiếm 2 byte.
• Byte thứ nhất là mã lệnh (Opcode).
• Byte thứ hai là địa chỉ tương đối (Relative Offset).
3.1. Các chế độ định địa chỉ
3.1.6. Định địa chỉ tuyệt đối (Absolute Addressing)
• Kiểu định địa chỉ này dùng với các lệnh ACALL và AJMP.
• Các lệnh này chiếm 2 byte. Trong đó, Opcode nằm ở 5 bit
cao. Nơi nhảy đến hoặc gọi đến nằm trong phạm giới hạn
2 kbyte.
![Page 4: Chuong 3 khao sat tap lenh va ltrinh vdk](https://reader031.vdocuments.pub/reader031/viewer/2022020207/5590d87f1a28ab11768b45d1/html5/thumbnails/4.jpg)
3.1. Các chế độ định địa chỉ
3.1.6. Định địa chỉ tuyệt đối (Absolute Addressing)
Ví dụ: AJMP X2
⇒⇒⇒⇒ Nhảy đến nhãn có tên X2 nằm trong giới hạn 2
kbyte
3.1. Các chế độ định địa chỉ
3.1.7. Định địa chỉ dài (Long Addressing)
• Kiểu định đại chỉ này dùng với các lệnh LCALL và LJMP.
• Các lệnh này chiếm 3 byte. Trong đó, 2 byte chứa địa chỉ
của nơi đến. Do đó, Nơi nhảy đến hoặc gọi đến nằm trong
giới hạn 64 kbyte.
3.1. Các chế độ định địa chỉ
3.1.8. Định địa chỉ chỉ số (Indexed Addressing)
• Kiểu định đại chỉ này dùng “một thanh ghi cơ bản
(Base Register)” (PC hoặc DPTR) kết hợp với “một
giá trị lệch (Offset)” để tạo ra địa chỉ của ô nhớ cần
truy xuất hoặc địa chỉ của nơi nhảy đến.
3.1. Các chế độ định địa chỉ
3.1.8. Định địa chỉ chỉ số (Indexed Addressing)
• Ví dụ: MOVX A, @A+DPTR
⇒⇒⇒⇒ Chuyển dữ liệu trong vùng nhớ A + DPTR vào
thanh chứa A.
![Page 5: Chuong 3 khao sat tap lenh va ltrinh vdk](https://reader031.vdocuments.pub/reader031/viewer/2022020207/5590d87f1a28ab11768b45d1/html5/thumbnails/5.jpg)
3.2. Tập lệnh của MCS - 51
• Tập lệnh của MCS-51 được thiết kế với Opcode 8 bit.
⇒ Có khả năng mã hóa 256 lệnh khác nhau (thực tế có
255 lệnh).
• Ngoài Opcode, một lệnh còn có thể có 1 hoặc 2 byte để
mã hóa chế độ địa chỉ:
� 139 lệnh 1 byte.
�92 lệnh 2 byte.
� 24 lệnh 3 byte.
3.2. Tập lệnh của MCS - 51
Gồm 5 nhóm lệnh cơ bản:
� Nhóm lệnh số học (ADD, SUB, MUL, DIV,…).
�Nhóm lệnh logic (AND, OR, XOR, NOT,…).
� Nhóm lệnh chuyển dữ liệu (MOV).
� Nhóm lệnh xử lý bit (SETB, CLR,…).
� Nhóm lệnh rẽ nhánh (JMP,…).
3.2.1. Nhóm lệnh số học
Gồm các lệnh:
• Cộng: ADD
• Trừ: SUBB
• Nhân: MUL
• Chia: DIV
• Tăng: INC
• Giảm: DEC
3.2. Tập lệnh của MCS - 51
3.2.1. Nhóm lệnh số học
Tất cả các lệnh số học được thực thi trong 1 chu kỳ
máy (1µµµµs), trừ các lệnh:
• INC DPTR ⇒⇒⇒⇒ thực thi trong 2 chu kỳ máy.
• Các lệnh MUL, DIV ⇒⇒⇒⇒ thực thi trong 4 chu kỳ
máy.
3.2. Tập lệnh của MCS - 51
![Page 6: Chuong 3 khao sat tap lenh va ltrinh vdk](https://reader031.vdocuments.pub/reader031/viewer/2022020207/5590d87f1a28ab11768b45d1/html5/thumbnails/6.jpg)
3.1.2. Nhóm lệnh logic
3.2. Tập lệnh của MCS - 51
• Nhóm lệnh logic thực hiện các phép toán logic trên các
byte dữ liệu. Trong đó, thanh chứa A luôn đóng vai trò
là một toán hạng và lưu kết quả.
• Tất cả các lệnh logic đều được thực hiện trong 1 chu
kỳ máy.
• Nhóm lệnh logic bao gồm: ANL, ORL, XRL, CPL, RL
(Rotate Left), RR (Rotate Right).
3.1.3. Nhóm lệnh di chuyển dữ liệu
3.2. Tập lệnh của MCS - 51
Nhóm lệnh chuyển dữ liệu bao gồm:
• Chuyển dữ liệu trong RAM nội: MOV, XCH, XCHD
• Chuyển dữ liệu trong RAM ngoài: MOVX
• Chuyển dữ liệu từ bộ nhớ chương trình: MOVC
(thường dùng để truy xuất bảng dữ liệu trong bộ nhớ
chương trình ).
• Truy nhập ngăn xếp: PUSH, POP.
3.1.4. Nhóm lệnh xử lý bit
3.2. Tập lệnh của MCS - 51
Bao gồm các lệnh:
• Xóa, thiết lập bit: CLR, SETB
• Logic: ANL, ORL, CPL
• Di chuyển bit: MOV
3.1.5. Nhóm lệnh rẽ nhánh chương trình
3.2. Tập lệnh của MCS - 51
Bao gồm các lệnh:
• Gọi chương trình con: ACALL, LCALL, RETI
• Nhảy không điều kiện: JMP, SJMP, LJMP, AJMP
• Nhảy có điều kiện: JC, JNC, JB, JNB, JZ, JNZ,
CJNE, DJNE
![Page 7: Chuong 3 khao sat tap lenh va ltrinh vdk](https://reader031.vdocuments.pub/reader031/viewer/2022020207/5590d87f1a28ab11768b45d1/html5/thumbnails/7.jpg)
3.3.1. Trình dịch hợp ngữ
3.3. Lập trình hợp ngữ cho MCS - 51
• Khi chương trình nguồn được viết, phần mở rộng của tập
tin nguồn là “.asm” hoặc “.src”.
• Trình dịch hợp ngữ của 8051 sẽ dịch tập tin này ra dạng mã
máy và tạo ra tập tin đối tượng (.obj) và tập tin liệt kê (.lst).
• Các chương trình 8051IDE, Keil C51 là các chương trình
bao gồm 3 chức năng: soạn thảo chương trình nguồn, dịch
chương trình nguồn và mô phỏng được ứng dụng khi lập
trình MCS – 51.
3.3.2. Khuôn dạng của chương trình hợp ngữ
3.3. Lập trình hợp ngữ cho MCS - 51
[Nhãn:] [Từ gợi nhớ] [Các toán hạng] [;Chú thích]
Loop: MOV A, P0 ; Chuyển(P0)→→→→(A)
Ví dụ:
Lệnh trong hợp ngữ có 4 trường như sau:
Chương trình thực hiện như sau:
ORG 0000H ; Địa chỉ bắt đầu
MOV TMOD, #10h ; Thiết lập chế độ 1 của Timer 1
Loop: MOV TH1, #HIGH (-500) ; Nạp byte cao của -500
MOV TL1, #LOW (-500) ; Nạp byte thấp của -500
SETB TR1 ; Cho phép timer 0 hoạt động
Wait: JNB TF1, Wait ; Nếu Timer chưa tràn thì chờ
CLR TF1 ; Xóa cờ tràn
CPL P1.0 ; Đảo bit P1.0 để tạo xung vuông
CLR TR1
SJMP Loop
END
3.3.2. Khuôn dạng của chương trình hợp ngữ
Không nhất thiết lúc nào cũng có đầy đủ 4 trường, Tuy
nhiên, có một số điểm cần lưu ý:
• Nhãn: cho phép chương trình tham chiếu đến một dòng
lệnh bằng tên nhãn.
• Từ gợi nhớ và toán hạng: kết hợp với nhau để thực hiện
nhiệm vụ của chương trình.
• Chú thích: ghi vào các lời giải thích cho chương trình và
được viết sau dấu “;”. Trình dịch hợp ngữ sẽ bỏ qua các
chú thích này khi dịch chương trình.
![Page 8: Chuong 3 khao sat tap lenh va ltrinh vdk](https://reader031.vdocuments.pub/reader031/viewer/2022020207/5590d87f1a28ab11768b45d1/html5/thumbnails/8.jpg)
3.3.3. Các chỉ dẫn
� Chỉ dẫn ORG (Set origin):
Dùng để khai báo địa chỉ bắt đầu của chương trình.
ORG Expression
Expression: địa chỉ bắt đầu của chương trình
tronng bộ nhớ chương trình.
Ví dụ: ORG 300h
Các lệnh …,,,,,,
⇒⇒⇒⇒ Chương trình bắt đầu từ địa chỉ 300h trong ROM
3.3.3. Các chỉ dẫn
� Chỉ dẫn END
• Chỉ dẫn này báo cho trình dịch hợp ngữ biết kết
thúc tập tin nguồn (.ASM).
• Chỉ dẫn END là dòng cuối cùng của chương trình
8051, nghĩa là mọi lệnh sau END đều bị trình dịch
bỏ qua.
3.3.3. Các chỉ dẫn
� Chỉ dẫn EQU (Equate)
• Chỉ dẫn này được dùng để gán (định nghĩa) một
giá trị cho nhãn.
Symbol EQU Expression
• Ví dụ: Led7 EQU P0
MOV Led7, A ;Xuất dữ liệu từ A⇒⇒⇒⇒ P0
Count EQU 100 ;Count có giá trị 100
3.3.3. Các chỉ dẫn
� Chỉ dẫn DB (Define Byte)
• Chỉ dẫn dùng để định nghĩa (các) giá trị byte dữ liệu.
Thường được dùng để đặt các hằng số (bảng dữ liệu) vào
bộ nhớ chương trình.
[Label:] DB Expression
Ví dụ: ORG 500h
DATA: DB 12h, 55h, 64h, 08h….
⇒⇒⇒⇒ Định nghĩa DATA gồm các giá trị: 12h, 55h, 64h,
….nằm trong bộ nhớ ROM với địa chỉ bắt đầu 500h
![Page 9: Chuong 3 khao sat tap lenh va ltrinh vdk](https://reader031.vdocuments.pub/reader031/viewer/2022020207/5590d87f1a28ab11768b45d1/html5/thumbnails/9.jpg)
3.3.3. Các chỉ dẫn
� Chỉ dẫn DB (Define Byte)
Địa chỉ Mô tả Bit
500h 12h
501h 55h
502h 64h
503h 08h
504h ….,
…, ….,
3.3.3. Các chỉ dẫn
� Chỉ dẫn DW (Define word)
• Chỉ dẫn này tương tự DB nhưng mỗi phần tử được gán
cho một vùng nhớ 2 byte (word)
[Label:] DW Expression
Ví dụ: ORG 600h
DATA: DW 1234h, 515h, 64h, ….
⇒⇒⇒⇒ Định nghĩa DATA gồm các giá trị: 12h, 55h, 64h,
….nằm trong bộ nhớ ROM với địa chỉ bắt đầu 600h
3.3.3. Các chỉ dẫn
� Chỉ dẫn DW (Define word)
Địa chỉ Mô tả Bit
600h 34h
601h 12h
602h 15h
603h 05h
604h 64h
605h 00
606h ….,
…, ….,
Nội dung:
• Chương 1: Giới thiệu về Vi xử lý
• Chương 2: Giới thiệu về cấu trúc của Họ Vi điều
khiển 8051
• Chương 3: Khảo sát tập lệnh và lập trình Vi điều
khiển 8051
• Chương 4: Hoạt động của bộ định thời
• Chương 5: Hoạt động ngắt
• Chương 6: Hoạt động truyền thông nối tiếp
• Chương 7: Thiết kế giao tiếp