Các bước tạo ra file.hex

Một phần của tài liệu ngôn ngữ lập trình mplab c18 (Trang 40 - 70)

1. Sử dụng MPLAB

1.2. Các bước tạo ra file.hex

Dưới đây ta đi từng bước cách từ đầu tới cuối cách tạo file.hex ( là file nạp vào VĐK để chạy)

B1: chọn thiết bị

Đây là bước chọn thiết bị mà ta tiến hành lập trình cho nó. Chon thiết bị có thể tiến hành sau và trước khi dịch chương trình. Nhưng theo khuyến cáo thì nên thực hiện bước này trước khi bắt đầu 1 project. ta có thể tiến hành lựa chọn lại thiết bị như sau: Configure/ select Device.

B2: Tạo project:

• B2.1: Mở môi trường phát triển tích hợp MPLAB: star t/all prog ram /Mi cr ochip/ MPLA B ID E v8 .70/ MPLA B ID E

• B2.2: tạo 1 file: file/New hoặc ấn ctrl+N

Hình 2.4

Đây là cửa sổ ta viết code lập trình. File sẽ được dùng để add vào project khi bạn tiến hành làm 1project (bước 3)

Sau khi viết xong code tiến hành lưu lại file/save as hoặc ấn ctrl+s.

Chọn thư mục bạn muốn lưu file. Lưu ý tên file bạn phải có phần mở rộng .* sau tên. Ví dụ: file của bạn tên là ‘sample’ thì khi l ưu bạn phải chỉ rõ là .c, .h hoặc .asm…

• B2.3: tạo project: project/project wizard

ấn ‘next’ tới cửa sổ lựa chọn thiết bị. ở đây ta cần phải lựa chọn thiết bị mà mình muốn phát triển. Như hình dưới:

Tới đây, câu hỏi đặt ra là, nếu tôi muốn thay đổi thiết bị phát triển trong project thì phải làm project lại từ đầu. Công việc đó thật mất công và thiếu tính chuyên nghiệp, ta có thể tiến hành lựa chọn lại thiết bị như sau: Configure/ select Device. Ta được:

Sau đó tiến hành lựa chọn thiết bị trong phần Device mà tôi khoanh tròn.

Ở phần này ta cũng có thể thấy rằng MPLAB sẽ báo cho ta biết rằng thiết bị mà ta chọn được hỗ trợ tới đâu. Biểu tượng màu xanh tức là có hỗ trợ và ngược lại màu đỏ là không hỗ trợ. Ví dụ với pic18f4550 hộ trợ hầu hết các chương trình nạp chỉ có PICkit1 là không…

Tiếp theo bạn ấn ‘next’. Ta được cửa sổ lựa chọn ngôn ngữ lập trình:

Lựa chọn ngôn ngữ lập trình trong phần ‘Active Toolsuite’. Nếu ta sử dụng C18 thì lựa chọn như trên, hoặc ta có thể lựa chọn loại ngôn ngữ khác. Trong phần ‘Toolsuite Contents’ ta có thể kích chuột vào từng phần và xem vị trí cài đặt các phần đó ở dưới ‘Location’ xem có giống thư mục ta đã cài không. Nếu không giống ta có thể chọn lại bằng ấn ‘Browse…’. Nhưng theo tôi điều này là không cần thiết cho lắm. vì thường là phần mềm sẽ tự cập nhật thư mục đã cài đặt chương trình Sau này, sau khi tạo xong project ta cũng có thể kiểm tra và sửa lại đường dẫn của chúng bằng cách: project/set language Tool locations…

Tiếp theo ấn ‘next’ ta sẽ được cửa sổ chọn thư mục lưu project và nhập tên project của ta vào:

Chọn thư mục lưu project b ằng ‘Browse…’ > nhập tên file, ấn Save. sau đó ấn next:

