Tải bản đầy đủ (.pdf) (13 trang)

Luận văn - NGHIÊN CỨU VI ĐIỀU KHIỂN PIC16F84 - Phần 2 doc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.59 MB, 13 trang )

Phần II: Lập trình hợp ngữ cho PIC16F84
19


Phần II: LẬP TRÌNH HP NGỮ CHO PIC16F84

II.1. Giới thiệu:
Khả năng giao tiếp là một điều rất quan trọng trong mọi lónh vực. Tuy nhiên,
điều đó chỉ có thể thực hiện được khi hai bên giao tiếp biết cùng một ngôn ngữ. Với
quy tắc trên thì con người và vi điều khiển cũng có thể giao tiếp với nhau. Ngôn ngữ
mà vi điều khiển và con người dùng để giao tiếp gọi là hợp ngữ. Tên “ Hợp Ngữ “
không có ý nghóa gì sâu xa, nó tương tự như tên các ngôn ngữ khác như “ Tiếng Anh
“ hay “ Tiếng Pháp “. Nói chính xác hơn thì hợp ngữ chỉ là giải pháp trung gian, bởi
vì chương trình viết bằng hợp ngữ phải được dòch sang mã nhò phân để mà vi điều
khiển có thể hiểu được. Hợp ngữ và trình biên dòch hợp ngữ là hai khái niệm khác
nhau. Hợp ngữ là ngôn ngữ dùng để viết chương trình cho vi điều khiển, còn trình
biên dòch hợp ngữ là chương trình trên máy tính cá nhân mà nó dòch chương trình
viết bằng hợp ngữ sang mã nhò phân, chương trình mà đã được dòch sang mã nhò
phân thì được gọi là ngôn ngữ máy.
II.1.1. Biểu diễn số trong trình biên dòch
Trong hợp ngữ MPLAB, các số có thể biểu diễn dưới dạng thập phân, thập lục
phân, hoặc nhò phân Chúng ta sẽ minh hoạ điều này với số 240:
.240 ;Decimal
0xF0 ;Thập lục phân
B’11110000’ ;nhò phân
Số thập phân được bắt đầu bằng một dấu chấm, số thập lục phân được bắt đầu
bằng 0x, và số nhò phân bắt đầu bằng chữ b với dấu nháy đơn.
II.1.2. Các yếu tố của hợp ngữ:
Các yếu tố của hợp ngữ gồm có:
 Nhãn
 Lệnh


 Toán tử
 Các chỉ dẫn
 -Lời chú thích
 Nhãn:
Nhãn biểu thò đòa chỉ của lệnh theo sau. Khi có sự rẽ nhánh đến lệnh này, nhãn
được dùng trong trường toán hạng của lệnh rẽ nhánh hoặc nhảy.
 Mã gợi nhớ lệnh:
Phần II: Lập trình hợp ngữ cho PIC16F84
20

Mã gợi nhớ lệnh hoặc chỉ dẫn của trình hợp ngữ theo sau trường nhãn. Cách
thức mà chúng ta viết lệnh được gọi là cú pháp. Trong ví dụ sau, chúng ta có thể
nhận ra lỗi trong khi viết bởi vì lệnh movlp và gotto không tồn tại trong vi xử lý
PIC16F84.
Lệnh viết đúng:
Movlw H’01FF’
Goto Start
Lệnh viết sai:
Movlp H’01FF’
Gotto Start
 Toán hạng:
Toán hạng theo sau mã gợi nhớ. Toán hạng chứa đòa chỉ hoặc dữ liệu mà lệnh
sẽ sử dụng. Nói cách khác, toán hạng là nhân tố cho lệnh đang thực thi. Chúng
thường là các thanh ghi, biến hoặc hằng.
 Lời chú thích:
Lời chú thích là một chuỗi ký tự mà người lập trình viết để làm cho chương
trình rõ ràng. Nó được đặt sau lệnh và được bắt đầu bằng dấu chấm phẩy(;).
 Chỉ dẫn:
