VERİ ALMA KESMESİ !

Başlatan Lenin, 02 Şubat 2018, 23:33:16

Lenin

Merhabalar. CCS C de yazdığım bu kodun veri alma kesmesi içeresinde 2 yorum arasında bulunan kısımı while(true) kısmında yazdığımda d portu üzerinde bulunan ledler yanmıyor. Ama kesme içerisinde yazdığımda ise d portunda ki ledler yanıyor. Sorun ne olabilir?
#include <deneme1.h>

#include <stdlib.h>
#include <stdio.h>

unsigned int sicaklik=30,nem1=30,nem2=30,gaz=30;
unsigned int sicayar=0,nem1ayar=0,nem2ayar=0,gazayar=0;
char gelen[50];
char bol[]="#";
char recsicaklik[10];
char recnem1[10];
char recnem2[10];
char recgaz[10];

#INT_RDA
void  RDA_isr(void) 
{
   if(fscanf(mavidis,"%s",gelen))
   {
      strcpy(recsicaklik,strtok(gelen,bol));
      strcpy(recnem1,strtok(0,bol));
      strcpy(recnem2,strtok(0,bol));
      strcpy(recgaz,strtok(0,bol));
   }
   
   sicayar=atoi(recsicaklik);
   nem1ayar=atoi(recnem1);
   nem2ayar=atoi(recnem2);
   gazayar=atoi(recgaz);
   
   fprintf(mavidis,"%u#%u#%u#%u#%u#%u#%u#%u\r\n",sicayar,nem1ayar,nem2ayar,gazayar,sicaklik,nem1,nem2,gaz);
   ////////////
   if(sicayar>sicaklik)
   {
      output_high(pin_d0);
   }
   else
   {
      output_low(pin_d0);
   }
   
   if(nem1ayar>nem1)
   {
      output_high(pin_d1);
   }
   else
   {
      output_low(pin_d1);
   }
   
   if(nem2ayar>nem2)
   {
      output_high(pin_d2);
   }
   else
   {
      output_low(pin_d2);
   }
   
   if(gazayar>gaz)
   {
      output_high(pin_d3);
   }
   else
   {
      output_low(pin_d3);
   }
   /////////
}

void main()
{
   output_d(0x00);
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
   delay_ms(100);
   
   while(TRUE)
   {
      
   }

}

sifirzero

sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

fide


Fscanf den sonraki satırların hepsi ile beraber aşağıdaki satırları da while içine alıp dene bence
  enable_interrupts(INT_RDA);

enable_interrupts(GLOBAL);   delay_ms(10); 
Bu kısmı while içine alırsan çalışması gerekir.
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

omereliusuk

Kesmede bu kadar işlem yaparsan ikinci bilgiyi alamazsın.

Lenin

Alıntı yapılan: serkancetin - 03 Şubat 2018, 05:22:57
set_tris_d(0x00);

Output kısmını header dosyası içinde tanımladım.

Lenin

Alıntı yapılan: omereliusuk - 03 Şubat 2018, 14:03:37
Kesmede bu kadar işlem yaparsan ikinci bilgiyi alamazsın.

Kesme içerisinde bu işlemleri yaptığımda verileri rahat alabiliyorum. Asıl sorun kesme içinde çalışan if şartları, aşağıdaki while(true) kısmında çalışmaması.

Lenin

Alıntı yapılan: fide - 03 Şubat 2018, 08:24:37
Fscanf den sonraki satırların hepsi ile beraber aşağıdaki satırları da while içine alıp dene bence
  enable_interrupts(INT_RDA);

enable_interrupts(GLOBAL);   delay_ms(10); 
Bu kısmı while içine alırsan çalışması gerekir.

Dediğiniz gibi yaptım, malasef çalışmadı.