Hệ vi xử lí - Chương 3: Tập lệnh PIC16F8xx
- Biểu thức được cho là Đúng thì lặp, nếu Sai
thì kết thúc.
- Đúng khi giá trịkhác 0, Sai khi bằng 0.
- Vòng lặp này chứa tối đa 100 dòng lệnh.
- Sốlần lặp tối đa 255 lần.
64 trang |
Chia sẻ: tuanhd28 | Lượt xem: 2093 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Hệ vi xử lí - Chương 3: Tập lệnh PIC16F8xx, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
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.
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).
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.
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Bảng tóm tắt Tập lệnh
Các lệnh thao tác định hướng theo Byte
2. Tập lệnh
Cộng W với F
AND W với F
Xóa F
Xóa W
Đảo F
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
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Xoay phải F có C
Lấy F - W
Đổi 4bit Cao - 4bit Thấp
XOR (W và F)
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
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
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.
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.
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.
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.
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.
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.
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.
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.
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
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.
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.
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
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 = 0.
- Trạng thái ảnh hưởng:
- Diễn giải: Nếu F = 0 thì Nhảy: bỏ qua 1 lệnh
F = 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 = 1.
- Trạng thái ảnh hưởng:
- Diễn giải: Nếu F = 1 thì Nhảy: bỏ qua 1 lệnh
F = 0 thì làm lệnh kế tiếp.
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.
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) ↔ (F)
- 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
PCLATCH PC
- Diễn giải: Nhảy tới Nhãn (k).
Lệnh này mất 2 chu kỳ máy.
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.
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.
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.
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átLư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
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
3.3 Các Chỉ dẫn lệnh (Directive Language)
CONFIG
Cấu hình các Bit chọn chế độ hoạt động của
PIC.
DB
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
Tạo bảng dữ liệu đối với các lệnh RETLW
EQU
Đặt tên cho ô nhớ hay thanh ghi.
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
END
Kết thúc chương trình.
INCLUDE
Chọn thư viện của loại PIC sử dụng.
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
LIST
Liệt kê loại PIC sử dụng.
ORG
Chọn địa chỉ Bắt đầu chương trình.
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
PROCESSOR
Chọn loại PIC
IF ELSE ENDIF
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
WHILE ENDW
- Biểu thức được cho là Đúng thì lặp, nếu Sai
thì kết thúc.
- Đúng khi giá trị khác 0, Sai khi bằng 0.
- Vòng lặp này chứa tối đa 100 dòng lệnh.
- Số lần lặp tối đa 255 lần.
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Bảng tóm tắt các Chỉ dẫn lệnh
_ _BADRAM BANKISEL BANKSEL CBLOCK ENDC
CODE _ _CONFIG CONSTANT DA DATA
DB DE #DEFINE #UNDEFINE DT
DW END EQU ERROR ERRORLEVEL
EXITM EXPAND NOEXPAND EXTERN FILL
GLOBAL IDATA _ _IDLOCS #IF #ELSE
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
#ENDIF #IFDEF #IFNDEF LIST NOLIST
LOCAL MACRO ENDM _ _MAXRAM MESSG
ORG PAGE PAGESEL PROCESSOR RADIX
RES SET SPACE TITLE SUBTITLE
UDATA UDATA_ACS UDATA_OVR UDATA_SHR VARIABLE
WHILE ENDW INCLUDE
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
Bảng tóm tắt các kí hiệu và quy ước
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
List p=16F877A
#INCLUDE
__CONFIG
_CP_OFF & _PWRTE_ON
& _WDT_OFF & _HS_OSC &_LVP_OFF
BIEN1 EQU 0X20
BIEN2 EQU 0X21
Bài tập 1: Blink PortC CALL DELAY1
CALL DELAY1
MOVLW B'11111111'
MOVWF PORTC
CALL DELAY1
CALL DELAY1
GOTO LOOP
;=====================
DELAY1:
ORG 0X0000
GOTO MAIN
MAIN
;KHOI DONG PORTC
BANKSEL TRISC
CLRF TRISC
BANKSEL PORTC
LOOP
CLRF PORTC
CLRF BIEN1
L2
CLRF BIEN2
L1
DECFSZ BIEN2
GOTO L1
DECFSZ BIEN1
GOTO L2
RETURN
END
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
List p=16f877a
#INCLUDE
__CONFIG .
BIEN1 EQU 0X20
BIEN2 EQU 0X21
ORG 0X0000
GOTO MAIN
Bài tập 2: 1 Led Sáng đuổi CALL DELAY1
BTFSS PORTC,7
GOTO LEFT
RIGHT
RRF PORTC
CALL DELAY1
BTFSS PORTC,0
GOTO RIGHT
GOTO LEFT
;-----------DELAY
DELAY1MAIN
;KHOI TAO PORTC
BANKSEL TRISC
CLRF TRISC
BANKSEL PORTC
;=========================
CLRF PORTC
BSF STATUS,C
LEFT
RLF PORTC
CLRF BIEN1
L1
CLRF BIEN2
L2
DECFSZ BIEN2
GOTO L2
DECFSZ BIEN1
GOTO L1
RETURN
;--------------------------------------
END
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
• 0000
• 0001
• 0002
• 0003
Bài tập 3: Sử dụng BẢNG
- Xét vai trò của thanh ghi PC
MOVLW 0xFF
MOVWF BIEN1
LOOP DECFSC BIEN1
GOTO LOOP
• 0004 END
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
MOVLW
CALL
.
TABLE
retlw 01
- Sử dụng Bảng
0x04
TABLE
ADDWF PCL,1 (PCL=02H)
retlw 02
retlw 03
retlw 04
retlw 05
retlw 06
retlw 07
RETURN
(W=04)
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
List p=16f877a
#INCLUDE
;__CONFIG ..
CBLOCK 0X20
BIEN1
BIEN2
TAM
Bài tập 3: Sử dụng BẢNG CALL TABLE
MOVWF PORTC
CALL DELAY1
INCF TAM
MOVLW 0X0F
SUBWF TAM,W
BTFSC STATUS,Z
CLRF TAM
GOTO LOOP
TABLEENDC
ORG 0X0000
BANKSEL TRISC
CLRF TRISC
BANKSEL PORTC
CLRF PORTC
;---------------------------------
CLRF TAM
LOOP
MOVF TAM,W
ADDWF PCL,1
RETLW B'00000001'
RETLW B'00000011‘ (TAM=1)
RETLW B'00000111‘ (TAM=2)
RETLW B'00001111‘ (TAM=3
RETLW B'00011111'
RETLW B'00111111'
RETLW B'01111111'
RETLW B'11111111'
RETLW ..
END
CHƯƠNG 3: TẬP LỆNH PIC16F8xx
CBLOCK 0X20
COUNT1
COUNT2
TAM1;DE LUU & XUAT GIA TRI RA PORTC
TAM2;BIEN DAT SO LAN DICH LED
TAM3;BIEN KIEM SOAT SO LAN XOAY LED
TAM4 ;BIEN XOAY LED
Bài tập 4: Sử dụng BẢNG LOOP2 ;---GAN TAM3 = TAM2---
MOVF TAM2,0
MOVWFTAM3
;---GAN TAM4 = 0---
MOVLW 0X00
MOVWFTAM4
;---SET C---
BSF STATUS,C
LOOP1
RLF TAM4
MOVF TAM4,0 ;LUU TAM4 = WENDC
KHỞI TẠO PORTC
ORG 0X0000
MAIN
;---GAN TAM1 = 0---
MOVLW 0X00
MOVWF TAM1
;---GAN TAM2 = 8---
MOVLW 0X08
MOVWF TAM2
IORWF TAM1,0 ;OR LUU VAO W
MOVWF PORTC ;XUAT RA P_C
CALL DELAY
BCF STATUS,C
DECFSZ TAM3 ;GIAM SO LAN
XOAY LED
GOTO LOOP1
MOVF PORTC,0 ;LUU P_C = W
MOVWF TAM1 ;LUU W =TAM1
DECFSZ TAM2
GOTO LOOP2
Các file đính kèm theo tài liệu này:
- chuong_3_pic_tap_lenh_226.pdf