PIC Asm BUTON ile Led Yakma Hakkında

Başlatan ds01, 21 Kasım 2015, 15:13:49

ds01

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

RaMu

#1
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
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

ds01

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