/****************************************************** PIC16F877 ile Dış Kesme (INT_EXT) Uygulaması PIC PROG/DEKA : Port B jumper'ı LED konumunda olmalı *******************************************************/ #include <16f877.h> // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor. #fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarları #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; // Tamsayı tipinde değişken tanımlanıyor //****** Dış Kesme Fonksiyonu ***************** #int_ext // Dış (External) RB0/INT kesmesi void ext_kesmesi () // Dış kesme fonksiyonu { output_high(pin_b1); delay_ms(1000); output_low(pin_b1); delay_ms(3000); for (i=0;i<10;i++) { output_high(pin_b1); delay_ms(500); output_low(pin_b1); delay_ms(500); } } /********* ANA PROGRAM FONKSİYONU********/ void main ( ) { setup_psp(PSP_DISABLED); // PSP birimi devre dışı setup_spi(SPI_SS_DISABLED); // SPI 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(0x01); // RB0 pini giriş,diğer uçlar çıkış olarak yönlendiriliyor output_b(0x00); // B portu çıkışı ilk anda sıfırlanıyor ext_int_edge(H_TO_L); // INT_EXT kesmesinin düşen kenarda aktif olacağını belirtir enable_interrupts(INT_EXT); // INT_EXT kesmesini aktif yapar enable_interrupts(GLOBAL); // Aktif edilen kesmelere izin ver while(1); // Sonsuz döngü }