/******************************************************
PIC16F877 ile B portu RB4...RB7 Değişiklik Kesmesi 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
//*Port B RB4, RB5, RB6 ve RB7 pinleri değişiklik Kesme Fonksiyonu *
#int_RB // PORTB de B4...B7 pinlerinde meydana gelen değişim kesmesi
void B_degisiklik () // Kesme fonksiyonu ismi
{
if (input(pin_b4)) // RB4 pini girişi okunuyor.
output_high(pin_b0); // RB0 çıkışı lojik-1 yapılıyor.
if (input(pin_b5)) // RB5 pini girişi okunuyor.
output_high(pin_b1); // RB1 çıkışı lojik-1 yapılıyor.
if (input(pin_b6)) // RB6 pini girişi okunuyor.
output_high(pin_b2); // RB2 çıkışı lojik-1 yapılıyor.
if (input(pin_b7)) // RB7 pini girişi okunuyor.
output_high(pin_b3); // RB3 çıkışı lojik-1 yapılıyor
delay_ms(2000); // 2 sn gecikme veriliyor.
output_b(0x00); // B portu çıkışı komple sıfırlanıyor.
}
/********* 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(0xF0); // RB7,RB6,RB5,RB4 giriş, diğer uçlar çıkış
output_b(0x00); // B portu çıkışı ilk anda sıfırlanıyor
enable_interrupts(INT_RB); // INT_EXT kesmesini aktif yapar
enable_interrupts(GLOBAL); // Aktif edilen kesmelere izin ver
while(1); // Sonsuz döngü
}