Pic Basic Kodları yardım

Başlatan desirezero, 05 Nisan 2013, 21:16:00

desirezero

Merhabalar bir proje üstünde uğraşıyorum takıldığım bir nokta var bu konuda yardımcı olursanız sevinirim.

Aşagıdaki program butona her basıldığında bulunan 3 ledi sırası ile yakıp söndürmektedir. Benim sorunum örneğin 1. led yanıp söndü, butona 60 sn basılmadığında tekrar başa döndürmem gerekiyor. farklı şekilde anlatacak olursam.

örn : butona 1 defa basıldığında 1.led yanıp söndü,
butona 2.defa basıldığında 2. led yanıp söndü,
butona 60 sn basılmadı, 60 sn sonunda butona tekrar basıldığında başa dönecek.(0 ile 60 sn arasında butona basarsam 3. led yanıp sönecek.)

Teşekkür ederim..



Alıntı Yap

'************************************************* ***************
' PIC16F84A

TRISA=%01000
TRISB=%00000000
PortB=0
PortA=0

x var byte
y var byte
buton var PORTA.1
x=0
'************************************************* ***************
BASLA:
if buton=1 then
x=x+1
endif
if x>3 then
x=0
endif
'************************************************* ***************

if x=1 then
HIGH PORTB.1
while buton=1
PAUSE 300
wend
LOW PORTB.1
pause 10
endif

'************************************************* ***************
if x=2 then
HIGH PORTB.2
while buton=1
PAUSE 300
wend
LOW PORTB.2
pause 10
endif

'************************************************* ***************
if x=3 then
HIGH PORTB.3
while buton=1
PAUSE 300
wend
LOW PORTB.3
pause 10
endif

'************************************************* ***************
GOTO basla

z

#1
Sorunda bazı belirsizlikler var. 4 kez basılınca ne olacak gibi.
Yada adam parmağını butona basar ve hiç çekmezse gibi.
Bu dili kullanmıyorum ama mantığım böyle yazdırdı.

' PIC16F84A 

TRISA=1 
TRISB=0 
PortB=0 

S var byte 
M var byte 
L var byte 

BUTON VAR PORTA.1 

S=60
M=10
L=1;
PORTB=0

'*************************************************************** 

L1:     
GOSUB YUZMS
IF BUTON=0 THEN GOTO L1 
PORTB=L                        ' Butun pinlerden böyle mi çıkış yapılıyor?
L=L*2;
M=10;
REM S=60;                      ' Butona basıldığı anda zamanı baslatır. Burada olursa farklı
IF L=8 THEN L=1             ' 4. basışta başa doner
REM IF L=8 THEN L=4      ' 4. basışta hala 3. aşamada kalır. Hangisi işine gelirse

H1:     
S=60                              ' Butondan parmak çekilince zamanı başlatır. Nasıl işine gelirse oraya koyarsın
GOSUB YUZMS
IF BUTON=1 THEN GOTO H1 
Goto L1

YUZMS:  

PAUSE 100                      ' 100 mili saniye bekle
M=M-1
IF M<>0 THEN RETURN 
M=10;
S=S-1
PORTB=0
IF S<>0 then RETURN
L=1
S=60
RETURN
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

desirezero

Alıntı yapılan: z - 05 Nisan 2013, 23:15:32
Sorunda bazı belirsizlikler var. 4 kez basılınca ne olacak gibi.
Yada adam parmağını butona basar ve hiç çekmezse gibi.
Bu dili kullanmıyorum ama mantığım böyle yazdırdı.



evet haklısınız yazdığım programda kullanıcı tuşa basılı tuttuğunda herhangi bir işlem yapmıyor bunuda while ... wend konumutu ile sağlıyorum. en sondaki goto basla komutu ile de program başa alıyor yani 3. kez basıldıktan sonra program başa dönüyor. Sizin yazdığınız programda ise eksiklikler var tam çözemedim  :-\

