Ccs c compiler ile pic16f877 rb4 rb7 kesmesi

Katılım
19 Haz 2019
Mesajlar
9
Puanları
1
Yaş
22
Herkese iyi geceler. ccs compiler ile kodlama yapmaya çalışıyorum. Pic16f877 entegresinin Rb4 rb7 kesmesini kullanarak c portondaki c0 pinindeki ledi 100ms aralıkla durmadan yanıp sönecek ve rb4-rb5 pinlerine pull up buton ve rb6-rb7 pinlerindeki pull down butonlarla c portundaki (c0 hariç) 4 ledi yakıp söndürmem lazım. Her led bir buton yardımıyla yanıp sönecek. Yardımcı olur musunuz? Şimdiden teşekkür ederim.
 
Kod:
/******************************************************

      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ü

 }


Bu kodda degişiklikler yaparak istefine ulaşırsın hazır sesine göre kod yazılması biraz zor
 
Kod:
/******************************************************

      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ü

}


Bu kodda degişiklikler yaparak istefine ulaşırsın hazır sesine göre kod yazılması biraz zor
Yardımınız için çok teşekkür ederim hocam.
 

Forum istatistikleri

Konular
128,179
Mesajlar
915,658
Kullanıcılar
449,940
Son üye
yavuzturan

Yeni konular

Çevrimiçi üyeler

Geri
Üst