Điều khiển LED vào ra là bài tập cơ bản khi bắt đầu học lập trình bất kỳ dòng vi điều khiển nào. EX01 này sẽ thực hiện điều khiển 7 led nối vào PORTB của PIC16F877. Thực hiện nhiều hiệu ứng khác nhau. * Sơ đồ phần cứng:
*Code CCS:
+ Chương trình 1: #include <16F877A.h> #include <def_877a.h> #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT #use delay(clock=20000000)
void main() { int k; TRISB= 0; PORTB=0xFF; delay_ms(1000); PORTB=0; for(k=0; k<20;k++) { switch(PORTB) { case 0: PORTB=0xFF; delay_ms(200); break; case 0xFF: PORTB=0; delay_ms(200); break; } } PORTB= 0b01010101; while(1) { PORTB=~PORTB; delay_ms(200); }
} ///////////////////////////////////////////////// +Chương trình 2:
#include <16F877A.h> #include <def_877a.h> #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT #use delay(clock=20000000) int k=0; char savebank;
void main() {
TRISB= 0;//output PORTB=0; delay_ms(1000); do { PORTB=~PORTB; delay_ms(200); k++; } while(k<20) k=0;//xóa k savebank= STATUS&&0b01100000; asm { bsf STATUS,RP0 // lua chon bank nho trong OSCCON bcf STATUS,RP1 // thank ghi bcf OSCCON,6 // lua chon dao dong noi LFINTOSC tan so 31kHz bcf OSCCON,5 bcf OSCCON,4 bsf OSCCON,0// cho phep su dung dao dong noi } STATUS &= 0b10011111; // tra lai gia tri cac bit RP0, RP1 STATUS |= saveBank; do { PORTB = ~PORTB; Delay_ms(10); k++; } while(k<20); }
|