Lời chỉ dẫn thì tương tự như một lệnh, nhưng nó không giống như một lệnh mà
nó phụ thuộc vào kiểu vi điều khiển, và nó biểu diễn đặc tính của hợp ngữ. Lời chỉ

dẫn luôn luôn được cho ý nghóa thông qua biến và thanh ghi. Ví dụ như LEVEL có
thể là sự chỉ đònh cho biến trong RAM ở tại đòa chỉ 0Dh. Bằng cách này, biến ở tại
đòa chỉ đó có thể được truy xuất thông qua lời chỉ dẫn LEVEL. Điều này sẽ dễ hơn
cho người lập trình khi phải nhớ đòa chỉ 0Dh chứa đựng thông tin LEVEL.
II.2. Tập lệnh của PIC:
Tập lệnh của PIC được xây dựng trên cơ sở ngôn ngữ Assemble. Tuy nhiên để
người dùng dễ dàng tiếp cận và giúp cho quá trình lập trình trở nên đơn giản hơn,
tập lệch của PIC được tối thiểu hoá còn 35 lệnh. Nhưng không vì ít lệch hơn tập
lệnh của các họ vi điều khiển khác mà khả năng ứng dụng của PIC bò hạn chế. Theo
như nhà sản xuất Microchip

thì tập lệnh của PIC có thể đáp ứng được tất cả các
ứng dụng mà các họ vi điều khiển khác có thể làm được. Và thựcï tế cho thấy trong
quá trình lập trình cho PIC bạn sẽ thấy việc lập trình sẽ rất dễ dàng hơn các họ vi
điều khiển khác và chưa thấy một hạn chế về giải thuật nào gây ra từ tập lệnh. Bên
cạnh đó, với sự hỗ trợ của lập trình dưới dạng Macro, việc lập trình trở nên nhẹ
nhàng hơn và khả năng mở rộng ứng dụng là rất lớn.
Sau đây sẽ liệt kê các lệnh của họ PIC
 Movlw
Dạng lệnh: Movlw K
Hoạt động:
Phần II: Lập trình hợp ngữ cho PIC16F84
21

Ghi hằng số K vào thanh ghi W
Giá trò của K từ 0 đến 255
Không tác động lên cờ
Số chu kỳ:1
Số byte: 2
 Movwf

Dạng lệnh: Movwf f
Hoạt động:
Nội dung của thanh ghi W được chép sang thanh ghi F
Giá trò của f từ 0 đến 127
Không tác động lên cờ
Số chu kỳ:1
Số byte: 2
 Movf
Dạng lệnh: Movf f, d
Hoạt động:
Nội dung của thanh ghi f được lưu trữ vào thanh ghi d
Tác động lên cờ :Z
Số chu kỳ:1
Số byte: 2
 Clrw
Dạng lệnh: Clrw
Hoạt động:
Xoá thanh ghi W
Tác động lên cờ :Z
Số chu kỳ: 1
Số byte: 2
 Clrf
Dạng lệnh: Clrf f
Hoạt động:
Xoá thanh ghi f
Thanh ghi f có giá trò từ 0 đến 127
Tác động lên cờ :Z
Số chu kỳ:1
Số byte: 2
 Swapf

Dạng lệnh: Swapf f, d
Hoạt động:
Nibbles thấp và nibbles cao của thanh ghi f được hoán đổi vò trí cho nhau.
Phần II: Lập trình hợp ngữ cho PIC16F84
22

Nếu d = 0 kết quả được lưu vào thanh ghi W
Nếu d = 1 kết quả được lưu vào thanh ghi F
Không tác động lên cờ
Số chu kỳ:1
Số byte: 2

 Addlw
Dạng lệnh: Addlw K
Hoạt động:
Nội dung của thanh ghi W được cộng với hằng số tám bit K, kết quả lưu vào
thanh ghi W
Tác động lên cờ:C,DC,Z
Số chu kỳ:1
Số byte: 2
 Addwf
