if döngüsünde değişkeni sıfırladımmı sorun oluyor

Başlatan 54_fatih_54, 14 Haziran 2016, 23:12:07

54_fatih_54

arkadaşlar merhaba.

küçük bir proğram yazdım.

job ile sensör değişkenlerinin değerleri aynı olduğu zaman a5 pininden çıkış almak istiyorum.

zaman değişkeniylede çıkış süresini ayarlıyorum.

a5 pinin kapatmak ve sensör değişkeninide sıfırlamak istiyorum sensör=0; yaptımmı a5 ten hiç sinyal vermiyor.

sensör=0; yapmadığımda led devamlı yanıp sönüyor.

fikir verebilirseniz sevinirim.
kolay gelsin.



#include <16f877a.h>

#use delay(clock=4000000)

int sensor; //
int job=2;
int i;
int k=5;
int zaman=0;



// Ortak katot display için veri değerleri
const int digit[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7C, 0x07, 0x7F, 0x6F};




void main()
{

  


set_tris_a(0b00001111); // A portu tümüyle çıkış olarak yönlendiriliyor
   set_tris_b(0x00); // B portu tümüyle çıkış olarak yönlendiriliyor

 output_b(0x00);  // B portu çıkışları sıfırlanıyor
   output_a(0b00001000);  // RA1 pini lojik-1 yapılıyor, diğer pinler lojik-0



   
    output_b(digit[job]); // digit[i] değerini B portuna gönder

while(1)
{


if(job==sensor)
  {  zaman++;
 
    delay_us(20);
    
  output_high(pin_a5);
 
 

  
   }
   
   
 if(zaman==k)
  {
  
 
  delay_us(20);

  output_low(pin_a5);
 
zaman=0;
sensor=0;
 

 

  }
 
 
 




 




if(input(pin_a1))
      {
      
       while(input(pin_a1))
      
      delay_ms(5);
     
      sensor++;
         
}



   if(input(pin_a0))
      {
      
       while(input(pin_a0))
      
      delay_ms(5);
     
      job++;
      
       
       if(job>9)
       job=2;
       
       

       
}


   
}


   
  
   
}
Dalından Kopan Yaprağın Akibetini Rüzgar Belirler..

cyhn41

alttaki if döngüsünü üstteki if dögüsünün içine atıp denersen düzelebilir

cemilkendir

#2
Aşağıdaki kodu bir incele sanırım oldu.


unsigned char StartOffDelay=0;

if((job==sensor)&(StartOffDelay==0))
{
     output_high(pin_a5);
     StartOffDelay=1;
}

if((StartOffDelay==1))
{
       k++;
       if(k>=zaman)
       {
          output_low(pin_a5);
          k=0;
          sensor=0;
          StartOffDelay=0;
       }
}

54_fatih_54

Alıntı yapılan: cemilkendir - 15 Haziran 2016, 13:40:23
Aşağıdaki kodu bir incele sanırım oldu.


unsigned char StartOffDelay=0;

if((job==sensor)&(StartOffDelay==0))
{
     output_high(pin_a5);
     StartOffDelay=1;
}

if((StartOffDelay==1))
{
       k++;
       if(k>=zaman)
       {
          output_low(pin_a5);
          k=0;
          sensor=0;
          StartOffDelay=0;
       }
}


cemil bey merhaba yine aynı şekilde sensör=0 ise çıkış vermiyor.


#include <16f877a.h>

#use delay(clock=4000000)

int sensor; //
int job=2;
int i;
int k=0;
int zaman=40;



// Ortak katot display için veri değerleri
const int digit[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7C, 0x07, 0x7F, 0x6F};


unsigned char StartOffDelay=0;



void main()
{

  


set_tris_a(0b00001111); // A portu tümüyle çıkış olarak yönlendiriliyor
   set_tris_b(0x00); // B portu tümüyle çıkış olarak yönlendiriliyor

 output_b(0x00);  // B portu çıkışları sıfırlanıyor
   output_a(0b00001000);  // RA1 pini lojik-1 yapılıyor, diğer pinler lojik-0



   
    output_b(digit[job]); // digit[i] değerini B portuna gönder


while(1)
{

if((job==sensor)&&(StartOffDelay==0))
{
     output_high(pin_a5);
     StartOffDelay=1;
}

if((StartOffDelay==1))
{
       k++;
       if(k==zaman)
       {
          output_low(pin_a5);
          k=0;
          sensor=0;
          StartOffDelay=0;
       }
}

 
 
 




 




if(input(pin_a1))
      {
      
       while(input(pin_a1))
      
      delay_ms(5);
     
      sensor++;
         
}



   if(input(pin_a0))
      {
      
       while(input(pin_a0))
      
      delay_ms(5);
     
      job++;
      
       
       if(job>9)
       job=2;
       
       

       
}


   
}


   
  
   
}

Dalından Kopan Yaprağın Akibetini Rüzgar Belirler..