IF komutunda iki veriyi aynı anda göstermek

Başlatan erkanert, 12 Ocak 2013, 12:21:22

erkanert

Hocam uyarı için teşekkürler.
Sorum ise İF komutunda aynı anda Portb.1 ve Portb.0 = 1 olur komutunu nasıl yazabilirim.yani

BASLA:
if Portb.1 and portb.0=1 then
goto ERKAN
else
goto BASLA
endif

Bu doğru bir kullanım mıdır.Yada doğru kullanımı nedir. Bu arada AND mi kullanılır yoksa başka kullanım şekli var mıdır. İnanın çok aradım ama derslerdede bulamadım.

ete


Kullandığın komut şekli doğru aslında. Ancak emniyetli olması açısından komutu,
IF (PORTB.1) AND (PORTB.0)=1 THEN
Şeklinde kullansan daha doğru olur.

Aynı işi bir başka şekilde de yapmak mümkün.
IF PORTB & %00000011=3 then
şeklinde de bir test satırı yazabilirsin. Aynı işi yapar.
Elbette iki pininde HIGH olma durumu AND ile test edilir. Şu pin "VE" şu pin bir ise demek için arada mutlaka And kullanmak gerekir. Şart ikisininde bir olmasıdır çünki.
Lojik karşılaştırmaları daima bir elekterik devresi gibi düşünün. Bu soruda şöyle bir devre gözünüzün önüne getirebilirsiniz.
Ortada iki anahtar var ve bir lamba var. İki anahtar da kapanır ise lamba yanacak değilse birindenbiri kapanırsa yanmayacak. Anahtarların seri bağlı olduğunu düşünürseniz elektrik bir anahtardan diğerine geçiyor ve sonunda lambaya ulaşıyorsa lambanın yanması için iki anahtarında kapalı olması gerekir.
Ete

kgguler

Ete hocam,start ve stop butonları ile start -stop uygulaması yaptım.Kendimce çok mu if komutu kullanıyorum diye düşünüyorum.Aynı işlemi başka şekilde yazabilir miyim.Butonlar normalde açık kontak,basıkldığı müddetce kontaklar kapanıyor.
     .
   BASLA:
     if porta.0=1 then CALIS
     goto BASLA
  CALIS:
     PORTB.0=1
     if PORTA.1=1 then dur
     goto BASLA
DUR:
     PORTB0.0=0
     goto BASLA   
    END

ete

#3
Bu kadar if çok değildir. Ancak bütün yazdıkların aşağıdaki iki satırlarda ifade edilebilr.

    IF PORTA.0=1 and PORTB.0=0 THEN  PORTB.0=1
    IF PORTA.1=0 AND PORTB.0=1 THEN  PORTB.0=0
    GOTO BASLA

Senin kodlarda aslında DUR işlemini yaptırmak son derece zor olacak. Zira CALIS isimli etikette PORTB.0=1 yaptıktan hemen sonra PORTA.1=1 mi diye bakyorsun ama butonun birini basarken bırakıp diğerine basmak okadar hıslı yapılamıyacağından muhtemelen program o komutu göremeden GOTO BASLA komutu ile basla satırına gidecek ve artık orada bir daha PORTA.1 kontrolü olmadığından bir daha sen PORTB.0=0 yapamayacaksın. Benim yazdığım satırlarda bu olumsuzlukta ortadan kalkmış olacaktır.

Ete

kgguler

IF PORTB & %00000001=1 then PORTB=1
IF PORTB & %00000010=2 then PORTB=0
goto BASLA

Bu prg.da aynı işlemi gerçekleştirir mi.Yazılım mantığı doğru mu acaba.Teşekkürler.

ete

#5
Neyin peşindesin anlamadım doğrusu.
Okulda veya bir başka yerde mantık okudunmu?
Okumadı isen lojik ifadeleri benim derslerden öğrenmeye çalış.
Sana verdim iki satır sen başka bir satırla karşıma geldin bu ne kadar doğru bilemiyorum.
Bak yazdıklarını irdeleyelim beraber.

IF PORTB & %00000001=1  bu satır neyi ifade ediyor. PortB.0 ile 1 sayısını AND işlemine tabi tut demek oluyor.
Şimdi PORTB.0=1 ise , 1 AND 1=1 olacağı için sonuç 1 olacak ve bu durumda zaten 1 olan bir biti sen PORTB=1 diyerek yeniden 1 yapmaya çalışmış oluyorsun. Burası yanlış.
Bu satırın başka bir şekilde aynı işi gören yazılış şekli şöyle olur. IF PORTB.0=1 then PORTB.0=1
sence bu mantıklı bir komutmudur? Zira zaten 1 olan bir biti sen 1 yapmak istiyorsun. Bari tersini yap. Yani  ,
IF POrtB.0=0 THEN PORTB.0=1 şeklinde yap. Bunu senin yazım şekline göre karşılığı;
IF PORTB & %00000001=0 then PORTB=1 böylece Şayet Portb.0=0 ise onu 1 yapmış olursun.

IF PORTB & %00000010=2 then PORTB=0  Bu satır nispeten doğru. Çünki portun ikinci biti 1 ise sen onu sıfır yapmaya çalışıyorsun.

Ama bu son yazdıkların kesinlikle ilk mesajındaki işlevi yerine getirmez.
Zira olayı buton-led ilişikisi şeklinde düşünürsek, PORTA.0 ve PORTA.1 de butonların var, Bunlardan ilki ,PORTB.0 da yer alan led'i yakıyor diğer buton ise söndürüyor. Bu mantık ilk verdiğin koda göre dir.
Şimdi bu son yazdıklarına bir bak hiç buton ile ilgili bir komut varmı. Yani PortA nın adı  bir yerde geçiyormu?
Bu kadarını düşünemiyormusun? Cevabın evet ise otur biraz daha çalış lütfen. Her şeyi karşıdan beklemeyin. Birazda kendiniz bir şeyler üretin.

Ete

Powered by EzPortal