Dạng lệnh: Addwf f,d
Hoạt động:
(W) + (f) => d
Nếu d = 0 kết quả được lưu vào thanh ghi W
Nếu d = 1 kết quả được lưu vào thanh ghi F
Giá trò của thanh ghi F từ 0 đến 127
Tác động lên cờ: C,DC,Z
Số chu kỳ:1
Số byte: 2

 Sublw
Dạng lệnh: Sublw K
Hoạt động:
K-(W) => W
Hằng số K có giá trò tứ 0 đến 255
Tác động lên cờ:C,DC,Z
Số chu kỳ:1
Số byte: 2
 Subwf
Dạng lệnh: Subwf f,d
Hoạt động:
(F) –(w) => d
Nếu d = 0 kết quả được lưu vào thanh ghi W
Nếu d = 1 kết quả được lưu vào thanh ghi F
Giá trò của thanh ghi F từ 0 đến 127
Tác động lên cờ:C,DC,Z
Phần II: Lập trình hợp ngữ cho PIC16F84
23

Số chu kỳ:1
Số byte: 2
 Andlw
Dạng lệnh: Andlw K
Hoạt động:
(W) and k => W
Hằng số K có giá trò tứ 0 đến 255
Tác động lên cờ :Z
Số chu kỳ:1
Số byte: 2
 Andwf

Dạng lệnh: Andwf f,d
Hoạt động:
(W) and F => d

Nếu d = 0 kết quả được lưu vào thanh ghi W
Nếu d = 1 kết quả được lưu vào thanh ghi F
Giá trò của thanh ghi F từ 0 đến 127
Tác động lên cờ :Z
Số chu kỳ:1
Số byte: 2
 Iorlw
Dạng lệnh: IORLW
Hoạt động:
Hằng số K có giá trò tứ 0 đến 255
Hoạt động của lệnh:(W) OR (K) => W
Hằng số K có giá trò tứ 0 đến 255
Tác động lên cờ :Z
Số chu kỳ:1
Số byte: 2
 IORWF
Dạng lệnh: IORWF f,d
Hoạt động:
(W) OR (F) => d
Nếu d = 0 kết quả được lưu vào thanh ghi W
Nếu d = 1 kết quả được lưu vào thanh ghi F
Giá trò của thanh ghi F từ 0 đến 127
Tác động lên cờ :Z
Số chu kỳ:1
Số byte: 2
Phần II: Lập trình hợp ngữ cho PIC16F84

24

 XORLW
Dạng lệnh: XORLW K
Hoạt động:
Hằng số K có giá trò tứ 0 đến 255
Hoạt động của lệnh:(W) XOR (K) => W
Hằng số K có giá trò tứ 0 đến 255
Tác động lên cờ :Z
Số chu kỳ:1
Số byte: 2
 XORWF

Dạng lệnh: XORWF f,d
Hoạt động:
(W) XOR (F) => d
Nếu d = 0 kết quả được lưu vào thanh ghi W
Nếu d = 1 kết quả được lưu vào thanh ghi F
Giá trò của thanh ghi F từ 0 đến 127
Tác động lên cờ :Z
Số chu kỳ:1
Số byte: 2

 INCF
Dạng lệnh: INCF f,d
Hoạt động:
(F) + 1 => d
Nếu d = 0 kết quả được lưu vào thanh ghi W
Nếu d = 1 kết quả được lưu vào thanh ghi F
Giá trò của thanh ghi F từ 0 đến 127

Tác động lên cờ :Z
Số chu kỳ:1
Số byte: 2
 DECF
Dạng lệnh: DECF f,d
Hoạt động:
(F) - 1 => d
Nếu d = 0 kết quả được lưu vào thanh ghi W
Nếu d = 1 kết quả được lưu vào thanh ghi F
Giá trò của thanh ghi F từ 0 đến 127
Tác động lên cờ :Z
Số chu kỳ:1
Phần II: Lập trình hợp ngữ cho PIC16F84
25

Số byte: 2
 RLF
