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
- F (Register File): các thanh ghi được chỉ định trong
lệnh. F có 7bit tương ứng 128 Byte (00h -> 7Fh).
3
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
c. Cấu trúc lệnh thao tác định hướng theo Bit
- OPCODE: mã địa chỉ của lệnh (mã lệnh).
- b (Bit address): vị trí Bit trong tập thanh ghi F.
3-bit b tương ứng 8 vị trí trong một Byte của tập F.
- F (Register File): thanh ghi được chỉ định trong tập F.
F có độ rộng 7bit nên gồm 128 Byte ( 00h -> 7Fh ).
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
d. Cấu trúc lệnh thao tác với giá trị HẰNG SỐ hoặc
NHÃN
+ k -8Bit: giá trị 8 bit
+ k -11Bit: giá trị 11 bit hoặc NHÃN khi dùng lệnh
GOTO , CALL
- OPCODE: địa chỉ của lệnh (mã lệnh).
- k (Literal field): có thể là Giá trị hay NHÃN.
4
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Bảng tóm tắt Tập lệnh
Cộng W với F
AND W với F
Xóa F
Xóa W
Đảo F
Các lệnh thao tác định hướng theo Byte
2. Tập lệnh
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Đảo 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
Thoát và đặt k vào W
6
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Thoát CT con
Đặt chế độ SLEEP
Lấy k - W
XOR (k và W)
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
2.1 Nhóm lệnh số học
Cộng với hằng số k
- Cú pháp: ADDLW k
- Phạm vi: 0 ≤ k ≤ 255
- Thực thi: (W) + k
(W)
- Trạng thái ảnh hưởng: C, DC, Z
- Diễn giải: Cộng nội dung W với hằng số k-8bit.
Kết quả lưu vào W.
7
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Cộng thanh ghi
- Cú pháp: ADDWF F,d
- Phạm vi: 0 ≤ F ≤ 127; d = 0,1
- Thực thi: (W) + (F)
(dest)
- Trạng thái ảnh hưởng: C, DC, Z
- Diễn giải: Cộng nội dung 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.
- 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
(dest)
- Trạng thái ảnh hưởng: Z
- Diễn giải: Tăng nội dung F lên 1 đơn vị.
Kết quả: lưu vào W nếu d=0
lưu vào F nếu d=1.
9
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Tăng thanh ghi và Nhảy
- Cú pháp: INCFSZ 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:
Tăng nội dung F lên 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
Giảm thanh ghi
- Cú pháp: DECF 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 một đơn vị.
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
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Phép OR với hằng số k
- Cú pháp: IORLW k
- Phạm vi: 0 ≤ k ≤ 255
- Thực thi: (W) OR k
(W)
- Trạng thái ảnh hưởng: Z
- Diễn giải: OR 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 OR thanh ghi
- Cú pháp: IORWF F,d
- Phạm vi: 0 ≤ F ≤ 127; d=0,1
- Thực thi: (W) OR (F)
(dest)
- Trạng thái ảnh hưởng: Z
- Diễn giải: OR 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.
12
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Phép AND với hằng số k
- Cú pháp: ANDLW k
- Phạm vi: 0 ≤ k ≤ 255
- Thực thi: (W) AND k
(W)
- Trạng thái ảnh hưởng: Z
- 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)
(dest)
- Trạng thái ảnh hưởng: Z
- Diễn giải: XOR 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.
14
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Xóa thanh ghi W
- Cú pháp: CLRW
- Phạm vi:
- Thực thi: 00h
(W)
- Trạng thái ảnh hưởng: Z = 1
- Diễn giải: Xóa nội dung thanh ghi W.
Kết quả: W = 00h
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Xóa thanh ghi F
- Cú pháp: CLRF
- Phạm vi:
- Thực thi: 00h
(F)
- Trạng thái ảnh hưởng: Z = 1
- Diễn giải: Xóa nội dung thanh ghi F.
Kết quả: F = 00h
15
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Xóa Watch Dog Timer
- Cú pháp: CLRWDT
- 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
- Diễn giải: Di chuyển k vào thanh ghi W.
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Di chuyển thanh ghi F
- Cú pháp: MOVF 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: Di chuyển nội dung thanh ghi F vào :
Kết quả: ghi vào W nếu d=0
ghi vào F nếu d=1.
17
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Di chuyển vào thanh ghi F
- Cú pháp: MOVWF F
- Phạm vi: 0 ≤ F ≤ 127
- Thực thi: (W)
(F)
- Trạng thái ảnh hưởng: Z
- Diễn giải: Di chuyển nội dung thanh ghi W vào F.
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
2.4 Nhóm lệnh xử lý BIT
Xóa Bit thanh ghi
- Cú pháp: BCF F,b
- Phạm vi: 0 ≤ F ≤ 127; 0 ≤ b ≤ 7
- Diễn giải: Xóa Bit thứ b trong thanh ghi F.
- Chú ý: Ta có thể ghi trực tiếp b = tên của Bit
trong thanh ghi F
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
Xoay phải có C
- Cú pháp: RRF F,d
- Phạm vi: 0 ≤ F ≤ 127
d=0,1
- Trạng thái ảnh hưởng: C
- Diễn giải: Xoay phả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.
20
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Hoán đổi 4 bit thấp - 4 bit cao
- Cú pháp: SWAPF F,d
- Phạm vi: 0 ≤ F ≤ 127; d = 0,1
- Thực thi: (F<7:4>) ↔ (F<3:0>)
- Trạng thái ảnh hưởng:
- Diễn giải: Đổi vị trí giữa 4 bit thấp và 4 bit cao.
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
2.5 Nhóm lệnh rẽ nhánh
Lệnh Nhảy
- Cú pháp: GOTO k
- Phạm vi: 0 ≤ k ≤ 2047 (11bit)
- Thực thi: k
PC<10:0>
PCLATCH<4:3>
PC<12:11>
- Diễn giải: Nhảy tới Nhãn (k).
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.
+Trả lại địa chỉ mã lệnh
cho PC từ ngăn xếp Stack.
+Set Bit GIE = 1
+Lệnh 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 và đặt k vào W
- Cú pháp: RETLW k
- Thực thi:
- Diễn giải:
+Trở lại vị trí nhảy ban đầu
từ chương trình con.
+Đưa giá trị k vào W
+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.
23
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Lệnh không làm gì cả
- Cú pháp: NOP
- Thực thi:
- Diễn giải: Không làm gì.
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
3. Các Chỉ dẫn lệnh và Trình biên dịch
3.1 Giới thiệu trình biên dich MPASM
Trình biên dịch MPASM là công cụ để biến đổi
ngôn ngữ Assembly thành ngôn ngữ máy.
Ngôn ngữ máy được nạp vào PIC để thực hiện các
yêu cầu của người viết chương trình.
MPASM bao gồm 58 chỉ dẫn lệnh (Directive
Language). Các chỉ dẫn lệnh giúp người viế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