ở đây ta có thể Add file đã tạo ra ở bước 1 hoặc ta cũng có thể Add sau khi đã tạo xong project. Nếu Add file ở đây, ta tiến hành chọn file ở phần tree_box bên trái, chọn vào file cần add sau đó ấn Add, hoặc ta cũng có thể xóa bỏ file đã add xong bằng cách chọn vào file bên phải rồi ấn Remove.

1file ta chú ý cần phải add đó là file .lkr. file này có tác d ụng báo cho trình dịch biết tổ chức bộ nhớ của loại vi điều khiển ta sử dụng. Với mỗi thiết bị có 1 file .lkr tương ứng. Ta chọn file trong phần thư mục: C:\ProgramFiles\Microchip\mplabc18\v3.38\bin\LKR

Sau đó ấn next ta được cửa sổ hoàn thành tạo project:

ấn ‘finish’ để hoàn thành tạo project. Chúng ta vừa hoàn thành xong cách tạo 1 project. Ok, từ giờ có thể thoải mái làm các điều mà mình muốn. Thoải mái thể hiện khả năng lập trình của mình nhé!!!

Test code bằng simulator

Chương trình của chúng ta bị lỗi, hoặc ta muốn kiểm soát từng phần chương trình… Ta có thể sử dụng công cụ debug để giải quyết vấn đề này.

MPLAB có thể tích hợp cả Debugger trong nó. Tiến hành debugger có thể thực hiện trên phần cứng hoặc phần mềm. Mình thường sử dụng debug bằng phần mềm vì lí do túi tiền..hjhj

Để tiến hành chọn công cụ debugger: debugger/select Tool. Ta sẽ có 1 loạt các công cụ lựa chọn cho debugger tương ứng với loại mà ta có. Ví dụ ta có mạch debugger pickit3 thì sau khi cắm mạch picket3 vào máy tính ta chọn công cụ debug là pickit3(debugger/select Tool/ picket3), MPLAB sẽ tự kết nối với phần cứng và ta có thể thực hiện debug…Nếu ta không có mạch phần cứng sử dụng cho debugger thì ta chọn debug bằng phần mềm bằng cách chọn debugger/select Tool

/MPLAB SIM.

Tiến hành debug bằng phần mềm tương tự như với debug ở các trình dịch khác với các thao tác như là set breakpoint, step over, step in, step out….Sau khi chọn debugger/select Tool /MPLAB SIM ta được cửa sổ (hình 2.12):

Ta có thanh công cụ giành cho debug với các chức năng sau (hình 2.13):

Để chạy từng dòng lệnh ta ấn step into (F7)

Để quan sát được các giá trị thanh ghi và các biến có trong chương trình ra dùng cửa sổ watch: View/Watch (hình 2.14). Cách sử dụng cửa sổ này tôi trình bày trong phần các cửa sổ mở rộng bên dưới.

Mong muốn của ta trong khi debug chương trình là kiểm tra từng đoạn chương trình. Để thực hiện điều này ta dùng các Breakpoint. Khi ta ấn ‘Run’ thì ch ương trình chạy tới dòng có breakpoint sẽ dừng lại. Để set các Breakpoint ta click chuột phải vào dòng lệnh đó rồi chọn

set breakpoint (hình 2.15) hoặc double-click vào dòng đó

Hình 2.13

Vấn đề gặp phải tiếp theo là khi ta chạy từng dòng lệnh bằng ‘step into’ mà trong chương trình có vòng lặp delay ( thực hiện chức năng delay) thì ta sẽ phải ấn rất nhiều lần cho tới khi kết thúc vòng lặp đó. Điều đó thực sự là bất tiện và thủ công. Vậy ta để ý thấy có công cụ ‘step out’ sẽ giải quyết vấn đề này. Khi ta ở trong vòng lặp delay thì ta ấn ‘step out’ sẽ thoát khỏi vòng lặp này.

Mở rộng:

