pic programıma yardım ?

Başlatan erhangecmen, 31 Mart 2013, 14:56:25

erhangecmen

arkadaslar aşağıdaki programda arayüz den a bilgisini aldıgında program sıcaklık olcumu yapıyor. daha sonra ust lımıt sıcaklık bılgısı geldıgınde x bılgısı yolluyor pıc e ve port b nın 1 ncı bacagındakı led yanıyor fakat tekrar kesmeye geldıgınde(a bilgisinin sorgulamaya gectıgınde  ) sönuyor .

ben x bılgısı gelıp yandıgında d bılgısı gelene kadar yanmasını ıstıyorum programı yazdım ama yukarıda kı hata ıle karsılasıyorum yardım edermısınız

#include <16F877A.h>
#device adc=10
#use fast_io(a)
#use fast_io(c)
#use fast_io(b)
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O

#use delay(clock=4000000)

#use rs232(UART1,baud=9600,bits=8)

int hamdeger=0,kontrol=0,kontrol1=0,e=0,kontrol2=0,k1,k2;
float sicaklik=0.0;
char usart;

#int_RDA
void uart1_kesmsi(){
disable_interrupts(int_rda);
usart=getch();
if(e==0){
if(usart=='a'){kontrol=1;
e=1;}
else kontrol=0;}
 if(usart=='x')kontrol1=1;
 else if (usart=='d')kontrol2=1;
 else {kontrol2=0;
 kontrol1=0;}
enable_interrupts(int_rda);
}

void main()
{
   set_tris_b(0x00); 
   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_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı
   setup_adc(adc_clock_div_32);   // ADC clock frekansı fosc/32
   setup_adc_ports(AN0);
   set_tris_a(0xFF);
   set_tris_c(0xFF);
   output_a(0x00);
   output_c(0x00);
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
   printf("Seri iletisim ile Sicaklik Olcumu\n");
   set_adc_channel(0);    
   delay_us(20);          
   while(TRUE)
   {
      printf("a bekleniyor\n");
      delay_ms(500);
      while(kontrol){
      k1=kontrol1;
      k2=kontrol2;
       hamdeger=read_adc();  
      sicaklik=(0.0048828125*hamdeger)*1000;    
      sicaklik=(sicaklik/10)+2;     
      printf("%5.1f\n",sicaklik);
      delay_ms(300); 
      if(k1==1)
      output_high(pin_b1);
      else 
      output_low(pin_b1);
      if(k2==1)
      output_high(pin_b2);
      else 
      output_low(pin_b2);
      
      
      } 
   }

}