fonksiyonlar devreye girmiyor ???

Başlatan forumsad, 15 Ocak 2011, 03:21:49

forumsad

pc'den gönderdiğim veriye göre kontrol yapacağım ama aşagıdaki kod çalışmıyor ilk tıklamada düzğün çalışıyor
sonra sanki kilitleniyor  .....  başka konrol yapamıyorum

nerde hatam var acaba  çok teşekkürler
//********************************************
void mk1_on()
{
output_high(pin_b0);                  //mk1-on 
}

//********************************************//********************************************
void mk1_off()
{
output_low(pin_b0);                  //mk1-on 
}

//********************************************
void mk1_saykil()
{
output_high(pin_b1);                  //mk1-saykil 
delay_ms(500);
output_low(pin_b1);
}

//********************************************
void mk2_on()
{
output_high(pin_b2);                  //mk1-on 
}

//********************************************
void mk2_off()
{
output_low(pin_b2);                  //mk1-on 
}

//********************************************
void mk2_saykil()
{
output_high(pin_b3);                  //mk1-saykil 
delay_ms(500);
output_low(pin_b3);
}

//********************************************




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

lcd_gotoxy(1,1);
printf(lcd_putc,"in1=%d",gelen);

if  (gelen=49)
      mk1_on();
if  (gelen=50)
      mk1_off(); 
if  (gelen=51)
      mk1_saykil(); 
if  (gelen=52)
      mk2_on(); 
if  (gelen=53)
      mk2_off(); 
if  (gelen=54)
      mk2_saykil(); 
}


iyildirim

kesmeden çıkınca veya çıkmadan önce  kesmeyi tekrar enable edin.

forumsad

sorun şu rda kesmesini tek başına yaptıgımda çalışıyor sorun yok ama ana programa eklediğimde çalışmıyor...


rda kesmesi deneme kodu;  (kod burda çalışıyor)
#include "E:\elektronik\ccs_c\ccs_uygulamalar\877\kesme\RDA_kesmesi3\main.h"

// Denetleyici konfigürasyon ayarlary
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#define use_portd_lcd TRUE   // LCD B portuna ba?ly
#include <lcd.c>   // lcd.c dosyasy tanytylyyor
int gelen=0;



void kontrol1()
{
output_high(pin_b0);

}
void kontrol2()
{
output_low(pin_b0);
}
void kontrol3()
{
output_high(pin_b1);
delay_ms(200);
output_low(pin_b1);
}

void kontrol4()
{
output_high(pin_b2);

}
void kontrol5()
{
output_low(pin_b2);
}
void kontrol6()
{
output_high(pin_b3);
delay_ms(200);
output_low(pin_b3);
}





#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==49){
     kontrol1(); }                   
else if (gelen==50){
     kontrol2(); } 
else if (gelen==51){
     kontrol3(); }
else if (gelen==52){
     kontrol4(); }
else if (gelen==53){
     kontrol5(); }
else if (gelen==54){
     kontrol6(); }
enable_interrupts(int_rda);
}


//ANA PROGRAM*******/
void main()
{
setup_psp(PSP_DISABLED);        // PSP birimi devre dy?y   
setup_spi(SPI_SS_DISABLED);     // SPI birimi devre dy?y   
setup_timer_1(T1_DISABLED);     // T1 zamanlayycysy devre dy?y   
setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayycysy devre dy?y   
setup_adc_ports(NO_ANALOGS);    // ANALOG giri? yok   
setup_adc(ADC_OFF);             // ADC birimi devre dy?y   
setup_CCP1(CCP_OFF);            // CCP1 birimi devre dy?y   
setup_CCP2(CCP_OFF);            // CCP2 birimi devre dy?y   
output_low(pin_c5);             // RC5 çyky?y ilk anda syfyrlanyyor   
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

enable_interrupts(GLOBAL);  // Aktif edilen tüm kesmelere izin ver   

while(true) // Sonsuz döngü   {      
enable_interrupts(int_rda); // int_rda kesmesi aktif   
}





ana program;   (yukardaki kodu buraya dahil ettiğimde çalışmıyor)
#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ı
#use fast_io(b)
int gelen,durum,in1,in2=0;
//Fonksiyon tanımlamaları
void mk1_on(void);



#int_rb
void portb_rb_kesmesi()
{
durum=0;
in1=0;
in2=0;
if  (input(PIN_B7)==0) { in1=1;} 
if (input(PIN_B6)==0) { in2=1;}
 
}



void mk1_on()
{
output_high(pin_b0);

}
void mk1_off()
{
output_low(pin_b0);
}
void mk1_saykil()
{
output_high(pin_b1);
delay_ms(200);
output_low(pin_b1);
}

void mk2_on()
{
output_high(pin_b2);

}
void mk2_off()
{
output_low(pin_b2);
}
void mk2_saykil()
{
output_high(pin_b3);
delay_ms(200);
output_low(pin_b3);
}





#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==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(); }
enable_interrupts(int_rda);

}













//fotosel-1 den sinyal gelince b0 ledini yak ve bilgisayara 1 gönder
void fotosel1_on()
{
output_high(pin_c0);   
delay_ms(100);        //bekle 
 fputc('1');
}

//fotosel-2 den sinyal gelince b1 ledini yak ve bilgisayara 2 gönder
void fotosel2_on()
{
output_high(pin_c1);   
delay_ms(100);        //bekle 
 fputc('2');
}

//her iki foteselden de sinyal gelince b2 ledini yak ve bilgisayara 3 gönder
void fotoselOrtak_on()
{
output_high(pin_c2);   
delay_ms(100);        //bekle 
 fputc('3');
}

///////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
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(0b10000000);     //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 
delay_ms(10);
enable_interrupts(int_rb);   //rb kesmesi aktif
delay_ms(10);




//**************************************************
delay_ms(50);
if ((in1==1)&(in2==1)){ 
                     lcd_gotoxy(1,1);
                     printf(lcd_putc,"in1=%d",in1);
                     lcd_gotoxy(7,1);
                     printf(lcd_putc,"in2=%d",in2);
                     durum=1;
                     delay_ms(10);
                     fotoselOrtak_on();
}

//**************************************************

else if ( (durum==0)&(in1==1) ){           
                 lcd_gotoxy(1,2);
                 printf(lcd_putc,"in1=%d",in1);
                 durum=1;
                 delay_ms(10);
                 fotosel1_on();
}
//**************************************************
else if ( (durum==0)&(in2==1) ){ 
                 lcd_gotoxy(7,2);
                 printf(lcd_putc,"in2=%d",in2);
                 delay_ms(10);
                 fotosel2_on();
}
//**************************************************

}
//___________________________________________________________________________________________________________________________________________





}


forumsad

kesme
fonksiyonlar
kesme
fonksiyonlar
main


şeklinde düzenledim çalıştı teşekkürler