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

  • Konbuyu başlatan abdullahylmaz
  • Başlangıç tarihi
Katılım
12 Mar 2012
Mesajlar
21
Puanları
1
PİC C de çok yeniyim ve kendimi geliştirmeye çalışıyorum. Bu noktada ufak bir yardıma ihtiyacım var. Örneğin;

if(input(PIN_A0)==1)
output_low(PIN_B0);
else
output_high(PIN_B0);

if(input(PIN_A1)==1)
output_low(PIN_B1);
else
output_high(PIN_B1);

komutuna hangi komut eklenirse A0 ve A1 aktif olursa B2 nolu pin'i aktif etsin ?
 

ULAGA

Üye
Katılım
9 Ocak 2012
Mesajlar
592
Puanları
3
VE (AND) İşlemi = if (A==1 && B==1)

VEYA (OR) İşlemi = if (A==1 || B==1)
 
Katılım
20 Mar 2009
Mesajlar
75
Puanları
3
Yaş
30
abdullah hocam yada a portunu okuyup 2 ile andleyebilirsiniz.

if((input(a))&(0x02)) gibi koşul bu iki bacak 1 olduğunda doğru olacaktır.

Not:kodların kullanımından tam emin değilim
 

perçin

Üye
Katılım
17 Ağu 2009
Mesajlar
26
Puanları
3
Yaş
54
Konum
ANKARA_OSTİM
//----16F84----
#fuses XT, NOPUT, NOPROTECT, NOWDT
#use delay(clock=4000000)


void main()
{
for(;;)
{
if(input(PIN_A0)==1)
output_low(PIN_B0);
else
output_high(PIN_B0);

if(input(PIN_A1)==1)
output_low(PIN_B1);
else
output_high(PIN_B1);

if(input(PIN_A0)==1&&input(PIN_A1)==1)
output_high(PIN_B2);
else
output_low(PIN_B2);
}

}
/* sana tavsiyem hazır çalışan cod lar üzerinde değişiklik yaparak alıştırma yapman .onları boz yeniden yaz değiştir...ama isis de dene .sonra gerçekleştir.
 

katana

Üye
Katılım
25 Ara 2006
Mesajlar
593
Puanları
8
VE (AND) İşlemi = if (A==1 && B==1)

VEYA (OR) İşlemi = if (A==1 || B==1)

PortA=0x07 olursa, işlem sonucu ne olur?

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

Ya da kısaca:

VE (AND) İşlemi = if (A && B)

VEYA (OR) İşlemi = if (A || B)


A=0x02 ve B=0x02 olursa;
if (A && B)
ile
if (A==1 && B==1)
aynı fonksiyonu icra eder mi?

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

abdullah hocam yada a portunu okuyup 2 ile andleyebilirsiniz.
if((input(a))&(0x02)) gibi koşul bu iki bacak 1 olduğunda doğru olacaktır.

Not:kodların kullanımından tam emin değilim


Bu durumda da PortA.2= H olduğunda sonuç işler gibi görüyorum.

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

@ abdullahylmaz,
C de bitwise AND ve logic AND konusuna baktınız mı?

Aklımda ki 1. yol:

if (A&0x03) B|=0X02


Aklımda ki 2. yol:

if ((A&0x01) && (A&0x02)) B|=0X02
 
Son düzenleme:

tyildizak

Paylaşımcı üye
Katılım
17 Ağu 2007
Mesajlar
1,648
Puanları
121
Konum
İstanbul
A=0x02 ve B=0x02 olursa;
if (A && B)
ile
if (A==1 && B==1)
aynı fonksiyonu icra eder mi?


A ve B 0'dan farklı olduğu sürece if koşulu sağlanmış olur.

Yukarıdaki örnek pin kontrolü ile ilgili ve daha kısa yazım içindi, 1 bit üzerindeki değişkenler için ise tabii ki aynı şey değil.
 
Son düzenleme:

GüvTek

Üye
Katılım
7 Mar 2012
Mesajlar
190
Puanları
3
Yaş
31
if ten sonraki parantezin içi 1 olduğunda altındaki komutlar işlenir..

Yani A==1 && B==1 dendiğinde; önce Anın sonra B nin 1 olduğunu kontrol eder.. İkisi de 1 ise; ve kapısından geçirir ve sonuç 1 olur.. Bunun yerine A && B yazarsanız, bu durumda da A ile B yi ve kapısından geçirir, ikisi de 1 ise komutlar işlenir.. Bu örnekte sonuç aynıdır..

Tek fark A==0 && B==1 gibi bir karşılaştırma için A && B yi kullanamazsınız.. Ee tabi bir de asm diline çevrildiğinde A && B daha hızlı işleyecektir kanımca..
 

katana

Üye
Katılım
25 Ara 2006
Mesajlar
593
Puanları
8
A ve B 0'dan farklı olduğu sürece if koşulu sağlanmış olur.

Yukarıdaki örnek pin kontrolü ile ilgili ve daha kısa yazım içindi, 1 bit üzerindeki değişkenler için ise tabii ki aynı şey değil.

if (A && B):
A ve B, 0 dan farklı ve birbirine denk olduğu sürece fonksiyon işler.

if (A==1 && B==1):
A 1 ve B 1 olduğunda fonksiyon işler ve birbirlerinin yerine kullanılamazlar.
Sadece bit bazlı değil, lojik kontrol olarak ta farklı sonuçlar doğururlar.

if ten sonraki parantezin içi 1 olduğunda altındaki komutlar işlenir..

Yani A==1 && B==1 dendiğinde; önce Anın sonra B nin 1 olduğunu kontrol eder.. İkisi de 1 ise; ve kapısından geçirir ve sonuç 1 olur.. Bunun yerine A && B yazarsanız, bu durumda da A ile B yi ve kapısından geçirir, ikisi de 1 ise komutlar işlenir.. Bu örnekte sonuç aynıdır..

tyildizak hocama cevaben yazdığım mesaj, size de vereceğim cevaptır. Sizin aksinize, bu örnek için dahi aynı olmadığını düşünüyorum.
 

Benzer Konular

Forum istatistikleri

Konular
114,954
Mesajlar
809,286
Kullanıcılar
420,463
Son üye
Umido

Yeni konular

Üst