HARİCİ KESMEDE engel sorunu

samed.01

Üye
Katılım
15 Ocak 2014
Mesajlar
10
Puanları
1
Yaş
31
Konum
konya
merhabalar
ben pic ile nrf24l01 modülü vasıtasıyla haberleşme uygulaması yapıyorum.
gelen veriyi almak için harici kesme kullanıyorum fakat kesme engelleniyor diyerek ccs c kesmeyi kapatıyor ve bunu hata olarak değil uyarı olarak veriyor. sonuç olarak uyarı da olsa harici kesme yi çalıştırmıyor. biraz araştırdım sorunun kesme içinde delay(); kullanımından olabileceği ni söylemişler genelde amam benim fonksiyonumda bir bekleme yok sadece ana fonksiyonum da var ama o da kesmeyi etkilemez diye düşünüyorum.hatayı ve hatanın verildiği kodu buraya atıyorum. yardımlarınızı bekliyorum teşekkür ederim.

bu da uyarıda yazan fonksiyonlar;

C:
/+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

void nRF24L01_write(unsigned char d)

{

unsigned char s = 0;

for(s = 0; s < 8; s++)

{



if((d & 0x80) != 0)

{output_bit(MOSI_pin, nrf_HIGH);}



else

{output_bit(MOSI_pin, nrf_LOW);}



d <<= 1;

output_bit(SCK_pin, nrf_HIGH);

output_bit(SCK_pin, nrf_LOW);

}

}





//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

void register_write(unsigned char reg, unsigned char value)

{

output_bit(SS_pin, nrf_LOW);

nRF24L01_write((reg | W_REGISTER_cmd));

nRF24L01_write(value);

output_bit(SS_pin, nrf_HIGH);

}





//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

bu da ana fonksiyonda ki kod:


C:
#INT_EXT

void EXT_isr(void)

{

register_write(CONFIG_reg,0x0F);

output_toggle(pin_d2);

receive_data(5,gelen);

flush_TX_RX();

//delay_ms(20);

}

Adsız.png
 
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
main içine bunları yazdınmı.
 
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
main içine bunları yazdınmı.
evet main in içinde yazdım kod bu hocam
C:
#INT_EXT

void EXT_isr(void)

{

register_write(CONFIG_reg,0x0F);

output_toggle(pin_d2);

receive_data(5,gelen);

flush_TX_RX();

//delay_ms(20);

}
 
bu fonksiyonu main içinemi yazdın. fonksiyonun içine fonksiyon yazılmaz.
 
hayır yanlış anlaşıldım hocam durum şu;
benim ana fonksiyonumun dışında bir harici kesme fonksiyonum var bu fonksiyonda uyarı gösteriyor kesme yi de kapatıyor.
şöyle paylaşıyım;
C:
#include <ALICI.h>

#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)

#include "E:\nrf_generic_driver.c"

unsigned int gelen[5]={};

#INT_EXT
void  EXT_isr(void)
{ register_write(CONFIG_reg,0x0F);
   output_toggle(pin_d2);
   receive_data(5,gelen);
   flush_TX_RX();
   delay_ms(20);
}

void main()
{ 
   set_tris_d(0x00);
   set_tris_b(0xff);
   set_tris_a(0b01000000);
   set_tris_c(0x00);
   output_d(0x00);
   output_b(0x00);
   output_c(0x00);
   output_e(0x00);
   enable_interrupts(INT_EXT);
   enable_interrupts(GLOBAL);
   ext_int_edge(H_to_L);
    
   nRF24L01_RX_init();
   delay_ms(500);
   output_high(CE_pin);     
   delay_us(250);

   output_high(pin_d3);
   while(TRUE)
   {
     output_high(pin_d4);
      if((gelen[0]==1)&&(gelen[1]==2)&&(gelen[3]==4)&&(gelen[4]==5)){
        if(gelen[2]==1){
         output_high(pin_d0);}
      
      if(gelen[2]==2){
        output_high(pin_d1);}
      }
   }

}

fonksiyonun uyarı verdiği yer harici kesme fonksiyonu uyarıyı da paylaşayım fotoğraf olarak;
Adsız.png
 
Gelen dizisinin bitleri ya 0 ya bir olur. 2 ,4 ,5 olmaz.
 
Gelen dizisinin bitleri ya 0 ya bir olur. 2 ,4 ,5 olmaz.
ama ben vericiden dizi olarak
giden[5]={1,2,0,3,4,5};
bu şekilde gönderiyorum olmaz mıniye olmaz anlamadım hocam
vericimde şu şekilde çünkü;
C:
#include <VERICI.h>

#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)

#include "E:\nrf_generic_driver.c"

unsigned int giden[5]={1,2,0,4,5};


void gonder (void)
{
   register_write(CONFIG_reg, 0x0E);
   flush_TX_RX();
   send_data(5,giden);
   delay_us(200);
   output_toggle(pin_e0);
}

void main()
{
   set_tris_d(0xff);
   set_tris_b(0xff);
   set_tris_a(0b01000000);
   set_tris_c(0x00);
      set_tris_e(0x00);
   output_c(0x00);
   output_e(0x00);
   setup_ccp1(CCP_OFF);     
   setup_vref(FALSE);
   setup_CCP1(CCP_OFF);       
   disable_interrupts(global);
   output_high(pin_e1);
    
      nrF24L01_TX_init();
      delay_ms(1000);
      
   while(TRUE)
   {
   while(input(pin_d0)!=0){delay_ms(20);giden[2]=1;gonder();}
   while(input(pin_d1)!=0){delay_ms(20);giden[2]=2;gonder();}
   }

}
 
bence isr fonksiyonunun içinde bir ledi yak. kesme oluşup oluşmadığını gör.
 

Forum istatistikleri

Konular
133,385
Mesajlar
971,032
Kullanıcılar
459,241
Son üye
uasertan

Yeni konular

Çevrimiçi üyeler

Geri
Üst