MPLAB là môi trường phát triển tích hợp. Chính vì thế ta cũng có thể phát triển các ứng dụng bằng các trình dịch khác trên nền của môi trường này. Công việc phát triển bằng ngôn ngữ khác chỉ khác so với phần tạo project ở trên trong phần lựa chọn ngôn ngữ lập

trình đã trình bày.

Ta có thể lựa chọn ngôn ngữ lập trình khác. Như ví dụ trên tôi phát triển bằng CCS. Bạn cũng có thể tiến hành bằng trình dịch khác mà bạn quen thuôc.

ð Lưu ý: Tất nhiên rằng trình dịch mà bạn muốn phát triển trong môi trường MPLAB đã phải được cài đặt trên máy của bạn rồi

1.3. Cửa sổ tiện ích sử dụng trong MPLAB

Môi trường lập trình tích hợp MPLAB cung cấp cho chúng ta nhiều window để kiểm soát việc thực hiện chương trình, quan sát quá trình

thực hiện chương trình và nhất là khi thực hiện debug ta có thể dùng các window này đ ể quan sát giá trị các biến, các thanh ghi.

Cửa sổ disassembly listing

Cửa sổ hardware stack

2. Ví dụ lập trình Pic18 bằng C18

Phần này mình sẽ trình bày các ví dụ đơn giản sử dụng C18 trên môi trường MPLAB để thực hiện các chương trình cơ bản sử dụng các module trong vi điều khiển Pic18. Mục đích giúp hiểu về cách làm việc trên MPLAB, sử dụng C18 và điều khiển các module trong Pic18 mà Microchip đã tích hợp sẵn.

Tôi giả sử rằng bạn đã có kiến thức cơ bản về phần cứng vì thế để không dài dòng mất thời gian và sai mục đích của tài liệu này tôi sẽ không nói tới phần cứng.

Nếu chưa có kiến thức về phần cứng VĐK Pic18 thì bạn download tại đây.

Tip: Để xem chương trình có thực hiện đúng như mình mong muốn hay không tôi sử dụng mô phỏng bằng Proteus. Chương trình này là chương trình dùng mô phỏng thiết kế mạch phổ biến và không khó sử dụng. Bạn tiến hành download về vài cài đặt trong máy. Nếu có phần cứng thực thì càng tốt, những theo tôi là không cần thiết lắm.

2.1. I/O cơ bản và delay 2.1.1. I/O

Đây là ch ức năng cơ bản nhất của các loại vi điều khiển.

Để sử dụng các kí hiệu gợi nhớ cổng ta phải khai báo: #include<p18fxxx.h> (trong đó xxx là tên lo ại vi điều khiển ta sử dụng. ví dụ nếu ta sử dụng loại vi điều khiển p18f4550 thì khai báo #include<p18f4550.h>). Hoặc có thể khai báo cách khác như sau:

defined(__18F4550) #include <p18f4550.h>

• Thiết lập pin là ‘in’ hay ‘out’: vi điều khiển VĐK Pic giống như tất cả các loại VĐK khác. pin nào được cấu hình ‘0’ thì đó là pin ‘out’. Ngược lại pin nào được cấu hình ‘1’ thì đó là pin ‘in’.

Loại port Kí hiệu tương ứng

PortA TRISA

PortB TRISB

PortC TRISC

Ví dụ: ta cấu hình in/out cho PortA TRISA=0; //A là cổng out

TRISA=0xf0 (hoặc TRISA=0b11110000) //pinA0,..,A3 là out, pinA4,..,A7 là in

Tương tự thiết lập cấu hình in/out với các Port khác • Xuất dữ liệu trên các Port

Để xuất dữ liệu trên các cổng ta phải cấu hình cổng đó là out và gán các giá trị tới các kí hiệu cổng tương ứng:

Loại port Kí hiệu tương ứng

PortA PORTA

PortB PORTB

PortC PORTC

• Đọc dữ liệu trên các cổng

Để đọc dữ liệu trên các cổng thì tương ứng cổng đó ta phải cấu hình là cổng vào và đọc giá trị tương ứng với kí hiệu cổng

