View Single Post
Old 01-06-2008, 04:39 PM   #3
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
CC5X Tutorial 1

Để 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
File Kèm Theo
File Type: zip CC5X_tutorial1.zip (17.3 KB, 31 lần tải)
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn