/****************************************************** PIC16F877 ile Timer0 Uygulaması-1 PIC PROG/DEKA : Port B jumper'ı LED konumunda olmalı *******************************************************/ #include <16f877.h> // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor. // Denetleyici konfigürasyon ayarları #fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD #use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor. #use fast_io(b) //Port yönlendirme komutları B portu için geçerli int i=0; // Tamsayı tipinde değişken tanımlanıyor //****************** Timer0 Kesmesi ***************************** #int_timer0 // Timer0 kesmesi void timer0_kesme () // Kesme fonksiyonu ismi { set_timer0(60); // TMR0 değeri belirleniyor i++; // i değeri 1 arttırılıyor if (i==10) // i değeri 10'a eşitse RB0 çıkışı lojik-1 olsun output_high(pin_b0); if (i==20) // i değeri 20'ye eşitse RB0 çıkışı lojik-1 olsun ve i değeri sıfırlansın { output_low(pin_b0); i=0; } } /********* ANA PROGRAM FONKSİYONU********/ void main ( ) { setup_psp(PSP_DISABLED); // PSP birimi devre dışı setup_timer_1(T1_DISABLED); // T1 zamanlayıcısı devre dışı setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı setup_adc_ports(NO_ANALOGS); // ANALOG giriş yok setup_adc(ADC_OFF); // ADC birimi devre dışı setup_CCP1(CCP_OFF); // CCP1 birimi devre dışı setup_CCP2(CCP_OFF); // CCP2 birimi devre dışı set_tris_b(0x00); // B portu komple çıkış output_b(0x00); // B portu çıkışı ilk anda sıfırlanıyor setup_timer_0(RTCC_INTERNAL | RTCC_DIV_256); // Timer0 ayarları yapılıyor set_timer0(60); // TMR0 değeri belirleniyor enable_interrupts(INT_timer0); // int_timer0 kesmesini aktif yapar enable_interrupts(GLOBAL); // Aktif edilen kesmelere izin ver while(1); // Sonsuz döngü }