Pic Basic Pro ile 2 değişkene göre IF THEN yapamama sorun

Başlatan umberto, 03 Nisan 2009, 01:16:39

umberto

Selamlar

16F628A ile , iki sensorden gelen bilgileri kontrol edip , bu kontrole göre yazılımın bazı etiketlere gitmesini istiyorum. Fakat her seferinde ilk IF'i kontrol edip digerlerini kontrol etmiyor. Bu mantığın doğru çalışması için ne yapabilirim ?

define OSC 20
INCLUDE "MODEDEFS.BAS"


main:
if porta.0 = 0 and porta.1 = 0 then
goto etiket1
endif
if porta.0 = 0 and porta.1 = 1 then
goto etiket2
endif
if porta.0 = 1 and porta.1 = 0 then
goto etiket3
endif
if porta.0 = 1 and porta.1 = 0 then
goto main
endif
end

ete

Hemen belirteyim en sondaki if şartın yanlış. Orada "11" şartı olması gerek.
Aslında bu son şartı test etmeyede gerek yok. Çünki başak alternatif olmadığı için program iki pinin 11 olması durumunda 4. şartın olduğu noktaya zaten gelecek ve oraya direk Goto Main yazmak yeterli olacaktır.

1. if şartı "00" konumunu test ediyor ve yakalarsa Etiket1 etiketine gidiyor.
2. if şartı "01" konumunu test ediyor ve yakalarsa Etiket2 etiketine gidiyor.
3. İf şartı "10"konumunu test ediyor ve yakalarsa Etiket3 etiketine gidiyor.
4. İf şartı "11"konumunu test etmesi gerekiyor. Çünki "10" konumu 3. madde de zaten test edildi.

Programda bir hata şöyle yok. Hata A portunda beklenen şartların yerine gelmemesidir mutlaka. Her seferinde ilgili port pinleri "00" oluyor ise program ne yapsın. Bu basit program parçasını Isıs de dene çalıştığını göreceksin.
Bu arada ilgili pinlerin giriş olarak ayarlanmış olmalarını unutmamışsındır umarım. Pinlerin gerekirse LOW ve gerekirse HIGH olmalarını sağlamayıda unutmamışsındır umarım.

Aşağıda verdiğim programı deneme amaçlı olarak isisde çalıştırdım ve çalıştığını gördüm.
PORTA.0 ve A.1 pinlerine birer Logicstate bağladım (1 ve sıfır yapmak için)
PORTB.0-B.3 pinlerine de LogicProbe bağladım olayı görmek için.
Sende yap dene istersen.

Ete
@ DEVICE pic16F628                      'işlemci 16F628                                
@ DEVICE pic16F628, WDT_ON              'Watch Dog timer açık
@ DEVICE pic16F628, PWRT_ON             'Power on timer açık
@ DEVICE pic16F628, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE pic16F628, MCLR_off            'MCLR pini kullanılMIYOR.
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak 
'-------------------------------------------------------------------------------
CMCON=7  
'-------------------------------------------------------------------------------
porta=0
portb=0
TrisA=%00000011
Trisb=0

main:
if porta.0 = 0 and porta.1 = 0 then
goto etiket1
endif
if porta.0 = 0 and porta.1 = 1 then
goto etiket2
endif
if porta.0 = 1 and porta.1 = 0 then
goto etiket3
endif

Goto Main ' 11 olma durumu


Etiket1:
Toggle Portb.0
pause 100
goto main

Etiket2:
Toggle PORTB.1
pause 100
Goto main

Etiket3:
Toggle Portb.2
Pause 100
goto main

end  
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com