Saludos... a ver yo hice un menu en el 877A, era algo asi:
TM EQU 0x08 ;Direccion de las Tablas de mensajes
;de los menus
;Funcion que pide contraseña para poder mostrar
;el menu principal
DISPLAY_PASSWORD
CLRF PORTB
CLRF CONTMSG ;Limpio el contador de mensaje
LCDRS_ALTO
INICIO_MENSAJE
_MOVLF TM,PCLATH ;Coloca la parte alta del
;program counter
MOVF CONTMSG,W
CALL MSG_PASSWORD
CLRF PCLATH
ANDLW 0xFF ;se compara con el caracter de
;fin de cadena
BTFSC STATUS,Z ;FIN DE MENSAJE?
GOTO FIN_MENSAJE ;SI -> se acabo el mensaje, salte
CALL WLCD ;NO -> todavia hay caracteres
;continue escribiendo LCD
INCF CONTMSG,F
GOTO INICIO_MENSAJE
FIN_MENSAJE
LCDRS_BAJO
.
.
.
MSG_PASSWORD
ADDWF PCL,F
DT "PASSWORD:",0x00
END
Explico:
>como el programa era grande la tabla esta en la posicion 0800 de la memoria de programa (creo que es la pagina 1), por eso debo utilizar el PCLATH, de lo contrario el contador de programa se pierde despues del CALL MSG_PASSWORD... bueno eso me pasaba a mi.
>Utilizo un caracter de fin de cadena para saber hasta donde sigo haciendo el CALL
>El INDF y FSR son registros de memoria RAM. El FSR es como un apuntador de posicion de memoria y el INDF es el contenido de esa posicon de memoria, para leer/escribir de (en) la RAM, debes incrementar (dec) el FSR hasta donde tu lo decidas y luego lees/escribes con el INDF. Debes tener en cuenta la configuracion de bancos de RAM de tu PIC.
>El LCD modulo HD44780, configurado a 4 bits.
Espero haberte ayudado...
Suerte
