LIST P=16F628A
#include <p16F628a.inc>
__CONFIG 3F10
CONT EQU 0X21
INDICE EQU 0X22
FLAG EQU 0x23
ORG 0X00
GOTO INICIO
ORG 0X04
GOTO INTERRUPT
TABLA
ADDWF PCL, F
RETLW b'01111110' ; Este dato va a ser tomado con W = 0
RETLW b'00001100' ; W = 1
RETLW 2
RETLW 3
RETLW 4
RETLW 5
RETLW 6
RETLW 7
RETLW 8
RETLW 9
INTERRUPT
; Aca pongo el codigo de entrada de la interrupcion
; Buscar el codigo en el datasheet
BTFSC INTCON,T0IF
CALL TMR0_INT
; Aca va el codigo de salida de la interrupcion
; Se encuentra en el mismo lugar que el de entrada
RETFIE
; Subrutina de interrupcion de Timer y envio al puerto
TMR0_INT
BCF INTCON, T0IF ; Limpio Flag
BTFSS FLAG, 0 ; Esta activo el contador?
RETURN
DECFSZ CONT, F
RETURN
MOVLW d'100' ; Reestablesco el contador, 100 * 10ms = 1000ms = 1s
MOVWF CONT
MOVF INDICE, W ; Cargo el numero de indice que quiero obtener de la tabla
CALL TABLA ; Llamo la tabla, el resultado queda en W
MOVWF PORTB ; Pongo los datos en el PORTB
INCF INDICE, F ; Incremento para el proxima ves que pase 1 segundo
MOVWF INDICE, W ; Reviso si llego al maximo
XORLW 0xA ; En este ejemplo son solo 10 datos
BTFSC STATUS, Z ; Si lo hace 0, es que el valor era 0xA
CLRF INDICE, F ; Limpio Indice en caso que sea 0xA
RETURN
INICIO
; Inicio de configuracion dr modulos
BANKSEL TRISB ; Bank 1
MOVLW 0x1
MOVWF TRISB ; RB0 como entrada
BANKSEL PORTB ; Bank 0
; Aca configurar el Timer
; Set de valores iniciales, para que funcione todo
MOVLW d'100'
MOVWF CONT
CLRF FLAG
; Mostramos el primer valor
MOVLW 0x0
CALL TABLA
MOVWF PORTB ; Aca mostre el valor
MOVLW 0x1
MOVWF INDICE ; Aca seteo el proximo valor
LOOP
;Comienza el loop infinito
; Supongo que cuando se presiona el boton, RB0 se pone en 0 logico
BTFSC PORTB,0
GOTO LOOP ; Espero hasta que se presione, sino vuelvo
CALL DEMORA_10MS ; Si detecte que se presiono, uso una demora como antirebote
LOOP_AUX:
BTFSS PORTB,0 ; Espero que se suelte el boton, asi evito que entre muchas veces aca
GOTO LOOP_AUX ;
MOVLW 0x1
XORWF FLAG, F ; Procedo a invertir el bit 0 del registro "FLAG", este bit
GOTO LOOP
END