PULSADORES_MATRIZ_CON_REGISTROS MACRO
TECLADO_MAT
BANKSEL COLUMNAS
MOVLW NUM_COLUMNAS ;Nº DE COLUMNAS
MOVWF COLUMNAS
MOVLW NUM_VECES
MOVWF N_VECES
TECLADO
DECFSZ N_VECES,F
GOTO STREEP
RETURN ;VUELVE_CUANDO SE ACABA EL Nº DE SALIDAS
STREEP
BSF STATUS,C
RRF COLUMNAS,F
BTFSC COLUMNAS,0
GOTO SACA_UNO
SACA_CERO
BANKSEL PORTD
BCF SR_OUT
NOP
NOP
CALL SIGUIENTE_CLOCK_OUT
GOTO COMPRUEBA
SACA_UNO
BANKSEL PORTD
BSF SR_OUT
NOP
NOP
CALL SIGUIENTE_CLOCK_OUT
GOTO COMPRUEBA
;---------------------------------
COMPRUEBA
BANKSEL N_BUTTON
MOVLW NUMERO_DE_ENTRADAS ;segun el nº de registros de desplazamiento
MOVWF N_BUTTON
DESCONTANDO_BUTTON
DECFSZ N_BUTTON,F ;VA DESCONTANDO Y TESTEANDO
GOTO MENOS_UNO ; HASTA QUE LLEGA A CERO,O
GOTO TECLADO ;QUE SALTE A LA SIGUIETE COLUMNA
MENOS_UNO
CALL RECARGA ;PONE EL DATO EN LA ENTRADA SR_IN
BTFSC SR_IN ;SI CONTINUA A CERO LA ENTRADA ESTA PULSADO Y EL PROGAMA SALTA
GOTO DESCONTANDO_BUTTON ;SI NO PASA AL SIGUIENTE BOTON
BOTON_PULSADO
CALL DEMORA_5MS ;SI FUE PULSADO HACE UNA PAUSA
CALL RECARGA ;PONE EL DATO EN LA SR_IN
BTFSC SR_IN ;Y VUELVE A COMPROBAR
GOTO DESCONTANDO_BUTTON ;SI ESTA EN ALTO HUBO REBOTE Y VUELVE PARA SEGUIR PASANDO ENTRADAS DEL CARRIL
CALL SELECCION ;ESTABA A NIVEL BAJO, SE GUARDA EN W EL VALOR DE LAS TABLAS
ESPERA_UP
CALL RECARGA
BTFSS SR_IN
GOTO ESPERA_UP ;espera a que se levante el pulsador
GOTO DESCONTANDO_BUTTON ;Y VUELVE HASTA LLEGAR A CERO QUE PASA A BUSCAR LA SIGUIENTE COLUMNA
;-----------------------------------
;SE PODRIA PONER UNA DE LAS TABLAS CON GOTOS A MENUS SUB-INTERNOS PARA HACER MODIFICACIONES
SELECCION
MOVF N_VECES,W ;SI ESTABA A 0 HACE UNA SELECCION PARA CONOCER QUE BOTON HA SIDO PULSADO
BANKSEL PCL
ADDWF PCL,F ;CON EL Nº DE COLUMNA
GOTO TABLA1
GOTO TABLA2
GOTO TABLA3
GOTO TABLA4
GOTO TABLA5
GOTO TABLA6
GOTO TABLA7
GOTO TABLA8
GOTO TABLA9
GOTO TABLA10
TABLA1
CALL SUMA_N_BUTTON ;Y CON EL Nº DE BOTON VUELVE CON UN VALOR DIFERENTE
ADDWF PCL,F ;SEGUN EN QUE TABLA
DT .1,.2,.3,.4,.5,.6,.7,.8,.9
TABLA2
CALL SUMA_N_BUTTON
ADDWF PCL,F
DT .10,.11,.12,.13,.14,.15,.16,.17
TABLA3
CALL SUMA_N_BUTTON
ADDWF PCL,F
DT .18,.19,.20,.21,.22,.23,.24,.25
TABLA4
CALL SUMA_N_BUTTON
ADDWF PCL,F
DT .26,.27,.28,.29,.30,.31,.32,.33
TABLA5
CALL SUMA_N_BUTTON
ADDWF PCL,F
DT .34,.35,.36,.37,.38,.39,.40,.41
TABLA6
CALL SUMA_N_BUTTON ;Y CON EL Nº DE BOTON VUELVE CON UN VALOR DIFERENTE
ADDWF PCL,F ;SEGUN EN QUE TABLA
DT .1,.2,.3,.4,.5,.6,.7,.8,.9
TABLA7
CALL SUMA_N_BUTTON
ADDWF PCL,F
DT .10,.11,.12,.13,.14,.15,.16,.17
TABLA8
CALL SUMA_N_BUTTON
ADDWF PCL,F
DT .18,.19,.20,.21,.22,.23,.24,.25
TABLA9
CALL SUMA_N_BUTTON
ADDWF PCL,F
DT .26,.27,.28,.29,.30,.31,.32,.33
TABLA10
CALL SUMA_N_BUTTON
ADDWF PCL,F
DT .34,.35,.36,.37,.38,.39,.40,.41
SUMA_N_BUTTON
BANKSEL N_BUTTON
MOVF N_BUTTON,W
BANKSEL PCL
RETURN
;----------------------------------
RECARGA
BANKSEL N_BUTTON
MOVF N_BUTTON,W ;INDICA EL Nº DE BOTON
MOVWF N_BUTTON_CON ;-AL QUE SE QUIERE ACCEDER
CALL LATCHIN ;-PONE LOS DATOS EN EL CARRIL SERIE
MENOS_1
BCF CLOCK_IN
NOP
NOP
NOP
NOP
BSF CLOCK_IN
NOP
NOP
DESCUENTA_3
DECFSZ N_BUTTON_CON,F ;Y DECREMENTA
GOTO MENOS_1 ;-PONIENDO UN DATO TRAS OTRO DEL CARRIL DE LOS REGISTROS EN LA SR_IN
RETURN ;HASTA QUE LLEGA A CERO
;----------------------------------
SIGUIENTE_CLOCK_OUT
BCF CLOCK_OUT
NOP
NOP
BSF CLOCK_OUT
NOP
NOP
CALL LATCHOUT
RETURN
;-----------------------------------
LATCHOUT
BSF LATCH_OUT
NOP
NOP
BCF LATCH_OUT
NOP
NOP
RETURN
;-----------------------------------
LATCHIN
BSF LATCH_IN
NOP
NOP
NOP
NOP
BCF LATCH_IN
NOP
NOP
RETURN
;-------------------------------------------------------------
; Generado con PDEL ver SP r 1.0 el 22/06/2008 Hs 13:26:24
; Descripcion: Delay 25000 ciclos
;-------------------------------------------------------------
DEMORA_5MS movlw .44 ; 1 set numero de repeticion (B)
movwf PDel0 ; 1 |
PLoop1 movlw .141 ; 1 set numero de repeticion (A)
movwf PDel1 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
;-------------------------------------------------------------
ENDM