Ví dụ cụ thể về xuất nhập dữ liệu trên các cổng tôi không làm trực tiếp ở đây. Để tường minh hơn tôi sẽ được trình bày chi tiết ở phần ví dụ phía dưới.

2.1.2. Delay

Trong C18 hỗ trợ các hàm sẵn các hàm delay. Để sử dụng các hàm này ta phải khai báo #include<delays.h>

• Hàm Delay1TCY() = Nop() : hàm này delay 1 chu kì dao động

thạch anh. Tùy theo thạch anh tần số bao nhiêu mà delay bấy nhiêu. Ví dụ ta sử dụng thạch anh tần số f=4Mhz thì hàm này sẽ delay 1/(4.10^6)=0.25s

• Hàm Delay10TCY() : hàm này delay 10 chu kì dao động thạch

anh

• Hàm Delay10TCYx(unsigned char): hàm này delay bội số của 10

chu kì dao động thạch anh

Ví dụ: Delay10TCYx(5) : delay 5*10*(1/f) = 10/f (giây)

unsigned char: nằm trong khoảng [0,255]

Delay100TCYx(unsigned char): hàm này delay bội số của 100

chu kì dao động thạch anh

unsigned char : nằm trong dải [0,255]

Delay1KTCYx(unsigned char): hàm này delay bội số của 1000

chu kì dao động thạch anh

unsigned char : nằm trong dải [0,255]

Delay10KTCYx(unsigned char): hàm này delay bội số của

10.000 chu kì dao động thạch anh

unsigned char : nằm trong dải [0,255]

Tất cả các hàm delay đều trả về giá trị Void

Đây là phần đầu tiên vì thế tôi sẽ trình này chi tiết cách tạo project, add file, dịch chương trình và nạp chương trình mô phỏng trên proteus. Từ phần sau các bước tiến hành tương tự.

2.1.3. Ví dụ

• Bạn tạo file mới, sau đó nhập đoạn mã sau vào #include<p18f4550.h>

#include<delays.h> void main()

{

TRISB=0x00; //cau hinh PortB là cong out

PORTB=0x88; //xuat dư lieu PortB

while(1) {

PORTB=0X00; //xuat gia tri ra ngoai

Delay100TCYx(250); //delay 0.25ms PORTB=0X01;

Delay100TCYx(250); PORTB=0X02;

Delay100TCYx(250); //delay 0.25ms PORTB=0X03;

Delay100TCYx(250); }

}

Rồi tiến hành lưu vào thư mục mà bạn muốn trên máy tính của mình với tên io.c

• Tạo project như tôi đã trình bày ở trên với tên tùy ý. ở đây tôi lấy tên là io

Trong phần add file bạn phải add file io.c vừa mới tạo ở trên và file

• Sau đó tiến hành dịch chương trình. Ta được file io.hex. • Nạp file này vào trình mô phỏng protues

Double-click vào vi điều khiển trên proteus. Xuất hiện cửa sổ để nạp file io.hex

Sau đó click vào ph ần tôi khoanh trong để dẫn tới thư mục bạn lưu project vì ở đó MPLAB đã dịch ra file io.hex và lưu ở đó.

Sau khi nạp file xong bạn ấn nút mô phỏng như bình thường.

Ví dụ rất đơn giản có nhiệm vụ cấu hình PortB và xuất dữ liệu, delay sau 1 khoảng thời gian, xuất dữ liệu…

Các bạn có thể download chương trình full ở đây:

2.2. RESET

2.2.1. Cơ bản về RESET trong PIC18

PIC18fxxx có các loại RESET sau: Reset Power-on (POR)

Mạch reset bật nguồn như hình dưới:

