CCS C de kesme bitince ana programa dönmüyor !!!

Başlatan eemuratozan, 01 Nisan 2012, 11:45:05

eemuratozan

arkadaşlar int_rda kesmesi gerçekleştikten sonra neden ana programa dönmüyor ?ya da kesmeye girdikten sonra artık ana programa dönmesi imkansız mı ? ya da ana programa dönmek için ne yapmalıyım işte kodlar
#include <Verici_Kodları.h>
#use delay(clock=4000000)
#define use_portd_lcd TRUE
#include <LCD.C>
#use rs232(baud=600,xmit=pin_c6,rcv=pin_c7,parity=N)
#use fast_io(b)
#use fast_io(a)

char al,gel;

#int_rda
void geri_bildirim_kesmesi()
{
  
  disable_interrupts(int_rda);
   while(1)
     {
     gel=getch();
     if(gel==0x56)
     {
       al=getch();
       if(al==0x01)
       {
         output_high(pin_a5);
         delay_ms(100);
         output_low(pin_a5);
         delay_ms(100);
         output_high(pin_a5);
         delay_ms(100);
         output_low(pin_a5);         
         printf(lcd_putc,"\f Led yandi...");
          
         
       }
       if(al==0x02)
       {
         output_high(pin_a5);
         delay_ms(100);
         output_low(pin_a5);
         delay_ms(100);
         output_high(pin_a5);
         delay_ms(100);
         output_low(pin_a5);         
         printf(lcd_putc,"\f2.Led yandi...");
                 
       }
     } 
     enable_interrupts(int_rda);
     }
     
}
   
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);
   
   enable_interrupts(GLOBAL);
   set_tris_b(0xFF);
   set_tris_a(0x00);
   output_a(0x00);
   
   port_b_pullups(false);
   lcd_init();
   
   while(1)
   {   
  
   if(input(pin_b0))
   {
     
    delay_ms(50);
    
    putc(0x55);
    putc(0x55);
    putc(0x55);
    putc(0x55);
    putc(0x55);
    
    putc(0x56);
    putc(0x56);    // vericiye 0x56 adını verdik
    putc(0x56);    // vericiye 0x56 adını verdik
    putc(0x56);    // vericiye 0x56 adını verdik
    putc(0x56);
    
    putc(0x01);
    putc(0x01);
    putc(0x01);
    putc(0x01);
    putc(0x01);
    enable_interrupts(int_rda);
   }
   if(input(pin_b1))
   {
     delay_ms(50);
    
    putc(0x55);
    putc(0x55);
    putc(0x55);
    putc(0x55);
    putc(0x55);
    
    putc(0x56);
    putc(0x56);    // vericiye 0x56 adını verdik
    putc(0x56);    // vericiye 0x56 adını verdik
    putc(0x56);    // vericiye 0x56 adını verdik
    putc(0x56);
    
    putc(0x02);
    putc(0x02);
    putc(0x02);
    putc(0x02);
    putc(0x02);
    enable_interrupts(int_rda);
   }
   }
   

}
I&C Engineer in Bereket Enerji Çates Elektrik Üretim A.Ş.

JKramer

while(1) içinde olmasından dolayı olabilir.

eemuratozan

bende ondan şüpheleniyorum ama while yerine mesela for (i=0;i<16;i++) koydum gene olmadı yani bakıorum karşıdan veri gelince kesme çalışıo ama sonrasında ana programdaki hiçbişi çalışmıo kesmenin sonuna return; koydum bu kez ana program işlio ancak istenilen şeyi yapmıyor
I&C Engineer in Bereket Enerji Çates Elektrik Üretim A.Ş.

esensoy

neden while(1) içine alıyorsunuz ki?
zaten rda kesmesi rs232 den veri alınca oluşacak,
program da kesme rutinini işletecek,
while(1) kullanmanıza gerek yok,orada takılıyor
En tehlikeli an "zafer" anıdır.

Okan AKÇA

ilk bakışta gordügüm kesmenin icerisinde delay kullanılmaz gerisi tefarrat

eemuratozan

biliyorum aslında printf de kullanılmaz ama yeniden düzenliycem şimdi değer atayıp ana programda yaptırcam
I&C Engineer in Bereket Enerji Çates Elektrik Üretim A.Ş.

eemuratozan

kodu aşağıdaki gibi değiştirdim ama ikinci butona basınca yeni veriyi karşı taraf algılamıo neden acaba alıcı kodunu da veriorum
VERİCİ
#include <Verici_Kodları.h>
#use delay(clock=4000000)
#define use_portd_lcd TRUE
#include <LCD.C>
#use rs232(baud=600,xmit=pin_c6,rcv=pin_c7,parity=N)
#use fast_io(b)
#use fast_io(a)

char al,gel;
int gelen=0;

