Port Sorgulatma

Başlatan tergek, 16 Ocak 2015, 23:23:54

tergek

Merhaba,
Üzerinde çok araştırdım, bildiğim ölçüde denemediğim kalmadı.

[IMG]http://i58.tinypic.com/20znsed.jpg[/img]
D5 ledini SAĞ tuşu ile,  D4 ledini SOL tuşu ile pic basic ile kontrol ediyorum.
Bir TUŞ diğerini södürüyor. Aynı anda ikisi yanmıyor.

Ve ASIL uğraşım sorum DUR tuşu ile o sırada hangisi açık ise kapatıp, tekrar bastığımda açacak (toggle), bu DUR tuşuna o sırada hangi LEDin açık olduğunu nasıl sorgulatacağım?

Teşekkürler...



Hattuşa

slm. kodları da ekleseydiniz size yardımcı olurduk, yani biz senin mantığından farklı bir algoritma kullanıp kafanı karıştırmak istemeyiz.

tergek

#2


ABC:
        if DURTUSU=0 AND LEDSOL=1 then
            TOGGLE LEDSOL
        endif
       
         if DURTUSU=0 AND LEDSAG=1 then
            TOGGLE LEDSAG
        endif
return

LED:
IF SAGTUS=0 AND DURTUSU=1 THEN
        LEDSAG=0:PAUSE 300:LEDSOL=1             
ENDIF

IF SOLTUS=0 AND DURTUSU=1 THEN
        LEDSOL=0:PAUSE 300:LEDSAG=1             
ENDIF



gosub ABC

goto LED


MERHABA, Ancak DURTUSU ile sadece hangisi yanıyorsa onu sorgulatarak sondurebiliyorum ancak en son yananı tekrar yakmak için İF ile neyi şart koşmam lazım ?


Burak

#3
Umarım istediğin böyle bişidir .

Burak.

Ω Gens Una Sumus Ω

Hattuşa

bende bir kod yazmıştım ama arkadaş cvp yazmış, bende boşuna uğraşmış olmayayım ekleyeyim belki işine yarar

tergek

Alıntı yapılan: Burak GÜNAY - 17 Ocak 2015, 01:29:13
Umarım istediğin böyle bişidir .

Tam olarak istediğim buydu ne fazlası ne eksiği teşekkür ederim. Ellerinize sağlık.

Alıntı yapılan: pro-TR - 17 Ocak 2015, 01:30:33
bende bir kod yazmıştım ama arkadaş cvp yazmış, bende boşuna uğraşmış olmayayım ekleyeyim belki işine yarar

Teşekkür ederim düşündüğünüz için elinize sağlık...

Burak

Alıntı yapılan: tergek - 17 Ocak 2015, 19:29:48
Tam olarak istediğim buydu ne fazlası ne eksiği teşekkür ederim. Ellerinize sağlık.

Rica ederim .

Burak.
Ω Gens Una Sumus Ω

ete

#7
Diğer forumda aynı soru sorulmuş ve orada cevaplamış idim.
Aynı cevabı burada da yayınlıyorum.
@ __config _XT_OSC & _WDT_ON & _CP_OFF
define osc 4
porta=0
TRISA=%00001110
PORTB=0
TRISB=%00000000

ESKI VAR BYTE
YENI VAR BYTE
SYMBOL SAG=PORTA.1
SYMBOL SOL=PORTA.2
SYMBOL DUR=PORTA.3
SYMBOL LEDSAG=PORTB.3
SYMBOL LEDSOL=PORTB.4

pause 200


basla:
      IF SAG=0 THEN
        LEDSOL=0
        LEDSAG=1
        ESKI=PORTB     ' &00001000
        WHILE SAG=0:WEND
        PAUSE 50
      ENDIF
     
      IF SOL=0 THEN
        LEDSAG=0
        LEDSOL=1
        ESKI=PORTB
        WHILE SOL=0:WEND
        PAUSE 50
      ENDIF
     
      IF DUR=0 THEN
        YENI=PORTB ^ ESKI
        PORTB=YENI
        WHILE DUR=0:WEND
        PAUSE 50
      ENDIF
     
      GOTO BASLA

TOGGLE denilince aklıma hemen XOR operatörü gelir. "^" işareti de bit bazında XOR işlemi yaptıran lojik operatördür.
YENI=PORTB ^ ESKI komutunda ESKI değeri yalnızca SAG yada SOL tuşlarından birine basılırsa değişmektedir. Bu durumda sonucu etkilemeden DUR tuşu ancak PORT'u XOR yaparak değiştirebilir diye düşünmüştüm. Zira ESKI değişmeyeceğine göre aktif olan bitleri XOR bir açar bir kapatır.
PORTB=%00001000 iken led yanıyor durumdadır. Bu zaten ESKI adlı değişken değerine eşittir. Bunu PORTB=PORTB XOR ESKI yaparsak yani,
PORTB=%00001000 XOR %00001000 olunca otomatikman aktif olan bit sıfırlanacaktır. Bu işlemi tekrar yaparsan bu sefer ;
PORTB=%00000000 XOR %00001000 yapılacağı için led biti otomatikman set edilmiş olacaktır.

Ete

Burak

Bu daha akilci ve guzel geldi bana hocam , tesekkurler.

Burak
Ω Gens Una Sumus Ω

Powered by EzPortal