Để thuận tiện cho cả người dùng Windows và Linux, F sử dụng MPLAB để làm thử một bài tập nhỏ với input, output và delay như dưới đây:
F sử dụng chip 16F886. F vẫn thích dùng con vừa vừa chân thế này cho các ứng dụng. Trước đây F dùng 16F876A cho luận văn tốt nghiệp, và giờ đây thì dùng 16F886, nó cũng không thiếu tính năng hơn 16F887 nhưng đảm bảo một điều rẻ hơn, và đủ mọi thứ cần thiết để học cho PIC.
Biên dịch CC5X trên Ubuntu và Piklab cũng làm tương tự. Trong thí dụ này F dùng MPLAB, bởi vì F vẫn còn gặp vấn đề kết nối ICD2 với Piklab, F phải nghiên cứu thêm.
Bo mạch này F sử dụng mạch PICDem 2 Plus để thực hành. Trên bo này có RB0 - RB4 là các LED. 3 nút nhấn RESET, RA4 và RB0 (dùng cho ngắt ngoài). Do vậy bài tập cơ bản đầu tiên, F sử dụng nút bấm RA4 và output là RB1.
Ngoài ra, các viết chương trình của F cố gắng thể hiện các directive của CC5X để các bạn tiện theo dõi. Có những cái không dùng để làm gì, F để nó ở đó để các bạn linh hoạt sử dụng trong chương trình của mình và hiểu về cấu trúc chương trình.
Code:
// Cau hinh chip
#pragma chip PIC16F886
#pragma config WDTE=off, FOSC=XT
// Cac file di kem
#include "int16CXX.H"
// Dat bien toan cuc
char a;
bit b1, b2;
//Dat ten cho cac chan
#pragma bit input @ PORTA.4
#pragma bit output @ PORTB.1
// Template cho ngat xem trong tap tin INT16Cxx.H
// Chuong trinh delay
void delay_ms(uns16 millisec)
{
char next = 0;
OPTION = 2; // prescaler divide TMR0 rate by 8
TMR0 = 2; // deduct 2*8 fixed instruction cycles delay
do
{
next += 125;
//clrwdt(); // needed only if watchdog is enabled
while (TMR0 != next); // 125 * 8 = 1000 (= 1 ms)
} while ( -- millisec != 0);
}
void main( void)
{
TRISB = 0; // PORTB la output
output = 0; // tat output
TRISA = 0b.0001.0000; // RA4 la input
while (1)
{
while (input == 0)
{
output = 1;
delay_ms(1000);
}
output = 0; // tat output
}
// Khong can khoa chuong trinh bang While
// chuong trinh se duoc tu dong khoa bang lenh SLEEP khi bien dich
}
Các bạn dùng MPLAB thì download toàn bộ WorkSpace dưới đây cho tiện.
Chúc vui