Como dijo AcoranTf te esta faltando los call LCD_Caracter.
La funcion LCD_Caracter, lo que hace es tomar lo que esta en W y ponerlo en el LCD. Es por eso que se hace esto:
movlw 'd'
call LCD_Caracter
Tenes el mismo problema en dos lados ( donde se pone el dato en W, pero luego no se llama la funcion para que lo pase al LCD):
movlw 'o'
goto Fin_Incrementa
y
movlw 's'
goto Fin_Incrementa
---------------------------------
Despues hay otros errores, que aconsejo mas empezar con encender una salida ( led ), y no un LCD para que puedas ver el error facilmente.
EsperaDejePulsar
btfss Pulsador1
btfss Pulsador2
goto EsperaDejePulsar
Fin_Incrementa
return
Eso esta mal implementado seguro, vos intentabas hacer que solo avance si es que los 2 botones se dejaron de pulsar. PERO el BTFSS no se queda alli esperando sino que salta 1 instruccion o sigue de largo según el estado del pulsador. El primer BTFSS Pregunta si Pulsador1 esta en 1, si esta en 1 ejecuta el goto, si esta en 0 pasa al otro BTFSS.
Asi que la unica forma de salir de alli es que Pulsador2 este en 1 y que Pulsador1 este en 0. No creo que uses una logica asi en las entradas, normalmente lo haces para todos iguales. Distinto seria algo asi:
EsperaDejePulsar
btfss Pulsador1
goto EsperaDejePulsar
btfss Pulsador2
goto EsperaDejePulsar
Fin_Incrementa
return
Ahora si cuando los 2 esten en 1 van a pasar al RETURN.
-------------------------------------------------------------------------
Mas cosas sin sentido que encontre:
Principal
btfss Pulsador1 ; Lee el pulsador.
call Saludo ; displaya "Bienvenido"
call IncrementaVisualiza ; Si pulsa salta a incrementar y visualizar el
goto Principal ; contador
Secundario
btfss Pulsador2 ; Lee el pulsador.
call Despedida ; displaya "Buen dia"
call DecrementaVisualiza ; Si pulsa salta a Decrementar y visualizar el
goto Principal
Sigamos el flujo del programa, Entra a Principal, pregunta por el pulsador, si esta en 1 se salta el CALL Saludo, ejecuta el Incrementa Visualiza y luego salta a principal.
Secundario nunca se va a ejecutar!, Por lo cual Despedida o DecrementaVisualiza nunca se van a llamar.
Sigamos un poco mas.
IncrementaVisualiza
call Retardo_20ms ; Espera a que se estabilicen los niveles de tensión.
btfsc Pulsador1 ; Vuelve a leer el pulsador.
goto Fin_Incrementa
incf Contador,F ; Incrementa el contador y después lo visualiza.
DecrementaVisualiza
call Retardo_20ms ; Espera a que se estabilicen los niveles de tensión.
btfsc Pulsador2 ; Vuelve a leer el pulsador.
goto Fin_Incrementa
decf Contador,F ; Decrementa el contador y después lo visualiza.
Miremos el codigo nuevamente. Un delay primero, luego pregunta por si esta en 0 Pulsador1.. Si sigue en 1 ejecuta el GOTO Fin_Incrementa, que solo posee un RETURN, y que por lo tanto podrias tener un RETURN ahi puesto. Si esta en 0 el pulsador Aumenta Contador
Y ejecuta todo lo siguiente! , Supuestamente DecrementaVisualiza era del pulsador 2, pero se esta ejecutando, ya que no hay ningun RETURN o algo por el estilo.
Aun peor, si suponemos que "Secundario" funciona, y entra en DecrementaVisualiza y llega al decf Contador, lo proximo que se va a ejecutar es "Saludo"!
Por que no hay nada que lo frene o lo envie para otro lado
Otra cosa, para que el pulso del boton sea detectado, desde que se detecto en principal que estaba en 1, mientras se mantenga en 1 va a ejecutar el call Saludo miles de veces. Innecesariamente.
Algo distinto seria asi:
Principal
btfss Pulsador1 ; Lee el pulsador.
call Boton1Presionado ; displaya "Bienvenido"
btfss Pulsador2 ; Lee el pulsador.
call Despedida ; displaya "Buen dia"
goto Principal
Boton1Presionado
call Retardo_20ms ; Espera a que se estabilicen los niveles de tensión.
btfsc Pulsador1 ; Vuelve a leer el pulsador.
GOTO $-1 ; Espero que se suelte, es decir ejecuto el BTFSC hasta que sea 0
call Saludo ; Se solto, entonces muestro el mensaje de Bienvenido
incf Contador,F ; Incrementa el contador, por si lo queres para algo
RETURN ; Vuelvo del CALL!
Boton2Presionado
call Retardo_20ms ; Espera a que se estabilicen los niveles de tensión.
btfsc Pulsador2 ; Vuelve a leer el pulsador.
GOTO $-1 ; Espero que se suelte, es decir ejecuto el BTFSC hasta que sea 0
call Despedida ; Se solto, entonces muestro el mensaje de Bienvenido
decf Contador,F ; Decrementa el contador, por si lo queres para algo
RETURN ; Vuelvo del call!
En Principal si algun boton esta en 1 ejecuta el CALL y entra a una funcion, ahi dentro de esa funcion se asegura que luego el usuario SUELTE el boton, de esa forma solamente se ejecuta cuando se encuentra que se presiono Y se solto el boton. Si no ocurre eso no pasa a ejecutar lo demas.
Finalmente cuando se suelta, ejecuta el Saludo o Despedida, incrementa o decrementa el contador por si en algun lado queres mostrarlo, y por ultimo ejecuta el RETURN que corresponde a los CALL de "Principal".
PD:
El GOTO $-1
Solo indica que ejecute lo que esta 1 direccion antes del GOTO, seria equivalente a hacer esto:
Etiqueta
BTFSS Algo
GOTO Etiqueta
Supongamos que la direccion de memoria del BTFSS es 0x10, Etiqueta tiene un valor de 0x10, no es una instruccion, solo un "nombre" para el lugar ese. el GOTO va a tener la direccion 0x11.
Lo equivalente seria o para el compilador seria algo asi:
Etiqueta
0x10: BTFSS Algo
0x11: GOTO 0x10
Nosotros no podemos saber nunca que direccion va a tener la instruccion anterior, por eso usamos la "Etiqueta", Pero podemos hacer uso de "$", el $ indica la direccion de la linea actual, es decir si estoy en 0x11 y uso el $, esta va a valer 0x11, si quiero saltar 1 lugar antes entonces le resto 1.
0x10: BTFSS Algo
0x11: GOTO $-1
Lo bueno es que no necesito de Etiqueta, en resumen le digo que salte ( repita ) la instruccion anterior con el GOTO $-1