#int_rda
void geri_bildirim_kesmesi()
{
  
  disable_interrupts(int_rda);
     gel=getch();
     if(gel==0x56)
     {
       al=getch();
       if(al==0x01)
       {
         gelen=1;        
         
       }
       if(al==0x02)
       {
         gelen=2;
                 
       }
     } 
     enable_interrupts(int_rda);
     }
     

   
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);
   
   enable_interrupts(GLOBAL);
   set_tris_b(0xFF);
   set_tris_a(0x00);
   output_a(0x00);
   
   port_b_pullups(false);
   lcd_init();
   
   while(1)
   { 
   
   if(gelen==1)
   {
         output_high(pin_a5);
         delay_ms(100);
         output_low(pin_a5);
         delay_ms(100);
         output_high(pin_a5);
         delay_ms(100);
         output_low(pin_a5);         
         printf(lcd_putc,"\f Led yandi...");
         gelen=0;
   }
   if(gelen==2)
   {
         output_high(pin_a5);
         delay_ms(100);
         output_low(pin_a5);
         delay_ms(100);
         output_high(pin_a5);
         delay_ms(100);
         output_low(pin_a5);         
         printf(lcd_putc,"\f2.Led yandi...");
         gelen=0;
   }
  
   if(input(pin_b0))
   {
     
    delay_ms(50);
    
    putc(0x55);
    putc(0x55);
    putc(0x55);
    putc(0x55);
    putc(0x55);
    
    putc(0x56);
    putc(0x56);    // vericiye 0x56 adını verdik
    putc(0x56);    // vericiye 0x56 adını verdik
    putc(0x56);    // vericiye 0x56 adını verdik
    putc(0x56);
    
    putc(0x01);
    putc(0x01);
    putc(0x01);
    putc(0x01);
    putc(0x01);
    enable_interrupts(int_rda);
   }
   if(input(pin_b1))
   {
     delay_ms(50);
    
    putc(0x55);
    putc(0x55);
    putc(0x55);
    putc(0x55);
    putc(0x55);
    
    putc(0x56);
    putc(0x56);    // vericiye 0x56 adını verdik
    putc(0x56);    // vericiye 0x56 adını verdik
    putc(0x56);    // vericiye 0x56 adını verdik
    putc(0x56);
    
    putc(0x02);
    putc(0x02);
    putc(0x02);
    putc(0x02);
    putc(0x02);
    enable_interrupts(int_rda);
   }
   }
   

}


ALICI
#include <Alıcı_Kodları.h>
#use delay(clock=4000000)
#use fast_io(b)
#use rs232(baud=600,xmit=pin_c6,rcv=pin_c7,parity=N)

char al,gel;


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);
    
   set_tris_b(0x00);
   output_b(0x00);

   while(1)
   {
     gel=getch();
     if(gel==0x56)
     {
       al=getch();
       if(al==0x01)
       {
         output_high(pin_b0);
         delay_ms(500);
         output_low(pin_b0);
         delay_ms(500);
         output_high(pin_b0);
         delay_ms(500);
         output_low(pin_b0);
         delay_ms(500);
         output_high(pin_b0);
         delay_ms(500);
         output_low(pin_b0);
         delay_ms(500);
           
         putc(0x55);
         putc(0x55);
         putc(0x55);
         putc(0x55);
         putc(0x55);
    
         putc(0x56);
         putc(0x56);    // vericiye 0x56 adını verdik
         putc(0x56);    // vericiye 0x56 adını verdik
         putc(0x56);    // vericiye 0x56 adını verdik
         putc(0x56);
    
         putc(0x01);
         putc(0x01);
         putc(0x01);
         putc(0x01);
         putc(0x01);
       }
       if(al==0x02)
       {
         output_high(pin_b1);
         delay_ms(500);
         output_low(pin_b1);
         delay_ms(500);
         output_high(pin_b1);
         delay_ms(500);
         output_low(pin_b1);
         delay_ms(500);
         output_high(pin_b1);
         delay_ms(500);
         output_low(pin_b1);
         delay_ms(500);
           
         putc(0x55);
         putc(0x55);
         putc(0x55);
         putc(0x55);
         putc(0x55);
    
         putc(0x56);
         putc(0x56);    // vericiye 0x56 adını verdik
         putc(0x56);    // vericiye 0x56 adını verdik
         putc(0x56);    // vericiye 0x56 adını verdik
         putc(0x56);
    
         putc(0x02);
         putc(0x02);
         putc(0x02);
         putc(0x02);
         putc(0x02);
       }
     }
   }
     
   

}
I&C Engineer in Bereket Enerji Çates Elektrik Üretim A.Ş.

eemuratozan

sorunu hallettim arkadaşlar fikirleriniz için teşekkürler
I&C Engineer in Bereket Enerji Çates Elektrik Üretim A.Ş.

eemuratozan

çözüm aşağıda ;
VERİCİ
#include <Verici_Kodları.h>
#use delay(clock=4000000)
#define use_portd_lcd TRUE
#include <LCD.C>
#use rs232(baud=600,xmit=pin_c6,rcv=pin_c7,parity=N)
#use fast_io(b)
#use fast_io(a)

char al,gel;
int gelen=0;

