Code mẫu cho PIC – Nháy LED đơn

0
7202

Nhấp nháy LED có thể coi là một chương trình “Kinh điển”. Mỗi người khi bắt tay vào
học VĐK thì bài học đầu tiên là làm nhấp nháy một hay vài con LED trên chân VĐK. Trong
tài liệu này tôi cũng chọn bài tập đó để bắt đầu.
Mục đích của bài như trên đã nói: Làm nhấp nháy 8 LED tại PORTB của PIC 16F877A,
thời gian trễ do người lập trình định trước.
Những điều thu được qua bài học:
‐  Vẽ một mạch điện tử hoàn chỉnh dùng OrCad 9.2
‐  Tạo một Dự án trong CCS
‐  Tệp định nghĩa các thanh ghi của PIC do người dùng tạo ra
‐  Thiết lập chế độ vào ra cho một cổng của PIC
‐  Sử dụng hàm tạo trễ thời gian

Dưới đây là sơ đồ phần cứng. Trong sơ đồ các LED được mắc chung lên dương nguồn
thông qua điện trở. Gia trị điện trở thay đổi trong khoảng 100Ω cho đến 560Ω tùy theo độ
sáng của LED mà ta muốn và cũng để đảm bảo dòng qua mỗi LED không quá 20mA khi
nguồn cấp là 5V. Như vậy để làm sáng LED ta chỉ việc đưa mức 0 ra các chân PIC và ngược
lại để tắt ta đưa mức 1.

 Sơ đồ mạch nháy 8 LED tại PORTB
 
 
 Sơ đồ mạch nguồn cho PIC
 
Mã nguồn chương trình nạp vào PIC 
//=================================================  =======
// Ten chuong trinh : Mach nhay den LED
// Mo ta phan cung  : Dung PIC16F877A ‐ thach anh 20MHz
//   : LED giao tiep voi PORTB
//   : Cuc am cua LED noi voi PORTB
//   : RB0 ‐ RB7 la cac chan output
//‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
// Chu thich  : dung che do Power On Reset, PORTB = 00000000
//   : chuong trinh viet cho PIC Tutorial
//   :  chuong trinh nay hoan toan mien phi va co the dung cho
//   : moi muc dich khac nhau
//=================================================  =======
#include <16f877a.h>
#include <def_877a.h>
#device *=16 ADC=8
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,
NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
void main()
{
// Thiet lap che do cho PORTB
TRISB = 0x00;   // Tat ca PORTB deu la cong xuat du lieu
PORTB = 0xFF;   // Tat het cac LED
While(1)
{
  PORTB = 0;  // Cho các LED sáng
  delay_ms(250);  // Tạo thời gian trễ 250ms
  PORTB = 0xFF;
  delay_ms(250);
}
}
Qua ví dụ đơn giản trên bạn hiểu cách xuất dữ liệu ra một cổng của PIC và dùng các
hàm tạo trễ.
Thủ tục thiết lập vào ra cho một cổng hay một chân của PIC
‐  Ghi giá trị vào thanh ghi điều khiển chế độ của cổng tương ứng là TRISx
o  Bit 0 ứng với chân xuất dữ liệu
o  Bit 1 ứng với nhận dữ liệu
o  Thanh ghi TRISx có thể câu hình theo từng bit
‐  Khi muốn xuất dữ liệu, ví dụ ra PORTB, câu lệnh là: PORTB = gia_tri;
‐  Khi muôn nhận dữ liệu từ PORTB, câu lệnh là: data_in = PORTB;
Về các hàm tạo trễ, trong CCS hỗ trọ sẵn 3 loại hàm tạo trễ là:
‐  delay_cycles(gia_tri): gia_tri là thời gian trễ tính theo số chu kỳ máy
‐  delay_us(gia_tri): Tạo trễ Micro giây
‐  delay_ms(gia_trị): Tạo trễ Mili giây
Bản chất của các hàm tạo trễ là đưa Vi điều khiển vào một vòng lặp chẳng làm gì cả cho
đủ số thời gian mà ta cần. Ngoài việc dùng hàm tạo trễ có sẵn ta có thể tự viết hàm tạo trễ
dùng bộ Timer.

Leave a Reply