Dạng lệnh: RLF f,d
Hoạt động:
Dich thanh ghi F sang trai 1 bit thông qua cờ c.
Nếu d = 0 kết quả được lưu vào thanh ghi W
Nếu d = 1 kết quả được lưu vào thanh ghi F
Giá trò của thanh ghi F từ 0 đến 127
Tác động lên cờ :C
Số chu kỳ:1
Số byte: 2
 RRF
Dạng lệnh: RRF f,d
Hoạt động:
Dich thanh ghi F sang phải 1 bit thông qua cờ C.

Nếu d = 0 kết quả được lưu vào thanh ghi W
Nếu d = 1 kết quả được lưu vào thanh ghi F
Giá trò của thanh ghi F từ 0 đến 127
Tác động lên cờ :C
Số chu kỳ:1
Số byte: 2
 COMF
Dạng lệnh: COMF f,d
Hoạt động:
Lấy bù nội dung của thanh ghi F.
Nếu d = 0 kết quả được lưu vào thanh ghi W
Nếu d = 1 kết quả được lưu vào thanh ghi F
Giá trò của thanh ghi F từ 0 đến 127
Tác động lên cờ :C
Số chu kỳ:1
Số byte: 2
 BCF
Dạng lệnh: BCF f,b
Hoạt động:
Xoá bit b của thanh ghi f về 0.
Giá trò của thanh ghi f từ 0 đến 127
Giá trò của b từ 0 đến 7
Không tác động lên cờ
Số chu kỳ:1
Số byte: 2
Phần II: Lập trình hợp ngữ cho PIC16F84
26

 BSF
Dạng lệnh: BCF f,b

Hoạt động:
Set bit b của thanh ghi f lên 1.
Giá trò của thanh ghi f từ 0 đến 127
Giá trò của b từ 0 đến 7
Không tác động lên cờ
Số chu kỳ:1
Số byte: 2
 BTFSC
Dạng lệnh: BTFSC f,b
Hoạt động:
- Nếu bit b trong thanh ghi f bằng 0,con trỏ chương trình sẽ nhảy đến lệnh kế
tiếp.
 INCFSZ
Dạng lệnh: INCFSZ f,d
Hoạt động:
Nếu d = 0 kết quả được lưu vào thanh ghi w
Nếu d = 1 kết quả được lưu vào thanh ghi f
Hoạt động của lệnh:(f) + 1 => d
Giá trò của thanh ghi f từ 0 đến 127
 GOTO
Dạng lệnh: GOTO K
Hoạt động:
Nhảy vô điều kiện đến đòa chỉ K.
Giá trò của K từ 0 đến 2048
Không tác động lên cờ
Số chu kỳ:1
Số byte: 4
 CALL
Dạng lệnh: CALL K
Hoạt động:

Gọi chương trình con
Giá trò của K từ 0 đến 2048
Không tác động lên cờ
Số chu kỳ:1
Số byte: 4
 RETURN
Dạng lệnh: RETURN
Phần II: Lập trình hợp ngữ cho PIC16F84
27

Hoạt động:
Lấy nội dung từ đỉnh của ngăn xếp lưu vào bộ đếm chương trình.
Không tác động lên cờ
Số chu kỳ:1
Số byte: 4
 RETLW
Dạng lệnh: RETLW K
Hoạt động:
(K) =>w ; TOS => PC
Giá trò của thanh ghi F từ 0 đến 255
Không tác động lên cờ
Số chu kỳ:1
Số byte: 4
 RETFIE
Dạng lệnh: RETFIE
Hoạt động:
TOS =>PC;1=>GIE
Không tác động lên cờ
Số chu kỳ:1
Số byte: 4

 NOP
Dạng lệnh: NOP
Hoạt động:
Không làm gì cả.
Không tác động lên cờ
Số chu kỳ:1
Số byte: 4
 CLRW DT
Dạng lệnh: CLRWDT
Hoạt động:
0=> WDT
0=>WDT prescaler
1=> TO
1=>PD
Tác động lên cờ:TO,PD
Số chu kỳ:1
Số byte: 2
 SLEEP
