4. derste yaptığımız mplab ve isis çalışmalarının son halini indirmek için >>Tıklayın.
İlk olarak, 3. derste yaptığımız çalışmada en son yazdığımız kodu (hemen aşağıda tekrar ekledim) kendi çalışma ortamımızda derleyip çalışma kartımıza gönderdik. aşağıdaki fotoğraftaki gibi bağlantıları yaptıktan sonra programımızın çalıştığını gördük.
/************************************************************ * FileName: main.c * Dependencies: * Processor: PIC16F * Assembler/Compiler: HI-TECH ANSI C Compiler V9.71a * Linker: HI-TECH ANSI C Compiler V9.71a * Company: www.hasankara.info *************************************************************/ // PORTB : 8 LED // RD0 : BUTON 0 // RD1 : BUTON 1 #include __CONFIG(0X3F3A); main(){ TRISB=0b00000000; // TUM PORTB PINLERI CIKIS OLDU TRISD=0b11111111; // TUM PORTD PINLERI GIRIS OLDU PORTB=0X00; PORTD=0XFF; int mlt=0,mlt1=0; while(1){ //______________________________ switch(mlt){ case 0:if(RD0==1){ mlt=1; } break; // BUTON 0 A BASMA KONTROLU case 1:if(RD0==0){ mlt=0; PORTB++;} break; // BUTON 0 BIRAKMA KONTROLU VE KARAR }//end mlt //______________________________ switch(mlt1){ case 0:if(RD1==1){ mlt1=1; } break; // BUTON 1 E BASMA KONTROLU case 1:if(RD1==0){ mlt1=0; PORTB--;} break;// BUTON 1 BIRAKMA KONTROLU VE KARAR }//end mlt1 //______________________________ }// end while }// end main
Geçen dersteki programı çalışma kartımızda çalıştırdıktan sonra devamında bu iki senaryoya paralel çalışacak ve buton kombinasyon takibi yapacak 8 aşamalı bir senaryo daha oluşturduk. Bu senaryo sayesinde buton kombinasyon takibini gerçekleştirdik ve sonuç olarak portd nin 7. bacağına bağladığımız ledi toggle yaptırmasını istedik. #define ön tanımlamasının kullanımını gördük.
/************************************************************ * FileName: main.c * Dependencies: * Processor: PIC16F * Assembler/Compiler: HI-TECH ANSI C Compiler V9.71a * Linker: HI-TECH ANSI C Compiler V9.71a * Company: www.hasankara.info *************************************************************/ // PORTB : 8 LED // RD0 : BUTON 0 // RD1 : BUTON 1 #include __CONFIG(0X3F3A); #define btn0 RD0 #define btn1 RD1 main(){ TRISB=0b00000000; // TUM PORTB PINLERI CIKIS OLDU TRISD=0b01111111; // TUM PORTD PINLERI GIRIS OLDU PORTB=0X00; PORTD=0XFF; int mlt=0,mlt1=0,mlt2=0; while(1){ //______________________________ switch(mlt){ case 0:if(RD0==1){ mlt=1; } break; // BUTON 0 A BASMA KONTROLU case 1:if(RD0==0){ mlt=0; PORTB++;} break; // BUTON 0 BIRAKMA KONTROLU VE KARAR }//end mlt //______________________________ switch(mlt1){ case 0:if(RD1==1){ mlt1=1; } break; // BUTON 1 E BASMA KONTROLU case 1:if(RD1==0){ mlt1=0; PORTB--;} break;// BUTON 1 BIRAKMA KONTROLU VE KARAR }//end mlt1 //______________________________ switch(mlt2){ case 0: if(btn0==1&&btn1==1){mlt2=1;} break; case 1: if(btn0==1&&btn1==0){mlt2=2;} break; case 2: if(btn0==1&&btn1==1){mlt2=3;} break; case 3: if(btn0==0&&btn1==1){mlt2=4;} break; case 4: if(btn0==1&&btn1==1){mlt2=5;} break; case 5: if(btn0==1&&btn1==0){mlt2=6;} break; case 6: if(btn0==1&&btn1==1){mlt2=7;} break; case 7: if(btn0==0&&btn1==1){mlt2=0; if(RD7)RD7=0; else RD7=1; } break; }// end switch }// end while }// end main
8 aşamalı yazmış olduğumuz senaryonun ilk 4 aşaması ile son 4 aşamasının aynı olduğunu gördük. devamında buff adında bir değişken daha tanımladık. bu 4 aşamayı bufferin içerisindeki sayı 2 olana kadar tekrarlattık. böylece daha az kod ile yukarıda ki programın aynısını yazdık.
/************************************************************ * FileName: main.c * Dependencies: * Processor: PIC16F * Assembler/Compiler: HI-TECH ANSI C Compiler V9.71a * Linker: HI-TECH ANSI C Compiler V9.71a * Company: www.hasankara.info *************************************************************/ // PORTB : 8 LED // RD0 : BUTON 0 // RD1 : BUTON 1 #include __CONFIG(0X3F3A); #define btn0 RD0 #define btn1 RD1 main(){ TRISB=0b00000000; // TUM PORTB PINLERI CIKIS OLDU TRISD=0b01111111; // TUM PORTD PINLERI GIRIS OLDU PORTB=0X00; PORTD=0XFF; int mlt=0,mlt1=0,mlt2=0,buff; while(1){ //______________________________ switch(mlt){ case 0:if(RD0==1){ mlt=1; } break; // BUTON 0 A BASMA KONTROLU case 1:if(RD0==0){ mlt=0; PORTB++;} break; // BUTON 0 BIRAKMA KONTROLU VE KARAR }//end mlt //______________________________ switch(mlt1){ case 0:if(RD1==1){ mlt1=1; } break; // BUTON 1 E BASMA KONTROLU case 1:if(RD1==0){ mlt1=0; PORTB--;} break;// BUTON 1 BIRAKMA KONTROLU VE KARAR }//end mlt1 //______________________________ switch(mlt2){ case 0: buff=0; mlt2=1; break; case 1: if(btn0==1&&btn1==1){mlt2=2;} break; case 2: if(btn0==1&&btn1==0){mlt2=3;} break; case 3: if(btn0==1&&btn1==1){mlt2=4;} break; case 4: if(btn0==0&&btn1==1){mlt2=5;} break; case 5: if(buff>2){ mlt2=0; if(RD7)RD7=0; else RD7=1;} else {mlt2=1; buff++;} break; }// end switch }// end while }// end main
Son olarak yazdığımız farklı farklı senaryoları birer fonksiyon haline getirmeyi gördük. Bu fonksiyonlar için “static unsigned char” değişken tanımlamasıyla hepsinde aynı ismi (mlt) tanımlamamızın bir sakıncası olmayacağını anladık. “static” ön eki ile yaptığımız değişken tanımlamasında, içerideki değerin korunmasını sağladığını vurguladık. Sonrasında farklı kütüphaneleri projemize dahil etmeyi gördük. Bunun için önce “user.c” ve “user.h” dosyaları oluşturarak kendimize bir kütüphane oluşturmuş olduk. Bu dosyaları “main.c” dosyasının yanına kaydettik. fonksiyon haline getirdiğimiz senaryoları “user.c” dosyasının içine yerleştirdik. Fonksiyon tanımlamalarını ise “user.h” içerisinde yaptık. ana döngümüzün bulunduğu “.c” dosyası içerisinde “#include “user.h” ” ön tanımlamasını yaparak kütüphaneyi projemize dahil etmiş olduk.
main.c dosyası:/************************************************************ * FileName: main.c * Dependencies:htc.h user.h * Processor: PIC16F * Assembler/Compiler: HI-TECH ANSI C Compiler V9.71a * Linker: HI-TECH ANSI C Compiler V9.71a * Company: www.hasankara.info *************************************************************/ // PORTB : 8 LED // RD0 : BUTON 0 // RD1 : BUTON 1 #include #include "user.h" __CONFIG(0X3F3A); main(){ TRISB=0b00000000; // TRISD=0b01111111; // while(1){ btn0_kontrol(); btn1_kontrol(); btn_kombinasyon(); }// end while }// end mainuser.h dosyası:
/************************************************************ * FileName: user.h * Dependencies: * Processor: PIC16F * Assembler/Compiler: HI-TECH ANSI C Compiler V9.71a * Linker: HI-TECH ANSI C Compiler V9.71a * Company: www.hasankara.info *************************************************************/ // fonksiyon tanımlamaları void btn0_kontrol(void); void btn1_kontrol(void); void btn_kombinasyon(void); // ön tanımlama #define btn0 RD0 #define btn1 RD1 // global değişken tanımlamauser.c dosyası:
/************************************************************ * FileName: user.c * Dependencies:htc.h user.h * Processor: PIC16F * Assembler/Compiler: HI-TECH ANSI C Compiler V9.71a * Linker: HI-TECH ANSI C Compiler V9.71a * Company: www.hasankara.info *************************************************************/ #include #include "user.h" //_/__/___/____/_____/______/_______/________/_________/_____/ void btn0_kontrol(void){ static unsigned char mlt=0; switch(mlt){ case 0:if(btn0==1){ mlt=1; } break; // BUTON 0 A BASMA KONTROLU case 1:if(btn0==0){ mlt=0; PORTB++;} break; // BUTON 0 BIRAKMA KONTROLU VE KARAR }//end switch }// end f //_/__/___/____/_____/______/_______/________/_________/_____/ void btn1_kontrol(void){ static unsigned char mlt=0; switch(mlt){ case 0:if(btn1==1){ mlt=1; } break; // BUTON 1 E BASMA KONTROLU case 1:if(btn1==0){ mlt=0; PORTB--;} break;// BUTON 1 BIRAKMA KONTROLU VE KARAR }//end switch }// end f //_/__/___/____/_____/______/_______/________/_________/_____/ void btn_kombinasyon(void){ static unsigned char mlt=0,buff=0; switch(mlt){ case 0: buff=0; mlt=1; break; case 1: if(btn0==1&&btn1==1){mlt=2;} break; case 2: if(btn0==1&&btn1==0){mlt=3;} break; case 3: if(btn0==1&&btn1==1){mlt=4;} break; case 4: if(btn0==0&&btn1==1){mlt=5;} break; case 5: if(buff>2){ mlt=0; if(RD7)RD7=0; else RD7=1;} else {mlt=1; buff++;} break; }// end switch }// end f