butona bir kaç kez basınca

Başlatan onurinci, 12 Aralık 2022, 03:06:00

onurinci

Hocam selam , bir arkadaşımın oğluna lazım olmuş butona 5 kez basınca LED yanacak devam eder sayı 10 olunca LED'i söndürecek başa dönecek. başa dönsün diye SAY=0 veriyorum herşey duruyor.mecburen If SAY= 11 Then SAY=0 ekleyerek durumu çözdüm fakat aslının bu olmadığını hissediyorum.nerede hata yapıyorum acaba ?
#CONFIG
 __CONFIG _INTRC_OSC_NOCLKOUT & _WDT_OFF & _MCLRE_OFF &_PWRTE_ON & _CP_OFF & _LVP_OFF & _BODEN_OFF 
#ENDCONFIG

REM 16F628A
DEFINE OSC 4

CMCON     = 7          ' PortA = digital I/O
VRCON     = 0          ' A/D Voltage reference disabled
		

OPTION_REG.7= 0
TRISB= %00000001 : PORTB= 0
 
Symbol B1= PORTB.0
Symbol BUZZER = PORTB.3
Symbol LED = PORTB.7
SAY    VAR Byte
SAy=0

Start:
 		           ;Butona basildi mi?
 If B1=0 Then SAYMA_GIT
   GoTo Start

SAYMA_GIT:
 If B1= 0 Then SAYMA_GIT 	; Butonun birakilmasini bekle
      Call BEEP 			; Buton birakildi buzzer cal
SAY= SAY+1 				    ; say adli kaydediciyi 1 arttir
 If SAY= 5 Then LED= 1 	    ; 5 olmussa ledi yak 
 If SAY= 10 Then LED= 0     ; 10 olmussa ledi sondur say=0
 If SAY= 11 Then SAY=0
 	                  
	GoTo Start 			;basa dön

BEEP:
BUZZER= 1 : PAUSE 100
BUZZER= 0 : PAUSE 100 	     ;buzzer cal

      Return

ete

#1
Doğru kod aşağıdaki gibi olmalı.
SAY değişkeni 11 iken değil 10 iken sıfırlanmalı. Böylece saydığın zaman hep 5 de led yanar 10 da led söner. 11 de say'ı sıfırlarsan her zaman bir sonraki turda bir fazla saydırman gerekir.
Birde işlemler bittikten sonra tuşun bırakıldığını kontrol edersen daha güzel böylece programın yada tuşun bir şeyler yaptığını led veya buzzerden anlayabilirsin.
BASLA:
      
     IF But=0 THEN
       GOSUB BEEP
       SAY=SAY+1
       IF SAY=5 THEN LED=1
       IF SAY=10 THEN
         LED=0:SAY=0
       ENDIF

       WHILE But=0:WEND
       PAUSE 100                  
     ENDIF  
       GoTo BASLA             ;basa dön
     
    BEEP:
    BUZZER= 1 : PAUSE 100
    BUZZER= 0 : PAUSE 100   
    RETURN

BASLA satırından evvel 300 ms lik gecikmeyi mutlaka koymalısın.
Bu işlemci iç registerlerinin açılışta yerli yerine oturması için gerekli olan süredir.
Koymaz isen herhangi bir değişken rastgele bir değer alarak çalışmaya başlayabilir.

CALL bir asm komutudur. Basic içinde kullanılmasına derleyici itiraz etmiyor ama sen yinede doğrusu olan GOSUB kullan
Tek bir yerde tuş kontrolü olması yeterli program uzun değil çünki. O nedenle teke düşürdüm.

Ete

onurinci

hocam çok teşekkür ederim....

Powered by EzPortal