martes, 26 de abril de 2011

Manejo de teclado ASM

;programa de teclado

LIST    P=16F877A
INCLUDE    "P16F877A.INC"

CUENTA        EQU    20H
ANTERIOR    EQU    21H
VALOR        EQU    22H
VALOR1        EQU    23H

    BANKSEL        TRISA
    MOVLW        0F0H
    MOVWF        TRISB
    CLRF        TRISC
    BCF            OPTION_REG,7
    BANKSEL        PORTC
    CLRF        PORTC
INICIO:
    CLRF    CUENTA
    CALL    BARRIDO
    MOVLW    .16
    XORWF    CUENTA,0
    BTFSC    STATUS,Z
    GOTO    INICIO
    MOVF    CUENTA,0
    CALL    TECLA
    MOVWF    PORTC
    GOTO    INICIO

BARRIDO:
    MOVLW    B'11110111'
REGRESO:
    MOVWF    PORTB
    BTFSS    PORTB,7
    GOTO    FIN_PULSO
    INCF    CUENTA,1
    BTFSS    PORTB,6
    GOTO    FIN_PULSO
    INCF    CUENTA,1
    BTFSS    PORTB,5
    GOTO    FIN_PULSO
    INCF    CUENTA,1
    BTFSS    PORTB,4
    GOTO    FIN_PULSO
    INCF    CUENTA,1
    MOVLW    .16
    XORWF    CUENTA,0   
    BTFSC    STATUS,Z
    RETURN
    BSF        STATUS,C
    RRF        PORTB,0
    GOTO    REGRESO

FIN_PULSO:
    MOVF    PORTB,0
    MOVWF    ANTERIOR
VOLVER:
    MOVF    PORTB,0
    XORWF    ANTERIOR,0
    BTFSS    STATUS,Z
    RETURN
    CALL    RETARDO
    GOTO    VOLVER

RETARDO:
    MOVLW    .20
    MOVWF    VALOR
SALTO1:
    MOVLW    .249
    MOVWF    VALOR1
SALTO:
    NOP
    DECFSZ    VALOR1,1
    GOTO    SALTO
    DECFSZ    VALOR,1
    GOTO    SALTO1
    RETURN

TECLA:
    ADDWF    PCL,1
    DT        .7,.8,.9,0AH
    DT        .4,.5,.6,0BH
     DT        .1,.2,.3,0CH
    DT        0FH,.0,0EH,0DH


    END




       


   
   
       

No hay comentarios:

Publicar un comentario