Xung bật nguồn được chip tạo ra bất cứ khi nào VD D tăng vượt mức ngưỡng. Điều này sẽ cho phép chip bắt đầu chế độ khởi tạo khi VD D đáp ứng các yêu cầu để hoạt động ( nghĩa là đảm bảo các tham số về điện áp, tần số, nhiệt độ…), nếu điều kiện ko đảm bảo hoạt động thì reset này sẽ giữ cho tới khi các tham số của điều kiện hoạt động được đảm bảo.

Khi có ngắt này xảy ra thì bit POR được set thành ‘0’ và nó s ẽ ko bị thay đổi vì các ngắt phần cứng khác, chính vì thế để thoát khỏi ngắt này thì user phải reset bằng phần mềm đi kèm với ngắt này

Reset MCLR trong khi hoạt động bình thường

- Mạch này chỉcần khi nguồn thấp. diode giúp tụxảnhanh khi nguồn xuống thấp

- R<40kΩ để đảm bảo áp rơi trên R ko ảnh hưởng tới áp và dòng vào của chip

Vi điều khiển có chân reset MCLR, nếu ra muốn reset loại này thì phải giữ chân này ở mức low. ( Để đảm bảo chống nhiễu, tức là không reset khi có xung mức low mà ko phải do người dùng tạo ra Microchip tích hợp sẵn module chống nhiễu cho chân này)

Ta cũng có thể disable ngắt này bằng cách set bit MCLRE=0 , khi chân này bị disable nó sẽ trở thành đầu vào số

Reset MCLR trong chế độ quản lí nguồn Reset Watchdog timer (WDT)

Reset programmable Brown-out (BOR)

PIC18 cung cấp 1 mạch BOR giúp chúng ta có thể tiết kiệm nguồn. BOR được điều khiển bằng BORV1:BORV0 và BOREN1:BOREN0. Ta cấu hình cho BOR theo bảng sau:

Cấu hình BOR Trạng thái của SBOREN (RCON<6>) Hoạt động BOR BOREN1 BOREN0 0 0 Unavailable

BOR disable; cho phép BOR

bằng bằng lập trình lại các bit cấu hình

0 1 Available

BOR cho phép bằng phần mềm; hoạt động BOR được điều khiển bằng SBOREN

1 0 Unavailable

BOR cho phép bằng phần cứng chạy trong chế độ run và idle, disable trong chế độ sleep

1 1 Unavailable

BOR cho phép bằng phần cứng; phải được disable bằng lập trình lại các bit cấu hình

Reset bằng lệnh RESET

Reset khi ngăn x ếp đầy

Rest khi ngăn xếp underflow

2.2.2. Ví dụ

Ví dụ này tôi giới thiệu và xử lí RESET power-up và RESET bằng chân MCLR. Vì đây là 2 loại RESET được dùng phổ biến

* LED chỉ thị:

2 blinks --->RESET MCLR

3 blinks ---> Brown out reset (BOR)

4 blinks ---> RESET WDT ( watch dog timer

time out)

Trong ví dụ mô phỏng bằng proteus tôi chỉ mô phỏng RESET bật nguồn và RESET MCLR. Khi bắt đầu chạy mô phỏng đèn chỉ thị sẽ sáng 1 lần (1 blink) có nghĩa là RESET bật nguồn. Khi ấn RESET MCLR đèn chỉ thị sẽ nháy sáng 2 lần.

Code như sau:

/* FileName: reset_source.c

* Dependencies: Header (.h) files if applicable, see below

* Processor: PIC18F * Compiler: MCC18 v3.30 or higher * Writer: Rocket42 */ #include <p18cxxx.h> #include "reset.h" /*Configuration settings:

* Oscillator is configured as INTRC

* watch dog timer is disabled or enabled (comment out respective line)

* Extended instruction mode is disabled * Low voltage programming is disabled

#pragm a con fi g X IN ST = O FF, LV P = O FF #pragm a WDT = O FF

//#p ragma WDT = O N, W DTPS = 102 4

Một phần của tài liệu ngôn ngữ lập trình mplab c18 (Trang 40 - 70)

Tải bản đầy đủ (PDF)

(70 trang)