Buton gecikme sorunum

Başlatan fatihbaysu, 17 Nisan 2014, 18:57:33

fatihbaysu

Hocam ve  İlgili Arkadaşlarım,

Benim ekteki dosya da proton da yaptığım bir çalışma mevcut, while wend komutuyla buton arkını söndürebilmekteyim ama buton kontrolü gecikmeli çalışmakta benzeri bir projenin c kodları mevcut ve süper hızlı çalışmakta önerileriniz olabilirmi. Teşekkürler

Hattuşa

slm fatih baysu arkadaşım, protonda yazdığın kodu inceledim algoritma hatası yapmışsın, gosub ile çağırdığın yerden başka yerlere atlamışsın. sanırım yapmak istediğin kod aşağıda ki gibi, değilse bile aynı mantıkla sende yapabilirsin..
isisde denedim çalışıyor

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2010 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 05.03.2010                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************


  Device = 12F675
  Config INTRC_OSC_NOCLKOUT, MCLRE_OFF, WDT_OFF, PWRTE_ON,


Xtal=4

CMCON=7
ANSEL=0


Symbol led1=GPIO.0
Symbol led2=GPIO.1
Symbol BUTON=GPIO.5
Symbol led4=GPIO.4
Symbol led3=GPIO.2
TRISIO=%00100000
GPIO=0





Symbol TIME1 = 50
Symbol TIME2 = 200
Symbol TIME3 = 600
Symbol TIME4 = 300
Symbol TIME5 = 150     
BASLA:
If BUTON =0 Then
While BUTON ==0 :Wend 
     Low led1
     Low led2
     Low led3
     Low led4
     
     GoTo DORTLU
     EndIf
GoTo BASLA


DORTLU:
  High led1
     High led2
     High led3
     High led4
     DelayMS TIME4
     Low led1
     Low led2
     Low led3
     Low led4
     DelayMS TIME4

If BUTON =0 Then
While BUTON ==0 :Wend
GoTo SINYAL
EndIf
GoTo DORTLU


SINYAL:
  High led1
     High led2
     Low led3
     Low led4
     DelayMS TIME4
     High led3
     High led4
     Low led1
     Low led2
     DelayMS TIME4

If BUTON =0 Then
While BUTON ==0 :Wend
GoTo DONER
EndIf
GoTo SINYAL

DONER:
Low led1
     Low led2
     Low led3
     Low led4 
     
     High led1
     DelayMS TIME5
     High led2
     Low led1
     DelayMS TIME5
     High led3
     Low led2
     DelayMS TIME5
     High led4
     Low led3
     DelayMS TIME5
     Low led4

If BUTON =0 Then
While BUTON ==0 :Wend   
GoTo CAKAR
EndIf
GoTo DONER

CAKAR:
High led1
     High led2
     High led3
     High led4
DelayMS TIME1
     Low led1
     Low led2
     Low led3
     Low led4
DelayMS TIME1
     High led1
     High led2
     High led3
     High led4
DelayMS TIME1
     Low led1
     Low led2
     Low led3
     Low led4
DelayMS TIME1
     High led1
     High led2
     High led3
     High led4
DelayMS TIME1
     Low led1
     Low led2
     Low led3
     Low led4
DelayMS TIME1
     High led1
     High led2
     High led3
     High led4
DelayMS TIME2
     Low led1
     Low led2
     Low led3
     Low led4
DelayMS TIME2
If BUTON =0 Then
While BUTON ==0 :Wend   
GoTo CAKAR2
EndIf
GoTo CAKAR

CAKAR2:
High led1
     High led2
DelayMS TIME1
     Low led1
     Low led2
DelayMS TIME1
     High led1
     High led2
DelayMS TIME1
     Low led1
     Low led2
DelayMS TIME1   
     High led1
     High led2
DelayMS TIME1
     Low led1
     Low led2
DelayMS TIME1
     High led1
     High led2
DelayMS TIME2
     Low led1
     Low led2
DelayMS TIME2

     High led3
     High led4
DelayMS TIME1
     Low led3
     Low led4
DelayMS TIME1
     High led3
     High led4
DelayMS TIME1
     Low led3
     Low led4
DelayMS TIME1
     High led3
     High led4
DelayMS TIME1
     Low led3
     Low led4
DelayMS TIME1
     High led3
     High led4
DelayMS TIME2
     Low led3
     Low led4
DelayMS TIME2
If BUTON =0 Then
While BUTON ==0 :Wend   
GoTo MERDANE
EndIf
GoTo CAKAR2

MERDANE:
  High led1
     High led3
     Low led2
     Low led4
     DelayMS TIME4
     High led2
     High led4
     Low led1
     Low led3
     DelayMS TIME4
     If BUTON =0 Then
While BUTON ==0 :Wend
GoTo BASLA
EndIf

GoTo MERDANE
End

'If PORTA.0=0 Then
'Toggle PORTB.0
'While PORTA.0=0
'Wend
'EndIf

fatihbaysu

pro-TR arkadaşım,

Bahsettiğin hataları yapmışım hepte endif leri unutuyorum, benim yaptığım kodu denerseniz isis de oda çalışmakta fakat butona bastığımda 4 ledin gecikmeli işleminden sonra sonraki işleme geçmekte. Zip li dosya da c ile yapılmış hex ve basit bir editörde notepad++ gibi açılan c kodu mevcut burada B0 kesmesi kullanılmış devre 16F628A olarak tasarlanmış bende 16F628A olarak da yaptım aynı kod orada da yavaş çalışıyor c ile yapılanda butona bastığınızda hızla işlemi yapabilmekte sizin gönderdiğiniz kodu derleyip simülasyonda denediğimde benimki gibi geç cevap vermekte 1 saniye kadar ama daha hızlı olabilmesi için 12F675 de kesme yapılabilir mi yada farklı bir yöntem varmıdır. Genede ilginize çok teşekkür ederim, Selamlar.
Fatih Bayşu

Hattuşa

slm fatih ustam;
12f675 te kesme elbetteki kullanılabilir zira dikkat ettinizse 5. pinde (GP.2) INT girişi var. yapmanız gereken bir kesme oluşturmak kesmenin içerisinde bir değişken atamak ve kesmeyi kapatarak ana döngüde kesmedeki değişkene göre ilgili alt rutine giderek hızlı bir değişim elde edilebilir.
şunu belirtmek isterim ki verdiğiniz c örneğini incelemedim zira c bilmiyorum onu anlayana kadar oturup yazmak bize daha kolay gelir.

Powered by EzPortal