1
CHƯƠNG 3
TẬP LỆNH PIC16F8xx
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
1. Cấu trúc của lệnh
- Các lệnh sẽ được nạp vào bộ nhớ chương trình.
- Mỗi lệnh PIC16Fxx cấu tạo bởi 1 word = 14 bit.
- Cấu trúc lệnh được phân theo 3 loại:
+ Các lệnh thao tác định hướng theo Byte
( Byte-oriented File Register Operations)
+ Các lệnh thao tác định hướng theo Bit
( Bit-oriented File Register Operations)
+ Các lệnh thao tác với giá trị HẰNG SỐ hoặc
( Literal and Control Operations) NHÃN.
2
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
a. Cấu trúc một dòng lệnh
[ NHÃN ] LỆNH Tham số1, Tham số2
- NHÃN: là Tên đánh dấu vị trí dòng lệnh nào đó trong
chương trình, được dùng với lệnh nhảy tới Nhãn
GOTO hoặc lệnh gọi chương trình con CALL
- Lệnh và Tham số: một lệnh có thể có 1 hoặc 2 hay
không có tham số nào, tham số là đối tượng lệnh
thực hiện. Ví dụ: MOVLW 00h
BSF 03h,5
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
b. Cấu trúc lệnh thao tác định hướng theo Byte
- OPCODE: mã địa chỉ của lệnh (mã lệnh).
- d (Destination select): bit chọn thanh ghi đích đến.
+ d=0 kết quả lưu vào thanh ghi W
+ d=1 kết quả lưu vào tập thanh ghi F
Giảm F
Giảm F, Nhảy nếu F=0
Tăng F
Tăng F, Nhảy nếu F=0
OR (W và F)
Di chuyển F
Chuyển W vào F
Không làm gì
Xoay trái F có C
5
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Các lệnh thao tác định hướng theo Bit
Xóa Bit trong F
Đặt Bit trong F
Ktra Bit = 0, Nhảy
Ktra Bit = 1, Nhảy
Xoay phải F có C
Lấy F - W
Đổi 4bit Cao - 4bit Thấp
XOR (W và F)
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Các lệnh thao tác với hằng số hoặc Nhãn
Cộng k với W
AND (k và W)
Gọi CT con thực hiện
Tắt chế độ WDT
Nhảy tới vị trí NHÃN
OR (k và W)
Chuyển k vào W
Thoát từ CT Ngắt
- Chú ý: Trường hợp ghi d thì có thể ghi trực tiếp
tên thanh ghi chứa kết quả W, hoặc không ghi thì
Kết quả sẽ lưu vào thanh ghi F.
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Trừ với hằng số k
- Cú pháp: SUBLW k
- Phạm vi: 0 ≤ k ≤ 255
- Thực thi: k - (W)
(W)
- Trạng thái ảnh hưởng: C, DC, Z
- Diễn giải: Lấy hằng số k trừ W.
Kết quả lưu vào W.
8
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Trừ thanh ghi
- Cú pháp: SUBWF F,d
- Phạm vi: 0 ≤ F ≤ 127; d = 0,1
- Thực thi: (F) - (W)
(dest)
- Trạng thái ảnh hưởng: C, DC, Z
- Diễn giải: Trừ nội dung F cho nội dung W.
Kết quả: lưu vào W nếu d=0
lưu vào F nếu d=1.
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Tăng thanh ghi
- Cú pháp: INCF F,d
- Phạm vi: 0 ≤ F ≤ 127; d = 0,1
- Thực thi: (F) + 1
Kết quả: lưu vào W nếu d=0
lưu vào F nếu d=1.
10
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Giảm thanh ghi và Nhảy
- Cú pháp: DECFSZ F,d
- Phạm vi: 0 ≤ F ≤ 127; d=0,1
- Thực thi: (F) - 1
(dest)
- Trạng thái ảnh hưởng: Z
- Diễn giải:
Giảm nội dung F 1 đơn vị.
Kết quả: lưu vào W nếu d=0
lưu vào F nếu d=1.
Nếu kết quả = 0 thì bỏ qua lệnh kế (=NOP) và thực
hiện lệnh kế tiếp theo. Lệnh mất 2 chu kỳ máy.
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
2.2 Nhóm lệnh Logic
Phép NOT
- Cú pháp: COMF F,d
- Phạm vi: 0 ≤ F ≤ 127; d=0,1
- Thực thi: (F)\
(dest)
- Trạng thái ảnh hưởng: Z
- Diễn giải: Đảo nội dung thanh ghi F.
Kết quả: lưu vào W nếu d=0
lưu vào F nếu d=1.
11
- Diễn giải: AND nội dung thanh ghi W với k.
Kết quả lưu vào W.
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Phép AND thanh ghi
- Cú pháp: ANDWF F,d
- Phạm vi: 0 ≤ F ≤ 127; d=0,1
- Thực thi: (W) AND (F)
(dest)
- Trạng thái ảnh hưởng: Z
- Diễn giải: AND nội dung thanh ghi W với F.
Kết quả: lưu vào W nếu d=0
lưu vào F nếu d=1.
13
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Phép XOR với hằng số k
- Cú pháp: XORLW k
- Phạm vi: 0 ≤ k ≤ 255
- Thực thi: (W) XOR k
(W)
- Trạng thái ảnh hưởng: Z
- Diễn giải: XOR nội dung thanh ghi W với k.
Kết quả lưu vào W.
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Phép XOR thanh ghi
- Cú pháp: XORWF F,d
- Phạm vi: 0 ≤ F ≤ 127; d=0,1
- Thực thi: (W) XOR (F)
- Phạm vi:
- Thực thi:
- Trạng thái ảnh hưởng:
TO\ = 1, PD\ = 1
- Diễn giải: -Reset WDT
-Reset Prescaler WDT
-Bit TO\ = 1 và PD\ =1.
Bit (Time-out) và (Power down)
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Vào chế độ Stanby
- Cú pháp: SLEEP
- Thực thi:
- Trạng thái ảnh hưởng:
TO\ = 1, PD\ = 0
- Diễn giải:
+Reset WDT
+Reset Prescaler
+Stop Bộ dao động
+Bit TO\ = 1.
+Bit PD\ = 0.
16
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
2.3 Nhóm lệnh di chuyển dữ liệu
Di chuyển hằng số k
- Cú pháp: MOVLW k
- Phạm vi: 0 ≤ k ≤ 255
- Thực thi: k
(W)
- Trạng thái ảnh hưởng: Z
BCF STATUS, C
18
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Kiểm tra và Nhảy nếu Bit = 0
- Cú pháp: BTFSC F,b
- Phạm vi: 0 ≤ F ≤ 127; 0 ≤ b ≤ 7
- Thực thi: Nhảy nếu F<b> = 0.
- Trạng thái ảnh hưởng:
- Diễn giải: Nếu F<b> = 0 thì Nhảy: bỏ qua 1 lệnh
F<b> = 1 thì làm lệnh kế tiếp.
- Ví dụ:
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Kiểm tra và Nhảy nếu Bit = 1
- Cú pháp: BTFSS F,b
- Phạm vi: 0 ≤ F ≤ 127; 0 ≤ b ≤ 7
- Thực thi: Nhảy nếu F<b> = 1.
- Trạng thái ảnh hưởng:
- Diễn giải: Nếu F<b> = 1 thì Nhảy: bỏ qua 1 lệnh
F<b> = 0 thì làm lệnh kế tiếp.
19
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Xoay trái có C
- Cú pháp: RLF F,d
- Phạm vi: 0 ≤ F ≤ 127
d=0,1
- Trạng thái ảnh hưởng: C
- Diễn giải: Xoay trái thanh ghi F và C một lần.
Kết quả: lưu vào W nếu d=0
lưu vào F nếu d=1.
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Lệnh này mất 2 chu kỳ máy.
21
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Lệnh Gọi chương trình con thực thi
- Cú pháp: CALL k
- Phạm vi: 0 ≤ k ≤ 2047 (11bit)
- Thực thi:
- Diễn giải:
+Gọi chương trình con (k).
+Đặt địa chỉ của lệnh kế tiếp
trong PC vào ngăn xếp Stack.
+Lệnh này mất 2 chu kỳ máy.
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Lệnh trở về từ chương trình con
- Cú pháp: RETURN
- Thực thi:
- Diễn giải:
+Trở lại vị trí nhảy ban đầu
từ chương trình con.
+Trả lại địa chỉ mã lệnh
cho PC từ ngăn xếp Stack.
+Lệnh mất 2 chu kỳ máy.
22
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Lệnh trở về từ chương trình con Ngắt
- Cú pháp: RETFIE
- Thực thi:
- Diễn giải:
+Trở lại vị trí nhảy ban đầu
từ chương trình con Ngắt.
chương trình dễ dàng hơn.
24
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
3.2 Chương trình điều khiển
a. Lưu đồ giải thuật
Lưu đồ tổng quát
Lưu đồ chi tiết
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
b. Cấu trúc một chương trình điều khiển
Lựa chọn loại Vi Điều Khiển: LIST
Định nghĩa các Ô nhớ, Thanh ghi: EQU
Khởi tạo chương trình chính: ORG
Soạn thảo chương trình điều khiển:
Kết thúc chương trình: END
25
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
3.3 Các Chỉ dẫn lệnh (Directive Language)
CONFIG
DB
Cấu hình các Bit chọn chế độ hoạt động của
PIC.
Lưu các giá trị 8 bit vào bộ nhớ chương trình.
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
DT
EQU
Đặt tên cho ô nhớ hay thanh ghi.
Tạo bảng dữ liệu đối với các lệnh RETLW