#include #include #include #include #include // Butonlar ve LED'ler için pin tanımlamaları #define BASLAT RB4 #define DURDUR RB5 #define KIRMIZI RB6 #define YESIL RB7 // Konfigürasyon ayarları __CONFIG(WDTDIS&LVPDIS&PWRTEN&XT); // Global değişkenler unsigned int CX; unsigned char kontrol; // TIMER Kesme Alt Programı void interrupt kesme(void){ CX++; if(CX>2000)kontrol=1; // Zaman aşımı için T0IF=0; // Bayrağı temizle TMR0=131; // TIMER'ı tekrar yükle } //------------ ANA PROGRAM ----------------- main(void) { unsigned char sonuc[]="GECiKME= "; unsigned int i,deger; unsigned char sayi,hata; // Port ayarları TRISA=0x00; // Bütün pinler çıkış TRISB=0x30; // RB4,RB5 giriş, diğerleri çıkış PORTA=0; PORTB=0; CMCON=0x07; // TIMER işlemleri T0CS=0; // Dahili clock PSA=0; // Prescaler TMR0 için ayarlı PS0=0; PS1=1; PS2=0; // Oran 1:8 ei(); // Bütün kesmeler etkin T0IE=0; //Başlangıçta TIMER pasif T0IF=0; // Bayrağı temizle DelayMs(250); // 250 ms bekle lcd_init(); // LCD hazırlık aşaması lcd_clear(); // LCD'yi temizle lcd_write(0x0C); // imleci gizle lcd_goto(0x00); lcd_puts(" REFLEKS OLCER "); lcd_goto(0x40); lcd_puts(" BASLAT'A BASIN "); for(;;){ // Ana işlem döngüsü kontrol=0; CX=0; hata=0; while(BASLAT==0); // Butona basılana kadar bekle lcd_clear(); // Butona basılınca LCD'yi temizle KIRMIZI=1; YESIL=0; // Kırmızı LED'i yak lcd_goto(0x00); lcd_puts(" YESiL YANINCA "); lcd_goto(0x40); lcd_puts(" DURDUR'A BASIN "); sayi=rand(); // rand() ile rastgele sayı üret deger=3*sayi; if(deger<=75)deger=deger+75; //en düşük 75 yap // Rastgele bir süre bekle. Süre=degerx(10 ms) for(i=0;i100&CX<=200)lcd_puts(" MUKEMMEL "); if(CX>200&CX<=300)lcd_puts(" DAHA HIZLI OL "); if(CX>300&CX<=600)lcd_puts("BiRAZ PRATiK YAP"); if(CX>600&CX<=1000)lcd_puts(" COK YAVASSIN "); if(CX>1000&CX<2000)lcd_puts("UYUYORSUN GALiBA"); // Tepki süresini milisaniye cinsinden yaz sprintf(sonuc+8,"%d ms",CX); lcd_goto(0x40); lcd_puts(sonuc); } // Zaman aşımı durumunu dikkate al else lcd_puts(" YENiDEN DENE "); } } // İşlemleri tekrarla }// Programın sonu