F.T

#3
Timer kesmesi kullanip 60sn lik timer butona ilk basisinda saymaya baslicak60sn icinde uc ledide yakarsin.60sn bitince olayi resetleyip basa donersin.
Hakk şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

desirezero

Alıntı yapılan: F.T - 06 Nisan 2013, 16:49:39
Timer kesmesi kullanip 60sn lik timer butona ilk basisinda saymaya baslicak60sn icinde uc ledide yakarsin.60sn bitince olayi resetleyip basa donersin.

timer kesmesini tam olarak nasıl kullanacağım ?

erdogan2734

  Örneğin
X=0 dan sonra bir menü açarsın.
Basla programının içindeki gecikmeyi hesaplarsın. Örneğin Oradaki gecikmelerin tümü 300ms dir.
Baslanın altına x değişkeni gibi bir sayac koyarsın ve bu sayac yine örneğin 60 saniye sonra açtıgın menüye gider ve x=0 yapar oradan tekrar basla menüsüne geçer.




x var byte
y var byte
buton var PORTA.1
x=0
goto basla
Buraya bir menü.
Örneğin SIFIRLA:
x=0
goto basla

'************************************************* ***************
BASLA:

say:
y=y+1
if y=? burayı hesapla then goto SIFIRLA


if buton=1 then
x=x+1
endif
if x>3 then
x=0
endif
'************************************************* ***************

if x=1 then
HIGH PORTB.1
while buton=1
PAUSE 300
wend
LOW PORTB.1
pause 10
endif

'************************************************* ***************
if x=2 then
HIGH PORTB.2
while buton=1
PAUSE 300
wend
LOW PORTB.2
pause 10
endif

'************************************************* ***************
if x=3 then
HIGH PORTB.3
while buton=1
PAUSE 300
wend
LOW PORTB.3
pause 10
endif

'************************************************* ***************
GOTO basla



Ben balık tutmayı öğrettim :)
Bildiğim tek şey henüz hiç bir şey bilmediğim...

desirezero

#6
Alıntı yapılan: erdogan2734 - 07 Nisan 2013, 01:01:11
  Örneğin
X=0 dan sonra bir menü açarsın.
Basla programının içindeki gecikmeyi hesaplarsın. Örneğin Oradaki gecikmelerin tümü 300ms dir.
Baslanın altına x değişkeni gibi bir sayac koyarsın ve bu sayac yine örneğin 60 saniye sonra açtıgın menüye gider ve x=0 yapar oradan tekrar basla menüsüne geçer.




x var byte
y var byte
buton var PORTA.1
x=0
goto basla
Buraya bir menü.
Örneğin SIFIRLA:
x=0
goto basla

'************************************************* ***************
BASLA:

say:
y=y+1
if y=? burayı hesapla then goto SIFIRLA


if buton=1 then
x=x+1
endif
if x>3 then
x=0
endif
'************************************************* ***************

if x=1 then
HIGH PORTB.1
while buton=1
PAUSE 300
wend
LOW PORTB.1
pause 10
endif

'************************************************* ***************
if x=2 then
HIGH PORTB.2
while buton=1
PAUSE 300
wend
LOW PORTB.2
pause 10
endif

'************************************************* ***************
if x=3 then
HIGH PORTB.3
while buton=1
PAUSE 300
wend
LOW PORTB.3
pause 10
endif

'************************************************* ***************
GOTO basla



Ben balık tutmayı öğrettim :)

Zamanınızı ayırıp cevap yazdığınız için teşekkür ederim. AMA y ' nin olduğu yere öneğin 200 yazıyorum bazen 3 sn de başa dönüyo bazen 7 yani kararsız çalışıyor, zamanlayıcı gibi çalışmıyor..

erdogan2734

   Çalışması lazım gecikmelerde hata yapıyır olabilirsin birdaha bak istersen...
Bildiğim tek şey henüz hiç bir şey bilmediğim...

desirezero