rb ve rda kesmeleri aynı projede rb hatalı çalışıyor problem nerde?

Başlatan forumsad, 14 Ocak 2011, 22:03:31

forumsad

#include "E:\elektronik\ccs_c\ccs_uygulamalar\877\kesme\RB_RDA kesmesi\main.h"


#define use_portd_lcd TRUE   // LCD B portuna ba?ly
#include <lcd.c>   // lcd.c dosyasy tanytylyyor
#priority rb,rda   //kesmede öncelik sırası

int gelen=0;




#int_rb
void portb_rb_kesmesi()
{ 
disable_interrupts(int_rb);   //rb kesmesi aktif
output_toggle(pin_b1);
fputc('1');
}





#int_rda                                 // RX ucuna veri gelince meydane gelen kesme
void serihaberlesme_kesmesi (){  
disable_interrupts(int_rda);          // int_rda kesmesini pasif yap  
gelen=getc();

if (gelen==65)
     output_high(pin_b0);                  // lojik-1   


}






void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   // TODO: USER CODE!!
   ext_int_edge(H_TO_L);        //KESME DÜŞEN KENARDA;(1 DEN 0 OLURKEN) AKTİF OLSUN
   enable_interrupts(GLOBAL);  // Aktif edilen tüm kesmelere izin ver   
   lcd_init();                     // LCD'yi hazyrla
   
   set_tris_a(0x00);    //porta çıkış
   //set_tris_b(0xff);    //portb giriş
   set_tris_b(0b11000000);    //
   set_tris_c(0b10000000);    //portc
   set_tris_d(0x00);    //portd çıkış
   set_tris_e(0x00);    //porte çıkış
   
   output_a(0x00);     //portu temizle
   output_b(0x00);     //portu temizle
   //output_c(0x00);     //portu temizle
   output_d(0x00);     //portu temizle
   output_e(0x00);     //portu temizle
   
   
   
   
while(true) // Sonsuz döngü   
{
enable_interrupts(int_rda); // int_rda kesmesi aktif  
enable_interrupts(int_rb);   //rb kesmesi aktif

}



}




rda kesmesi düzgün çalışıyor ama rb kesmesi açılışta 1 kere kendiliğinden çalışıyor bir daha çalışmıyor

hata nerde anlayamadım...

teşekkürler

forumsad

aşagıdaki şekilde iki kesmeyide çalıştırdım ama ?
#include "E:\elektronik\ccs_c\ccs_uygulamalar\877\kesme\RB_RDA kesmesi2\main.h"


#define use_portd_lcd TRUE   // LCD B portuna ba?ly
#include <lcd.c>   // lcd.c dosyasy tanytylyyor
#priority rb,rda   //kesmede öncelik sırası
int gelen=0;
#use fast_io(b)




#int_rda                                 // RX ucuna veri gelince meydane gelen kesme
void serihaberlesme_kesmesi (){  
disable_interrupts(int_rda);          // int_rda kesmesini pasif yap  
gelen=getc();

if (gelen==65)
     output_high(pin_b1);                  // lojik-1   


}




#int_rb
void portb_rb_kesmesi()
{
output_high(pin_b0);   
delay_ms(100);        //bekle 
 
}









void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   //TODO: USER CODE!!
   set_tris_a(0x00);    //porta çıkış
   set_tris_b(0b11110000);    //portb giriş
   set_tris_c(0b10000000);    //portc
   set_tris_d(0x00);    //portd çıkış
   set_tris_e(0x00);    //porte çıkış
   
   output_a(0x00);     //portu temizle
   output_b(0x00);     //portu temizle
   output_c(0x00);     //portu temizle
   output_d(0x00);     //portu temizle
   output_e(0x00);     //portu temizle
   
   
 lcd_init();                     // LCD'yi hazyrla
 ext_int_edge(H_TO_L);        //KESME DÜŞEN KENARDA;(1 DEN 0 OLURKEN) AKTİF OLSUN
 enable_interrupts(GLOBAL);   //TÜM KESMELERE İZİN VER  
   
    while(true)
 {
enable_interrupts(int_rda); // int_rda kesmesi aktif  
enable_interrupts(int_rb);   //rb kesmesi aktif
delay_ms(10);
 }
   
}




derlediğimde aşagıdaki kod çıkıyor anlamı nedir acaba???


necati

tam olarak ne yapmak istiyorsunuz?

output_c(0x00)&&(0b00111111);
1 ler sıfılanır
[email]entegreterbiyecisi@yahoo.com[/email]

forumsad

2 adet fotoseli okuyarak pc ye veri göndereceğim pc'den veri alacagım

while kısmana ilave kodlar yazdığımda üsdeki hata kayboldu
şu anda tek bir sıkıntım var
set_tris_a(0x00);    //porta çıkış
   //set_tris_b(0xff);    //portb giriş
   set_tris_b(0b11000000);    //
   set_tris_c(0b10000000);    //portc
   set_tris_d(0x00);    //portd çıkış
   set_tris_e(0x00);    //porte çıkış
   
   output_a(0x00);     //portu temizle
   output_b(0x00);     //portu temizle
   //output_c(0x00);     //portu temizle
   output_d(0x00);     //portu temizle
   output_e(0x00);     //portu temizle
   



//output_c(0x00);     // port c yi temizleme yaptığımda rda kesmesine engel oluyor cportunun 4 ucuna role bağlayacağım
ama açlışta c portunun sadece ilk 4 ucunu sıfırlayabilirmiyim  nasıl?

teşekkürler


forumsad

if else bloklarını aşagıdaki gibi yazdığımda önceki mesajımdakı  resimdeki uyarıyı veriyor bu uyarı önemlimi

neden veriyor anlayamadım  ???

#int_rda               // RX ucuna veri gelince meydane gelen kesme
void serihaberlesme_kesmesi (){  
disable_interrupts(int_rda);          // int_rda kesmesini pasif yap  
gelen=getc();

//mk-1
if (gelen==49) {mk1_on();}   
else if (gelen==50){mk1_off();}
else if (gelen==51) { mk1_saykil();}
else if (gelen==52) { mk2_on();}
else if (gelen==53) { mk2_off();}
else if (gelen==54) { mk2_saykil();}   
}


teşekkürler

JKramer

Alıntı yapılan: forumsad - 14 Ocak 2011, 23:25:51
derlediğimde aşagıdaki kod çıkıyor anlamı nedir acaba???
(Resim gizlendi görmek için tıklayın.)
Hem kesmede hem de ana programda delay_ms() fonksiyonu kullandığınız için derleyici, ana programda o fonksiyonu kullanırken kesmeleri kapattığını söylüyor.