Merhaba,
Bir kaç gündür 2 buton ile 1 led kontrol devresi yapmaya çalışıyorum henüz yeniyim sizden yardım almaya karar verdim.
Programın şöyle çalışması gerekiyor;
"BUTON" isimli butona 1 defa basıldığında "CIKIS" high olacaktır.
"BUTON2" isimli butona 2 defa basıldığında "CIKIS" high olacaktır.
Program bu kadar sonrasında her "high" durumunda mclr ucu kullanılarak resetlenecek.
Uğraştığım ve çalışmayan kodu aşağıya ekledim. Teşekkürler.
'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : [select VIEW...EDITOR OPTIONS] *
'* Notice : Copyright (c) 2017 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 23.02.2017 *
'* Version : 1.0 *
'* Notes : *
'* : *
'*********************************************************
A VAR BYTE
B VAR byte
A=0
B=0
BUTON VAR PORTA.0
BUTON2 VAR PORTA.4
CIKIS VAR PORTB.1
trisa=%00010001
trisb=%00000000
porta=0
portb=0
BASLA:
if BUTON=0 then
A=A+1
ENDIF
WHILE BUTON=0
WEND
IF BUTON2=0 THEN
B=B+1
ENDIF
WHILE BUTON2=0
WEND
if A=1 then
CIKIS=1
endif
if B=2 then
CIKIS=1
endif
GOTO BASLA
END
Tek basışta çıkışı 1 yapacak olan BUTON için ayrıca değişken saydırmak gerekmiyor.
Diğer buton için ise tek bir if döngüsü kullanmak programın sade ve anlaşılır olmasını sağlar.
if BUTON=0 then
CIKIS=1
WHILE BUTON=0:WEND
pause 100 'buraya buton titremesi ihtimaline karşılık biraz gecikme koyulması gerekir.
ENDIF
IF BUTON2=0 THEN
B=B+1
IF B=2 THEN
B=0:CIKIS=1
ENDIF
WHILE BUTON2=0:WEND
PAUSE 100
ENDIF
GOTO BASLA
diğer kodlara gerek kalmıyor artık. Onları silebilirsin.
Ete
Çok teşekkür ederim Erol Bey büyüksün :)
3. butonu ekledim ve program şu hale geldi çalışıyor.
B VAR BYTE
B=0
BUTON VAR PORTA.0
CIKIS VAR PORTB.1
BUTON2 VAR PORTA.4
BUTON3 VAR PORTA.3
trisa=%00011001
trisb=%00000000
porta=0
portb=0
BASLA:
if BUTON=1 then
CIKIS=1
WHILE BUTON=0:WEND
pause 100 'buraya buton titremesi ihtimaline karşılık biraz gecikme koyulması gerekir.
ENDIF
IF BUTON2=1 THEN
B=B+1
IF B=2 THEN
B=0:CIKIS=1
ENDIF
WHILE BUTON2=0:WEND
PAUSE 100
ENDIF
IF BUTON3=1 THEN
B=B+1
IF B=3 THEN
B=0:CIKIS=1
ENDIF
WHILE BUTON3=0:WEND
PAUSE 100
ENDIF
GOTO BASLA
END
Program isiste çalıştı ancak breadbaord da çalışmadı.
Sorun şu;
1 numaralı butona 1 defa basınca led yanmıyor. Diğer butonlar sorunsuz çalışıyor.
CMCON=7
DEFINE OSC 4
B VAR BYTE
B=0
BUTON VAR PORTB.0
BUTON2 VAR PORTB.1
BUTON3 VAR PORTB.2
CIKIS VAR PORTA.0
trisa=%00000000
trisb=%11111111
porta=0
portb=0
BASLA:
if BUTON=1 THEN
CIKIS=1
WHILE BUTON=0:WEND
PAUSE 100 'buton titremesi ihtimaline karşılık biraz gecikme koyulması gerekir.
ENDIF
IF BUTON2=1 THEN
B=B+1
IF B=2 THEN
B=0:CIKIS=1
ENDIF
WHILE BUTON2=0:WEND
PAUSE 100
ENDIF
IF BUTON3=1 THEN
B=B+1
IF B=3 THEN
B=0:CIKIS=1
ENDIF
WHILE BUTON3=0:WEND
PAUSE 100
ENDIF
GOTO BASLA
END
B portundaki butonları 1 bit ileri kaydırdım sorun düzeldi.
BUTON VAR PORTB.1
BUTON2 VAR PORTB.2
BUTON3 VAR PORTB.3