4. derste neler yaptık ?

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. WP_20131221_002

/************************************************************
 * 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 main

user.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ımlama

user.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

Bir Cevap Yazın

Or

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir