Me di cuenta que realizando el programa nunca pusiste el puerto A como digital. Seguramente por eso no funcione tu codigo. Pero aca va mi codigo (en realidad tu codigo un poquito modificado):
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
En este codigo hay que hacer un par de funciones, declarar otro par de registros y por ultimo crear la limitacion de tu contador.
Necesitas crear las siguientes funciones:
POSICIONLCD, esta funcion lo que hace es posicionar el cursor en el LCD, me voy con un ejemplo.
Vos escribiste "CONTADOR:"
Si escribis 1 letra o numero mas aparece despues de los 2 puntos, supongamos que escribimos 10 queda asi:
"CONTADOR:10"
Si quiero escribir 11 ahora, si escribo asi nomas me encuentro conque hace esto:
"CONTADOR:1011"
Entonces te quedan 2 opciones, o volves al comienzo y escribis contador + el nuevo numero, o te vas a donde comienza el numero es decir posicionas el cursor despues de los 2 puntos, y escribis 11, asi se sobreescribe el valor y queda:
"CONTADOR:11"
INT_TO_BCD (en realidad seria INT_TO_ASCII )
Vos tenes un numero en formato binario, que en realidad es un entero, el problema que el LCD lo que recibe son caracteres ASCII, Esta subrutina deberia hacer lo que voy a hacer en el ejemplo. Supongamos que tengo el numero 38 y quiero enviarlo al LCD, entonces primero necesito separar las decenas y las unidades (lo podes hacer restando de 10 en 10), por un lado en un registro (DECENAS) voy a tener 3 y por el otro otro registro (UNIDADES) con el valor 8. Con esto me aseguro que en los registros solo tengo los valores de 0 a 9
Pero ese no es el valor ASCII, si quiero imprimero un '3' deberia enviar 0x33, el '0' es 0x30. entonces lo que voy a hacer es sumarlo 0x30 o '0' que es lo mismo. Entonces me queda DECENAS = 0x33 = '3' y UNIDADES = 0x38 = '8'
De alli solo me queda enviarlo.
------------
Registros a usar.
Tambien vamos a necesitar registros para usar. Como ya viste necesitamos uno de DECENAS y UNIDADES para obtener los valores a enviar, pero tambien necesitamos de otro registro para contar cuantas veces entro al TMR0, para eso usamos CONTADOR.
A ese rgistro en el codigo hay que agregarle el limite, ya que puede pasar a mas de 99, deberias ANTES de llamar a INT_TO_BCD, revisar si CONTADOR es mayor a 99, y si lo es proceder a ponerlo a 0 o no modificarlo.