HƯỚNG DẪN LẬP TRÌNH CHO VI ĐIỀU KHIỂN PIC Sự phát triển của các công nghệ và kỹ thuật thiết kế chế tạo đã cho ra đời ngày càng nhiều linh kiện điện tử đa năng với giá thành rẽ và có sự ổn định cao. Trong xu thế phát triển các hệ thống tích hợp với trung tâm là các vi điều khiển cho phép sử dụng phần mềm thay đổi linh hoạt các hoạt động của hệ thống. Trong rất nhiều vi điều khiển hiện tại, với dòng MSC51 đơn giản cho các chương trình điều khiển và giá rẻ, dòng vi điều khiển AVR cho các hệ thống có nhiều ứng dụng phức tạp. Trong các dòng vi điều khiển, các vi điều khiển của hãng Mircochip với ký hiệu PIC đã và đang chứng tỏ được các khả năng linh hoạt và sự ổn định cho phép người dùng tạo nên các hệ thống tích hợp phù hợp. I. Giới thiệu chung Vi điều khiển là sự kết hợp của vi xử lý thu gọn với các chức năng vào ra cho mục đích đo lường và điều khiển trên một vi mạch tích hợp. Dòng vi điều khiển PIC là sự tích hợp của vi xử lý 8bit và nhiều chức năng kết hợp như: vào ra 8bit×4port, PWM, ADC, thời gian, … Sơ đồ chức năng của một vi điểu khiển PIC được mình họa như trong (Hình 1). Trong đó cho thấy với một khối xử lý 8bit, vi điều khiển có điểm khác biệt với vi xử lý là giao tiếp với bên ngoài bằng các giao tiếp hai trạng thái mà không phải là BUS 3 trạng thái như vi xử lý. Ngoài ra trong các dòng PIC khác nhau cũng có nhưng thay đổi chức năng khác nhau cho phép người sử dụng lựa cho linh hoạt cho các ứng dụng phù hợp. Các chức năng chính của vi điều khiển PIC18F4550 được thể hiện như sau: - Giao tiếp logic hai trạng thái - Giao tiếp tín hiệu tương tự: đọc vào tín hiệu tương tự để thực hiện chuyển đổi tín hiệu, hoặc đầu vào các khối so sánh. - Tín hiệu điều khiển lập trình được - Khối chuyển đội tín hiệu ADC 10bit - Khối giao tiếp nối tiếp EUSART - Khối so sánh - Các khối định thời - Giao tiếp BUS nối tiếp – USB 2.0 - EEPROM cho mục đích lưu lại trạng thái trước khi ngắt hệ thống - Khối tạo xung nhịp linh hoạt - Các khối thanh ghi chức năng cho phép lập trình điều khiển các thành phần của hệ thống một cách đơn giản và thuận lợi nhất. Hình 1: Sơ đồ chi tiết các thành phần của PIC18F4550 A. Lập trình cho PIC Vi điều khiển PIC có thể sử dụng nhiều phần mềm lập trình chuyên dụng với các dạng ngôn ngữ lập trình khác nhau: ASM – hợp ngữ, ngôn ngữ C, ngô ngữ PASCAL,… Mỗi phần mềm và mỗi dạng ngôn ngữ lập trình đều có những thuận lợi và khó khăn riêng, phù thuộc vào khả năng và sở thích của người dùng để lựa chọn một công cụ phù hợp. Hiện nay có hai phần mềm hỗ trợ lập trình PIC với ngôn ngữ C linh hoạt là CCS và MikroC, và trong tài liệu này hướng dẫn sử dụng ngôn ngữ MikroC để lập trình điều khiển cho PIC18F4550. Bộ phần mềm MikroC có thể tham khảo tại trang web: http://www.mikroe.com/mikroc/pic/ B. Nạp chương trình vào vi mạch Với dòng vi điều khiển PIC, việc nạp chương trình đã lập sẵn vào vi mạch được thực hiện qua chuẩn ICSP (In-Circult Serial Programming) thông qua giao tiếp 5 dường dẫn từ khối mạch nạp đến vi mạch PIC Hình 2: Giao diện phần mềm WINPIC v3.61 Hiện có nhiều loại mạch nạp được chế tạo cho dòng vi điều khiển PIC, nhưng hiện tại phòng thí nghiệm sử dụng mạch nạp chuẩn của PIC kết hợp với phần mềm WINPIC phiên bản 3.61 trên trang web: http://www.winpic800.com//index.php?option=com_frontpage&Itemid=1 Quá trình nạp chương trình vào vi mạch được thực hiện như sau 1. Kết nối mạch thực hành với mạch nạp thông qua cáp 5 đường dây (chú ý đến thứ tự của cáp phù hợp). 2. Khởi động phần mềm WINPIC, sẽ có phần mềm với giao diện như trong (Hình 2). 3. Kiểm tra sự tương thích giữa phần mềm và hệ thống bằng cách dò loại mạch PIC bằng cách kích biểu tượng dò tìm trên thanh công cụ , hoặc bằng Device/Detect Device 4. Tải file chứa chương trình đã biên dịch (file dạng hex) vào phần mềm WINPIC 5. Nạp chương trình vào vi mạch bằng cách kích vào biểu tượng nạp chương trình hoặc bằng menu Device/Program All 6. Ngắt kết nối giữa mạch nạp và mạch thực hành. II. Lập trình PIC bằng MikroC A. Các bước khởi tạo project trong MikroC 1. Khởi động phần mềm MikroC Hình 3: Giao diện phần mềm MikroC Hình 4: Cửa số New Project 1. Tạo dự án (Project): Chọn Project/New Project, phần mềm sẽ hiện cửa sổ con như sau (Hình 4). Sau đó sẽ điền tên dự án Trỏ đến thư mục chứa dự án (mã nguồn chương trình) Lựa chọn cấu hình cho vi mạch: loại vi mạch, cấu hình thông số Sao đó nhấn OK để hoàn thành quá trình tạo lập một Project mới, phần mềm sẽ tạo nên một file chứa code có cùng tên với tên Project Lưu file chức mã chương trình ở dạng file *.c. Sau đó nạp file vào Project bằng thao tác Project/Add to Project, phần mềm sẽ hiện cửa số con (Hình 5). Từ đó sẽ trỏ đến file chứa mã nguồn. Hình 5: Cửa sổ nạp file vào project B. Một số ví dụ 1. Điều khiển cổng vào ra Vào ra với PIC sẽ được thực hiện qua 5 cổng là A, B, C, D và E. Mỗi cổng được truy xuất qua một thanh ghi tương ứng là PORTx, và được xác định hướng bởi TRISx Với các chân có kết hợp với đầu vào tương tự sẽ có thêm thanh ghi lựa chọn chế độ vào ra số hay tương tự là ANSEL và ANSELH. Các thanh ghi cổng có thể truy xuất trực tiếp các bit theo định nghĩa PORTX.Fn Chú ý - Trước khi truy xuất các cổng, phải thiết lập hướng vào ra tương ứng. - Với các chân ở cổng A và B phải thiết lập thanh ghi lựa chọn chế độ vào ra. - Nên định nghĩa trước các bit nếu truy xuất các bit của các cổng một cách độc lập. Chương trình điều khiển vào ra void main() { char data; ANSELH = 0; //Thiet lap che do cho PORTB TRISB = 0x0F; //Thiet lap huong cho PORTB while (1) { data = PORTB; //Doc 4bit o PORTB data = ~data; //Dao bit data = data*16; //Dich tu 4bit thap len 4bit cao PORTB = data; //Xuat gia tri } } 2. Lập trình thời gian Thời gian trong PIC rất đa dạng, với ba khối chính là TIMER0 (8bit) và TIMER1, TIMER2 (16bit) với bộ chia đầu vào lập trình được cho phép mềm dẻo trong hoạt động đếm cũng như định khoảng thời gian cho các hệ thống khác nhau. Ngoài các chế độ đếm và định thời thì TIMER trong PIC còn có một số chức năng khác như PWM, WDT, … Các khối thời gian ở PIC không có cờ tràn độc lập mà được tích hợp luôn vào cờ ngắt (sử dụng nguyên tắc phát ngắt). Khối TIMER0 Hình 6: Khối timer 0 Chế độ định thời 8bit, lúc này TIMER0 sẽ đếm lên liên tục xung nhịp hệ thống không qua bộ chia. Chế độ này được chọn bằng các đặc bit T0CS =0 (OPTION_REG) Chế độ đếm 8bit, lúc này TIMER0 sẽ luôn tăng theo sườn trước (hoặc sau) của chân đầu vào T0CKI. Chế độ này được chọn bằng cách thiết lập bit T0CS=1. Lập trình bộ chia cho TIMER0, khối chia xung nhịp đầu vào của TIMER0 ở chế định thời được thiết lập qua thanh ghi OPTION_REG. Và thanh ghi này cũng cho phép chuyển đổi giữa hai chế độ TIMER hay WDT Ngắt TIMER0 sẽ tạo một ngắt khi xảy ra sự tràn khi đếm đến giá trị 0FFh về giá trị 00h. Lúc đó giá trị bit cờ T0IF sẽ được thiết lập lên 1 bất chấp ngắt T0 có được thiết lập hay không (bit T0EN). Bit cờ tràn T0IF được xác lập 1 trong phần cứng nhưng phải được xóa bởi phần mềm. Chú ý: Có thể không sử dụng ngắt vẫn có thể điều khiển được TIMER0 thông qua việc kiểm tra cờ tràn T0IF và xóa cờ khi xảy ra tràn. . năng cho phép lập trình điều khiển các thành phần của hệ thống một cách đơn giản và thuận lợi nhất. Hình 1: Sơ đồ chi tiết các thành phần của PIC1 8F4550 A. Lập trình cho PIC Vi điều khiển PIC. khiển và giá rẻ, dòng vi điều khiển AVR cho các hệ thống có nhiều ứng dụng phức tạp. Trong các dòng vi điều khiển, các vi điều khiển của hãng Mircochip với ký hiệu PIC đã và đang chứng tỏ. là các vi điều khiển cho phép sử dụng phần mềm thay đổi linh hoạt các hoạt động của hệ thống. Trong rất nhiều vi điều khiển hiện tại, với dòng MSC51 đơn giản cho các chương trình điều khiển