START:
BANKSEL PORTA ; BANCO 0
CLRF PORTD
CLRF PORTC
CLRF PORTA
BANKSEL TRISA ; BANCO 1
CLRF TRISB
CLRF TRISC
CLRF TRISD
MOVLW B'11111111'
MOVWF TRISA
MOVLW B'00111000'
MOVWF OPTION_REG
MOVLW 0X6
MOVWF ADCON1
BANKSEL PORTA ; BANCO 0
CALL INILCD
CALL LCDCONTADOR
MOVLW 0X12 ; MUEVO EL CURSOR EN EL LCD A LA FILA 0 COLUMNA 12
CALL POSICIONLCD
MOVLW 0XFF
MOVWF TMR0
BCF INTCON,TMR0IF ; LIMPIAMOS FLAG
BSF INTCON,TMR0IE ; HABILITAMOS LA INT DE TMR0
BSF INTCON,GIE ; ACTIVAMOS LA INTERRUCPION GLOBLA
LOOP:
GOTO LOOP
DATO:
MOVWF LCD
BSF RS
BSF ENABLE
CALL RETARDOLCD_15MS
BCF ENABLE
RETURN
INILCD
CALL RETARDOLCD_15MS
BCF RS
BSF ENABLE
MOVLW B'00111000'
MOVWF LCD
CALL RETARDOLCD_100US
BCF ENABLE
BCF RS
BSF ENABLE
MOVLW B'00110000'
MOVWF LCD
CALL RETARDOLCD_100US
BCF ENABLE
BCF RS
BSF ENABLE
MOVLW B'00110000'
MOVWF LCD
CALL RETARDOLCD_100US
BCF ENABLE
BCF RS
BSF ENABLE
MOVLW B'00111100'
MOVWF LCD
CALL RETARDOLCD_100US
BCF ENABLE
BCF RS
BSF ENABLE
MOVLW B'00001100'
MOVWF LCD
CALL RETARDOLCD_100US
BCF ENABLE
BCF RS
BSF ENABLE
MOVLW B'00000001'
MOVWF LCD
CALL RETARDOLCD_100US
BCF ENABLE
BCF RS
BSF ENABLE
MOVLW B'00000110'
MOVWF LCD
CALL RETARDOLCD_100US
BCF ENABLE
RETURN
LCDCONTADOR:
BCF RS
BSF ENABLE
MOVLW 0X01
MOVWF LCD
CALL RETARDOLCD_15MS
BCF ENABLE
BCF RS
BSF ENABLE
MOVLW 0X01
MOVWF LCD
CALL RETARDOLCD_15MS
BCF ENABLE
MOVLW 'C'
CALL DATO
MOVLW 'O'
CALL DATO
MOVLW 'N'
CALL DATO
MOVLW 'T'
CALL DATO
MOVLW 'A'
CALL DATO
MOVLW 'D'
CALL DATO
MOVLW 'O'
CALL DATO
MOVLW 'R'
CALL DATO
MOVLW ':'
CALL DATO
MOVLW ' '
CALL DATO
RETURN
RETARDOLCD_100US:
MOVLW D'1'
MOVWF TIEMPO3
TRES3:
MOVLW D'1'
MOVWF TIEMPO2
DOS3:
MOVLW D'100'
MOVWF TIEMPO1
UNO3:
DECFSZ TIEMPO1
GOTO UNO3
DECFSZ TIEMPO2
GOTO DOS3
DECFSZ TIEMPO3
GOTO TRES3
RETURN
RETARDOLCD_15MS:
MOVLW D'30'
MOVWF TIEMPO3
TRES1:
MOVLW D'10'
MOVWF TIEMPO2
DOS1:
MOVLW D'50'
MOVWF TIEMPO1
UNO1:
DECFSZ TIEMPO1
GOTO UNO1
DECFSZ TIEMPO2
GOTO DOS1
DECFSZ TIEMPO3
GOTO TRES1
RETURN
RETARDO:
MOVLW D'49'
MOVWF TIEMPO1
TRES:
MOVLW D'80'
MOVWF TIEMPO2
DOS:
MOVLW D'248'
MOVWF TIEMPO3
UNO:
NOP
NOP
DECFSZ TIEMPO3,1
GOTO UNO
DECFSZ TIEMPO2,1
GOTO DOS
DECFSZ TIEMPO1,1
GOTO TRES
RETURN
TTIMER:
; COMO ESTA VACIO EL LOOP PRINCIPAL PUEDO OMITIR EL GUARDAR/REESTABLECER
; STATUS Y W
INCF CONTADOR, F
; EL NUMERO NECESITO SEPARARLO EN DECENAS Y UNIDADES , ADEMAS SUMARLE '0'
CALL INT_TO_BCD
; ANTES DE ENVIAR LOS DATOS, NECESITO POSICIONAR EL CURSOR (DONDE VA A ESCRIBIR).
MOVLW 0X12
MOVWF POSICIONLCD
; ENVIO PRIMERO LAS DECENAS
MOVF DECENAS
MOVWF LCD
CALL DATO
;LUEGO ENVIO LAS UNIDADES
MOVF UNIDADES
MOVWF LCD
CALL DATO
;ACTUALIZADO EL LCD, PROCEDO A LIMPIAR EL FLAG Y RECARGAR EL TIMER
BCF INTCON,TMR0IF
MOVLW 0XFF
MOVWF TMR0
RETFIE
END