PİC C de 'VE' koşulu nasıl sağlanır?

hayır, ama if(A==1) şeklinde yazılırsa okunurluk kolaylaşacaktır.

Hayır derken?

Neyse bu konuyu kapatalım.. Dediğiniz gibi düşünelim.. 6-7 yıl geçti C nin üzerinden.. Daha fazla tartışmayayım..
 
Arkadaşlar programlama konusunda biraz daha ayrıntılı araştırma ve deney-gözlem yapmanızı tavsiye ederim.
Sadece konuya örnek olması açısından aşağıdaki kodu ekliyorum.
Hangi koşullarda döngülere girileceği yanında yazmaktadır.
Döngüleri int8 ile de denedim, int1 ile de denedim.
Ortada bir AND işlemi varsa kesinlikle her iki taraf da 1 ya da her iki taraftaki işlem sonucu olumlu olması lazımdır.


Kod:
#include <16f877.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000)
#use fast_io(b)
#use fast_io(d)
#define use_portb_lcd TRUE
#include <lcd.c>

void main()
{
   int8 x,y;
   int1 a,b;
   
   setup_psp(PSP_DISABLED);        // PSP 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_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
    setup_adc(ADC_OFF);             // ADC birimi devre dışı
    set_tris_b(0x00);   // PORTB çıkış
    set_tris_c(0xFF);   // PORTD giriş
    set_tris_d(0x00);   // PORTD çıkış
   
   lcd_init();
   printf(lcd_putc,"\f");
   lcd_gotoxy(1,1);
   printf(lcd_putc,"Started...");
   
   while(1)
   {
      x=y=0;
      if (x && y) //Döngüye girmez...
      {
         printf(lcd_putc,"\f");
         lcd_gotoxy(1,1);
         printf(lcd_putc,"x=0 y=0");
         lcd_gotoxy(1,2);
         printf(lcd_putc,"in Loop");
      }
      x=y=1;
      if (x && y) //Döngüye girer...
      {
         printf(lcd_putc,"\f");
         lcd_gotoxy(1,1);
         printf(lcd_putc,"x=1 y=1");
         lcd_gotoxy(1,2);
         printf(lcd_putc,"in Loop");
      }
      x=0;
      y=1;
      if (x && y) //Döngüye girmez...
      {
         printf(lcd_putc,"\f");
         lcd_gotoxy(1,1);
         printf(lcd_putc,"x=0 y=1");
         lcd_gotoxy(1,2);
         printf(lcd_putc,"in Loop");
      }
      x=1;
      y=0;
      if (x && y) //Döngüye girmez...
      {
         printf(lcd_putc,"\f");
         lcd_gotoxy(1,1);
         printf(lcd_putc,"x=1 y=0");
         lcd_gotoxy(1,2);
         printf(lcd_putc,"in Loop");
      }
   }
}
 
C'de ne kadar mantıksal işlemler varsa, hepsi de Sayısal Elektronik'teki kapı ya da boolean işlemleri ile birebirdir.
AND, OR, XOR işlemlerini birbirlerine çok karıştırmışsınız...
 
Şunu da söyleyeyim de, eksik kalmasın.
Aşağıdaki işlem sonucunda da döngüye girer.


Kod:
x=y=0xFF;
      if (x && y) //Döngüye girer...
      {
         printf(lcd_putc,"\f");
         lcd_gotoxy(1,1);
         printf(lcd_putc,"x=0 y=0");
         lcd_gotoxy(1,2);
         printf(lcd_putc,"in Loop");
      }
 
Şunu da söyleyeyim de, eksik kalmasın.
Aşağıdaki işlem sonucunda da döngüye girer.


Kod:
x=y=0xFF;
      if (x && y) //Döngüye girer...
      {
         printf(lcd_putc,"\f");
         lcd_gotoxy(1,1);
         printf(lcd_putc,"x=0 y=0");
         lcd_gotoxy(1,2);
         printf(lcd_putc,"in Loop");
      }

Hocam birde şunları dener misiniz rica etsem?
x=0xAA
y=0x55

x=0xAB
y=0x55
 
Her ikisinde de giriyor.

Kod:
      x=0xAA;
      y=0x55;
      if (x && y) //Döngüye girer...
      {
         printf(lcd_putc,"\f");
         lcd_gotoxy(1,1);
         printf(lcd_putc,"x=AA y=55");
         lcd_gotoxy(1,2);
         printf(lcd_putc,"in Loop");
         while(1);
      }

      x=0xAB;
      y=0x55;
      if (x && y) //Döngüye girer...
      {
         printf(lcd_putc,"\f");
         lcd_gotoxy(1,1);
         printf(lcd_putc,"x=AB y=55");
         lcd_gotoxy(1,2);
         printf(lcd_putc,"in Loop");
         while(1);
      }
 
Her ikisinde de giriyor.

Kod:
       x=0xAA;
       y=0x55;
       if (x && y) //Döngüye girer...
       {
          printf(lcd_putc,"\f");
          lcd_gotoxy(1,1);
          printf(lcd_putc,"x=AA y=55");
          lcd_gotoxy(1,2);
          printf(lcd_putc,"in Loop");
          while(1);
       }
 
       x=0xAB;
       y=0x55;
       if (x && y) //Döngüye girer...
       {
          printf(lcd_putc,"\f");
          lcd_gotoxy(1,1);
          printf(lcd_putc,"x=AB y=55");
          lcd_gotoxy(1,2);
          printf(lcd_putc,"in Loop");
          while(1);
       }

Teşekkürler.. && operatörünü & ile karıştırdım yazılarımda.. Ama yine de komutların işlenmesi için, bu sayıların denk olması gerekmiyor örneklerinize göre..
Anladığımı özetlemek gerekirse;
"if (A && B)" ifadesinde sayıların ikisi de sıfırdan farklı olması komutların işlenmesi için yeterlidir.. Denk olup olmaması önemli değil..
"if (A == 1) && (B == 1)" ifadesinde de sayıların 1 olması durumunda komutlar işlenir.. Ki input(pin_a0) komutu 1 ve 0 dışında değer döndürmüyorsa birbirleri yerine kullanılabilir..

Neyse iyi forumlar..
 
"if (A == 1) && (B == 1)" ifadesinde de sayıların 1 olması durumunda komutlar işlenir.. Ki input(pin_a0) komutu 1 ve 0 dışında değer döndürmüyorsa birbirleri yerine kullanılabilir.

A veya B gibi port karşılaştırma yerine doğrudan pin karşılaştırsanız sorun yok.
(A&&B) yaparsanız 0 dan farklı olması yeterlidir değerlerin, fonksiyon çalışır.
Bitwise işlem yapıyorsanız denk olması gerekir.
Logic işlem yapıyorsanız sıfırdan farklı olması yeterlidir.
Yararman' ın verdiği açık kod doğru ve demek istediğimi gayet net ifade ediyor.
Pin kontrolü için önerilen şekilde && kullanırsanız doğru sonuç verebilir ama o pinin ait olduğu port içinde 0 dan farklı ise olumlu ise sonuç verir.
Konunun başında ki Porta.1 ve PortA.2 H ise PortB.2 yi H yapan fonksiyon için tekrar yazdıklarımı inceleyin ve isterseniz test edin, farkı kendiniz de göreceksiniz.
 

Forum istatistikleri

Konular
128,158
Mesajlar
915,532
Kullanıcılar
449,909
Son üye
T_K

Yeni konular

Geri
Üst