#int_rda
void geri_bildirim_kesmesi()
{
     disable_interrupts(int_rda);
     gel=getch();
     if(gel==0x56)
     {
       al=getch();
       if(al==0x01)
       {
         gelen=1;        
         
       }
       if(al==0x02)
       {
         gelen=2;
                 
       }
     } 
     enable_interrupts(int_rda);
     }
     

   
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);
   
   enable_interrupts(GLOBAL);
   set_tris_b(0xFF);
   set_tris_a(0x00);
   output_a(0x00);
   
   port_b_pullups(false);
   lcd_init();
   
   while(1)
   { 
   
   if(gelen==1)
   {
         output_high(pin_a5);
         delay_ms(100);
         output_low(pin_a5);
         delay_ms(100);
         output_high(pin_a5);
         delay_ms(100);
         output_low(pin_a5);         
         printf(lcd_putc,"\fLed yandi...\nby MOZANU");
         gelen=0;
   }
   if(gelen==2)
   {
         output_high(pin_a5);
         delay_ms(100);
         output_low(pin_a5);
         delay_ms(100);
         output_high(pin_a5);
         delay_ms(100);
         output_low(pin_a5);         
         printf(lcd_putc,"\f2.Led yandi...\nby MOZANU");
         gelen=0;
   }
  
   if(input(pin_b0))
   {
     
    delay_ms(50);
    
    putc(0x55);
    putc(0x55);
    putc(0x55);
    putc(0x55);
    putc(0x55);
    
    putc(0x56);
    putc(0x56);    // vericiye 0x56 adını verdik
    putc(0x56);    // vericiye 0x56 adını verdik
    putc(0x56);    // vericiye 0x56 adını verdik
    putc(0x56);
    
    putc(0x01);
    putc(0x01);
    putc(0x01);
    putc(0x01);
    putc(0x01);
    enable_interrupts(int_rda);
   }
   if(input(pin_b1))
   {
    delay_ms(50);
    
    putc(0x55);
    putc(0x55);
    putc(0x55);
    putc(0x55);
    putc(0x55);
    
    putc(0x56);
    putc(0x56);    // vericiye 0x56 adını verdik
    putc(0x56);    // vericiye 0x56 adını verdik
    putc(0x56);    // vericiye 0x56 adını verdik
    putc(0x56);
    
    putc(0x02);
    putc(0x02);
    putc(0x02);
    putc(0x02);
    putc(0x02);
    enable_interrupts(int_rda);
   }
   }
   

}

ALICI
#include <Alıcı_Kodları.h>
#use delay(clock=4000000)
#use fast_io(b)
#use rs232(baud=600,xmit=pin_c6,rcv=pin_c7,parity=N)

char al,gel;
int gelen=0;

#int_rda
void geri_bildirim_kesmesi()
{
     disable_interrupts(int_rda);
     gel=getch();
     if(gel==0x56)
     {
       al=getch();
       if(al==0x01)
       {
         gelen=1;        
         
       }
       if(al==0x02)
       {
         gelen=2;
                 
       }
     } 
     enable_interrupts(int_rda);
     }


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);
   enable_interrupts(GLOBAL);
   enable_interrupts(int_rda);
   set_tris_b(0x00);
   output_b(0x00);

   while(1)
   {
     if(gelen==1)
     {
         output_high(pin_b0);
         delay_ms(500);
         output_low(pin_b0);
         delay_ms(500);
         output_high(pin_b0);
         delay_ms(500);
         output_low(pin_b0);
         delay_ms(500);
         output_high(pin_b0);
         delay_ms(500);
         output_low(pin_b0);
         delay_ms(500);
         gelen=0; 
         putc(0x55);
         putc(0x55);
         putc(0x55);
         putc(0x55);
         putc(0x55);
    
         putc(0x56);
         putc(0x56);    // vericiye 0x56 adını verdik
         putc(0x56);    // vericiye 0x56 adını verdik
         putc(0x56);    // vericiye 0x56 adını verdik
         putc(0x56);
    
         putc(0x01);
         putc(0x01);
         putc(0x01);
         putc(0x01);
         putc(0x01);
         enable_interrupts(int_rda);
       }
       if(gelen==2)
       {
         output_high(pin_b1);
         delay_ms(500);
         output_low(pin_b1);
         delay_ms(500);
         output_high(pin_b1);
         delay_ms(500);
         output_low(pin_b1);
         delay_ms(500);
         output_high(pin_b1);
         delay_ms(500);
         output_low(pin_b1);
         delay_ms(500);
         gelen=0; 
         putc(0x55);
         putc(0x55);
         putc(0x55);
         putc(0x55);
         putc(0x55);
    
         putc(0x56);
         putc(0x56);    // vericiye 0x56 adını verdik
         putc(0x56);    // vericiye 0x56 adını verdik
         putc(0x56);    // vericiye 0x56 adını verdik
         putc(0x56);
    
         putc(0x02);
         putc(0x02);
         putc(0x02);
         putc(0x02);
         putc(0x02);
         enable_interrupts(int_rda);
       }
     }
   }
I&C Engineer in Bereket Enerji Çates Elektrik Üretim A.Ş.