Bài này là một ví dụ về các hàm vào ra trong CCS - PIC, các bạn có thể đọc phần lý thuyết trong bài Các hàm vào ra trong CCS-PIC

Bài tập giúp các bạn làm quen với ngôn ngữ lập trình CCS, phần mềm mô phỏng Proteus, kit phát triển. Epicviet sẽ chạy mô phỏng trên proteus và chạy trên kit phát triển để các bạn vừa nắm được lý thuyết vừa chạy thực tế.

i/oportpic

 Các bạn vào Proteus tạo một Project như hình trên nhớ chọn giá trị thạch anh là 12Mhz, các điện trở của LED là 160 ohm. Ở đây mình dùng PIC 16F877A điều khiển 8 LED đơn trên Port B và đọc 2 switch để chọn chế độ hoạt động như sau :

1. Khi 2 switch đọc được giá trị 0 - 0 thì bật sáng LED - D1. Chế độ này các bạn học và làm quen với lệnh Output_high(); Input();

2. Khi 2 switch đọc được giá trị 0 - 1 thì LED - D2, ON sau 1 giây thì OFF và lặp lại, LED - D3, ON sau 2 giây thì OFF và lặp lại, LED - D4, ON sau 2 giây thì OFF và lặp lại. Chế độ này các bạn làm quen với các lệnh Output_high(); Output_low(); output_bit(); output_toggle();Input();

3. Khi 2 switch đọc được giá trị 1 - 0 xuất ra tất cả các LED giá trị được đếm lên từ 0-255 và lặp lại, ở chế độ này các bạn học được lệnh Output_B();

4. Khi 2 switch đọc được giá trị 1 - 1 các LED sáng dần từ LED1 cho đến LED8 và lặp lại ở chế độ này các bạn học được lệnh Output_B();, lệch dịch bít.

Sau khi vẽ được Mạch như trên các bạn vào tạo một Project trong CCS  (ví dụ Ex1_In_Out) với các khai báo như sau :

#include <16F877A.h> // Chọn Chip
#fuses HS,NOWDT,NOPROTECT,NOLVP // Chọn chế độ làm việc
#use delay(clock=12000000) // Thạch anh 12Mhz.

Sau đó khai báo các biến sử dụng trong chương trình

byte count=0x00,shift=0x01;
int1 sw1,sw2,x=0;
int8 state=0;

 Cuối cùng là phần Code cho chương trình chính :

void main() {
  SET_TRIS_B(0x00); // xác định toàn bô Port B là output
  SET_TRIS_D(11000000); // Chỉ có D6,D7 là input
  Output_B(0x00); // Trạng thái ban đầu tất cả các LED đều tắt
 
  while(TRUE) {
 
  sw1 = Input(PIN_D6); // Đọc giá trị của PIN RD6
  sw2 = Input(PIN_D7); //Đọc giá trị của PIN RD7


  // Xác định chế độ làm việc 00,01,10,11
  if (state==0)
  if ((sw1==0)&(sw2==0)) state =0; else Output_B(0x00);
 
  if (state==1)
  if ((sw1==0)&(sw2==1)) state =1; else Output_B(0x00);
 
  if (state==2)
  if ((sw1==1)&(sw2==0)) state =2; else Output_B(0x00);
 
  if (state==3)
  if ((sw1==1)&(sw2==1)) state =3; else Output_B(0x00);
 /////////////////////////////////////////////////////////

 // Led 1 on///////////
       
       if ((sw1==0)&(sw2==0)) {
           state=0;
           output_high(PIN_B0);      //
          
       }
 //  ///////////////////
 
 // Led 2 sáng nhấp nháy 1 giây.
       if ((sw1==0)&(sw2==1)) {
           state=1;
           output_high(PIN_B1);
           delay_ms(1000);
           output_low(PIN_B1);
           delay_ms(1000);
 // LED 3 on Delay 2s off and repeat.
           x=!x;
           output_bit(PIN_B2,x);
 // LED 4 on Delay 2s off and repeat.          
           output_toggle(PIN_B3);      
       }

 // Led D1..D8  sáng phụ thuộc vào số đếm count chạy từ 0 -255 (0x00-0xff) ///
       if ((sw1==1)&(sw2==0)) {
           state=2;
           count++;
           Output_B(count);
           delay_ms(1000);
       }

 // Các LED sáng dần từ LED1 cho đến LED8 và lặp lại.///
       if ((sw1==1)&(sw2==1)) {
           state =3;
           
              Output_B(shift);       
              delay_ms(1000);
           
           shift=shift<<1;
           if(shift==0x00) shift=0x01;
          
       }
    }
}

Sau khi hoàn thành xong phần code các bạn biên dịch ra file Ex1_In_Out.hex các bạn vào Proteus chuột phải vào con pic 16F877A sau đó chọn file hex vừa mới biên dịch cuối cùng bấm nút Play góc bên trái màn hình để chạy mô phỏng.

 Như vậy sau ví dụ này chúng ta có thể học gần hết các lệnh vào ra I/O của vi điều khiển PIC các bạn có thể download Project này tại đây :

Hướng dẫn học lập trình PIC - I/O Port bài 1

Xem video mô phỏng cho bài 1 Hướng dẫn học lập trình PIC - I/O Port

Nếu bạn thấy hay hãy đăng ký , chia sẻ giúp tôi nhé chúng tôi sẽ thường xuyên cập nhật kiến thức mới về vi điều khiển PIC tại đây