Una correcion al loop principal, saque afuera la inicializacion del LCD, y agregue un NOP, asi el GOTO $-1 salta al NOP y no al CALL
ORG 000H
CALL SETUP
CALL LCD_Inicializa ; En el setup inicial y fuera del loop principal.
;*****************************************************************************
;MENU RUTINA PPAL DEL PROGRAMA
;*****************************************************************************
MENU
MOVLW 'B'
CALL LCD_Caracter
MOVLW 'I'
CALL LCD_Caracter
MOVLW 'E'
CALL LCD_Caracter
MOVLW 'N'
CALL LCD_Caracter
MOVLW 'V'
CALL LCD_Caracter
MOVLW 'E'
CALL LCD_Caracter
MOVLW 'N'
CALL LCD_Caracter
MOVLW 'I'
CALL LCD_Caracter
MOVLW 'D'
CALL LCD_Caracter
MOVLW 'O'
CALL LCD_Caracter
NOP
GOTO $-1
GOTO MENU ; No deberia llegar nunca aca
Y en el archivo de la configuracion del LCD, el CBLOCK le falta ponerle el valor, lo cual quedaria asi:
CBLOCK 0x70
LCD_Dato
LCD_GuardaDato
LCD_GuardaTRISB
LCD_Auxiliar1
LCD_Auxiliar2
ENDC
( Elegi 0x70 asi no colisiona con ningun otro )
Y una cosa mas...
Si vas a crar registros para usarlos en los delays, usa siempre los mismos, es decir tenes asi:
Delay 1ms: GRAL1 y GRAL2
Delay 1.5ms : TOTO
Delay 25s : PDel0, PDel1, PDel2
Mientras que podrias hacerlo asi:
Delay 25s : PDel0, PDel1, PDel2
Delay 1ms: PDel0, PDel1
Delay 1.5ms : PDel0
Y listo... ahora solo tenes definido 3 registros y podes usar todos los delays sin problema, mientras que antes tenias 6 sin sentido.