Ccs c compiler ile pic16f877 rb4 rb7 kesmesi

Katılım
19 Haz 2019
Mesajlar
9
Puanları
1
Yaş
25
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
133,424
Mesajlar
971,426
Kullanıcılar
459,423
Son üye
erkankurtuluskelleci@gmail

Yeni konular

Geri
Üst