Dạng lệnh: SLEEP
Phần II: Lập trình hợp ngữ cho PIC16F84
28

Hoạt động:
Chế độ dừng.
Phần IV: ứng dụng
29

Phần III: PHƯƠNG PHÁP NẠP CHIP

III.1. Giới thiệu phần mềm MPLAB

MBLAP

là phần mềm được nhà sản xuất_Microchip cung cấp giúp người
dùng lập trình cho PIC bằng ngôn ngữ Assemble của nó. Phần mềm hỗ trợ đầy đủ
các modul tiện ích giúp cho việc lập trình và nạp vào chip. Các modul của phần
mềm gồm:

 Project: hỗ trợ công cụ quản lý 1 Project. Gồm các phần:
 Quản lý project
 Workspace: hỗ trợ soạn thảo lệnh
 Build: Dòch tập tin.Asm sang mã máy.Hex
 Debugger: Mô phỏng và sửa lỗi
 Programmer: hỗ trợ phần mềm nạp chip với các mạch nạp chuẩn:
 PICSTART Plus
 MPLAB MP3
 MPLAB ICD2
 PRO MATE 2
III.2. Phần mềm nạp chip IC – PROG:
Trong các ứng dụng này, phần mềm được dùng để nạp cho chip PIC16F84 là
phần mềm IC-Prog.

Đây là phần mềm hỗ trợ nạp chip vi điều khiển khá nhỏ gọn nhưng rất hiệu
quả. Icprog không chỉ hỗ trợ nạp tất cả các chip vi điều khiển thuộc dòng PIC mà
còn hỗ trợ các họ khác như: 59Cxx, 24Cxx, 93Cxx, BR, CXK… Mỗi loại vi điều
khiển đều được phần mềm hổ trợ mạch nạp mà chúng ta có thể tham khảo tại trang
web: http\\www.Icprog.Com
Một đặc điểm rất hay và tiện lợi của chương trình là nó có khả năng dòch
ngược tập tin mã máy.Hex về dạng mã gợi nhớ .Asm khá chính xác. Điều đó giúp
cho người lập trình có thể kiểm tra và sửa lỗi ngay khi nạp hay dùng lại mã lệnh đã
được lưu trên chip dó nhiên với điều kiện là mã nguồn mở (CP off_code protection)

Phần IV: ứng dụng
30


Hình III-1: Chương trình nạp chip ICProg

Trong các ứng dụng ở đây, mạch hỗ trợ được dùng là mạch JDM.
III.3. Mach nạp JDM
JDM được thiết kế theo phương pháp chuẩn nạp cho PIC16F84 (PIC16F84A)
và PIC16C84 được nhà sản xuất Mircochip hướng dẫn. Mạch nạp khá đơn giản được
trình bày trong hình sau:

Phần IV: ứng dụng
31

Mạch trên được thiết kế theo chuẩn COM 25 chân. Chúng ta có thể chuyển đổi
tương đương các chân tương ứng sang chuẩn COM 9 chân theo bảng sau:
Bảng III-1: Chuyển đổi tương ứng Com25 và Com9
Chân (25
chân)
Chân (9 chân) Tên gọi
Chức năng
2 3 Txd Truyền dữ liệu
4 7 RTS
Yêu cầu gởi. Bộ truyền đạt
được này lên cao khi sẵn sàng
truyền dữ liệu.
5 8 CTS
Xoá để gởi. Bộ gởi đặt đường
này lên mức cao để thông báo

cho bộ truyền là nó sẵn sàng
nhận dữ liệu.
7 5 SG Đất của tín hiệu
20 4 DTR
Đầu cuối dữ liệu sẵn sàng. Hoạt
động giống như RTS nhưng
được kích hoạt bởi bộ nhận khi
muốn truyền dữ liệu.
Dựa trên mạch nguyên lý JDM do Icpro cung cấp chúng em đã tự làm mạch
nạp cho PIC16F84. Sơ đồ mạch in được giới thiệu trong hình sau:

×