Aşağıda bulunan kod şu işi yapıyor.
PORTA nın 0.bitine bağlı butona bir kere basılırsa portb ye bağlı ledler yanıyor tekrar basılırsa ledler sönüyor(XOR işlemine tabi tutuluyor).Program güzel işliyor fakat atlama sorunu yapıyor.Bunu çözmek için aşağıdaki gibi bir bekleme döngüsü yapmaya çalıştım.Bekleme süresini azalttığımda ledlerin bazıları yanıyor bazıları yanmıyor.Bekleme süresini uzattığımda hiç yanmıyor.Yani bekletme tam işlemiyor.Hatam nerede var bulamadım.
SAYAC1 EQU 0x21
SAYAC2 EQU 0x22
GOTO AYAR
GECIKME
MOVLW 0xFF
MOVWF SAYAC1
DONGU1
MOVLW 0xFF
MOVWF SAYAC2
DONGU2
DECFSZ SAYAC2,1
GOTO DONGU2
DECFSZ SAYAC1,1
GOTO DONGU1
RETURN
KODLAR:
#include "p16f877.inc"
org 0x00
SAYAC1 EQU 0x21
SAYAC2 EQU 0x22
GOTO AYAR
GECIKME
MOVLW 0xFF
MOVWF SAYAC1
DONGU1
MOVLW 0xFF
MOVWF SAYAC2
DONGU2
DECFSZ SAYAC2,1
GOTO DONGU2
DECFSZ SAYAC1,1
GOTO DONGU1
RETURN
AYAR
CLRF PORTB
CLRF PORTA
BSF STATUS,RP0
MOVLW 0x06
MOVWF ADCON1
MOVLW 0xFF
MOVWF TRISA
CLRF TRISB
BCF STATUS,RP0
GOTO ANA_PROGRAM
ANA_PROGRAM
BTFSS PORTA,0
GOTO ANA_PROGRAM
;CALL GECIKME ; gecikme burada çağrılıyor
XORLW 0xFF
XORWF PORTB,1
GOTO ANA_PROGRAM
END
Problemin adı:
Button debounce - buton arkı.
Nette ve forumda detaylı açıklama var.
mesaj birleştirme:: 21 Kasım 2015, 19:17:08
Bir konu daha var,
butonun bırakıldığını kontrol etmiyorsun,
-buton bir defa basılıp bırakıldı-
şartı sağlandıktan sonra işlem yaparsan garanti olur.
mesaj birleştirme:: 21 Kasım 2015, 19:34:30
ANA_PROGRAM
.
.
.
XORLW 0xFF
XORWF PORTB,1
GOTO ANA_PROGRAM
END
XORLW 0xFF
yerine
MOVLW 0xFF
Alıntı yapılan: RaMu - 21 Kasım 2015, 19:15:00
Bir konu daha var,
butonun bırakıldığını kontrol etmiyorsun,
-buton bir defa basılıp bırakıldı-
şartı sağlandıktan sonra işlem yaparsan garanti olur.
@RaMu hocam çok teşekkür ederim hatam dediğiniz gibi XORLW denmiş.Sayenizde bekletme süresi koymadan yapmayı da öğrenmiş oldum led yakma söndürme işini.
Düzeltilmiş kod aşağıdaki şekilde;
#include "p16f877.inc"
org 0x00
SAYAC1 EQU 0x21
SAYAC2 EQU 0x22
GOTO AYAR
AYAR
CLRF PORTB
CLRF PORTA
BSF STATUS,RP0
MOVLW 0x06
MOVWF ADCON1
MOVLW 0xFF
MOVWF TRISA
CLRF TRISB
BCF STATUS,RP0
GOTO ANA_PROGRAM
ANA_PROGRAM
BTFSS PORTA,0
GOTO ANA_PROGRAM
ANA2
BTFSC PORTA,0
GOTO ANA2
MOVLW 0xFF
XORWF PORTB,1
GOTO ANA_PROGRAM
END