2 buton ile 1 led kontrol etmek.

Başlatan sint0, 03 Mart 2017, 01:50:59

sint0

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

ete

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
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

sint0

#2
Ç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



sint0

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

sint0

B portundaki butonları 1 bit ileri kaydırdım sorun düzeldi.

BUTON VAR PORTB.1
BUTON2 VAR PORTB.2
BUTON3 VAR PORTB.3