Anh Nguyễn

nvtienanh.info

MPLAB XC8 - Lập trình nháy đèn led

2015-12-21 Anh Nguyễnnotes

Giới thiệu MPLAB XC8

Bài hướng dẫn này sẽ hướng dẫn các bạn lập trình nháy đèn LED với vi điều khiển PIC bằng trình biên dịch MPLAB XC8. Gần đây, hãng Microchip đã ra mặt bộ công cụ lập trình hoàn toàn mới cho các sản phẩm của mình đó là phần mềm IDE MPLABX và MPLAB XC Compliders.

Các phần mềm trên được phát triển để thay thế bộ công cụ MPLAB đã lỗi thời. MPLABX IDE sử dụng nền tảng NetBeans IDE của Oracle và hỗ trợ hệ điều hành Windows, Mac và Linux.

MPLAB XC thay thế cho các trình biên dịch MPLABC và Hi-Tech C, hãng microchip khuyến khích các lập trình viên sử dụng MPLAB XC cùng với MPLAB X IDE để phát triển các ứng dụng trên vi điều khiển PIC. Tutorial này sẽ sử dụng PIC 16F877A để điều khiển đèn led chớp tắt và mô phỏng trên Proteus.

Lập trình MPLAB XC8

Các chân nhập xuất (GPIO - General Purpose Input Output) của vi điều khiển PIC được chia thành nhiều PORT ví dụ như PORTA, PORTB… Vi điều khiển PIC 16F877A thuộc dòng 8-bit, mỗi PORT gồm có 8 chân. Dòng PIC16F mỗi port được quản lý bởi hai thanh ghi (registers): TRIS và PORT. Chẳng hạn: TRISB, PORTB, TRISD, PORTD.

Thanh ghi TRIS để xác định trạng thái của từng chân là nhập (input) hay xuất(output). Thanh ghi TRIS đang ở mức logic 1 thì chân đó đang ở trạng thái Input, nếu mức logic 0 là ở trạng thái output. Tất cả các chân Input sẽ ở trạng thái Hi-Impedance Thanh ghi PORT dùng để đọc hoặc ghi dữ liệu ra chân tương ứng Trong trường hợp một chân là output (TRIS = 0), nếu thanh ghi PORT ở mức 1 thì chân tương ứng sẽ xuât tín hiệu Logic hight (VDD) ngược lại nếu thanh ghi PORT ở mức 0 thì chân tương ứng sẽ xuất tín hiệu Logic low (VSS). Với PIC 16F877A sử dụng nguồn 5V thì VDD = 5V và VSS = 0V. Các bạn có thể xem thêm datasheet của nó

PORT and TRIS Register in PIC Microcontroller

Ghi dữ liệu vào thanh ghi

Thao tác trên thanh ghi là gán giá trị cho từng bit hay toàn bộ các bit trên thanh ghi. (Trong trường hợp này một thanh ghi có 8bit) Ghi từng bit một

TRISC0 = 1; //Makes 0th bit of PORTC Input TRISC5 = 0; //Makes 5th bit of PORTC Output RB3 = 1; //Makes 3ed bit of PORTB at Logic High RB7 = 0; //Makes 7th bit of PORTB at Logic Low

Ghi toàn bộ thanh ghi

Trước hết bạn nên làm quen với một vài kí hiệu thường dùng trong ngôn ngữ C trong biểu diễn số

  • Một số bắt đầu bằng ‘0b’ thì số này thuộc hệ nhị phân (Binary).
  • Một số bắt đầu bằng ‘0’ thì số này thuộc hệ bát phân (Octal).
  • Một số bắt đầu bằng ‘0x’ thì số này thuộc hệ thập lục phân (Hexadecimal).
  • Nếu không có ký hiệu đặc biệt nào thì số đó thuộc hệ thập phần (Decimal).

Ví dụ:

Co so

  • TRISC0 = 1; //Makes 0th bit of PORTC Input
  • PORTB = 0xFF; //Makes all pins of PORTB Logic High
  • TRISC = 0x00; //Makes all pins of TRISC Output
  • PORTD = 128; //Makes 7th bit of PORTD Logic High

Chương trình nháy led

#define _XTAL_FREQ 20000000
#include // BEGIN CONFIG
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = ON // Watchdog Timer Enable bit (WDT enabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
//END CONFIG
int main()
{
  TRISB0 = 0; //RB0 as Output PIN
  while(1)
  {
    RB0 = 1;  // LED ON
    __delay_ms(1000); // 1 Second Delay
    RB0 = 0;  // LED OFF
    __delay_ms(1000); // 1 Second Delay
  }
  return 0;
} 
  • Dòng lệnh #define XTALFREQ 20000000 khai báo tần số thạch anh dùng cho vi điều khiển để sử dụng cho hàm delays: _delayms() và ở đây mình sử dụng thạch anh 20MHz.
  • Dòng lệnh #include chính là file header khai báo địa chỉ các thanh ghi cũng như một số hàm trong thư viện chẳng hạn trong đoạn code có sử dụng hàm _delayms() và các thanh ghi TRIS, PORT.
  • Tiếp theo là s #pragma dòng lệnh này để khai báo với trình biên dịch đây là đoạn cài đặt các bit ( Configuration Bits) của vi điều khiển PIC.

MPLAB X IDE có hỗ trợ cài đặt các biến. Các bạn vào thanh menu: Window >> PIC Memory Views >> Configuration Bits

Configuration Bits

Sau đó cài đặt các bit ở panel bên dưới trình biên dịch

PIC Memory Views – Configuration Bits

Tiếp theo click vào Generate Source Code to Output

Generate Source Code to Output

Sau đó các bạn copy và paste đoạn mã vào đoạn code Đoạn code trên đã có sẵn đoạn code khai báo các bạn không cần phải thực hiện lại. Cuối cùng là Build project

Bulid project

Kết quả sau khi Buli là file hex nằm ở: Project Folder >> dist >> default >> production các bạn dùng file này để nạp vào vi điều khiển.

Sơ đồ mạch trong proteus

Nhay led proteus