Hola,
soy un poco novatillo en esto de programar pic, bueno la cosa es que estoy realizando un programa en e cual tengo una tabla con textos, a la cual acude e programa principal para mostrar dichos mensajes. El problema viene que llevo introducidos 15 mensajes, pero en cuanto intento introducir uno mas se debe producir algún tipo de desbordamiento que todo el programa deja de funcionar como debería.
He intentado solucionarlo de forma un poco chapucera creando una nueva tabla y una nueva rutina para mostrar los mensajes en la pantalla pero no funciona.
A continuacion os dejo parte del codigo y a ver si me podéis ayudar, muchas gracias!!
;**************************************************************************************
;Tabla_Mensajes: Según el valor contenido en el registro W, se devuelve el carácter a visualizar
Tabla_Mensajes movwf PCL ;Calcula el desplazamiento sobre la tabla
;La directiva dt genera tantas instrucciones RETLW como bytes o caracteres contenga
Mens_1 equ $ ;Inicio del 1er. carácter del mensaje 1
dt "Seleccionar ",0x00
Mens_1_1 equ $ ;Inicio del 1er. carácter del mensaje 2
dt "sentido de giro",0x00
Mens_2 equ $ ;Inicio del 1er. carácter del mensaje 3
dt "(",0x2B,")Horario",0x00
Mens_3 equ $ ;Inicio del 1er. carácter del mensaje 4
dt "(",0xF2,")Antihorario",0x00
Mens_4 equ $ ;Inicio del 1er. carácter del mensaje 1
dt "Horario",0x00
Mens_5 equ $ ;Inicio del 1er. carácter del mensaje 1
dt "Antihorario",0x00
Mens_6 equ $ ;Inicio del 1er. carácter del mensaje 1
dt "Tension(%):",0x00
Mens_6_1 equ $ ;Inicio del 1er. carácter del mensaje 1
dt "tiempo de arranque",0x00
Mens_7 equ $ ;Inicio del 1er. carácter del mensaje 1
dt "(",0xF2,") Corregir",0x00
Mens_8 equ $ ;Inicio del 1er. carácter del mensaje 1
dt "Tiempo(s):",0x00
Mens_9 equ $ ;Inicio del 1er. carácter del mensaje 1
dt "Tecla invalida",0x00
Mens_10 equ $ ;Inicio del 1er. carácter del mensaje 1
dt "3dig MAX",0x00
Mens_11 equ $ ;Inicio del 1er. carácter del mensaje 1
dt "1dig MIN",0x00
Mens_12 equ $ ;Inicio del 1er. carácter del mensaje 1
dt "tension inicial",0x00
;Mens_13 equ $ ;Inicio del 1er. carácter del mensaje 13
; dt "F!! ",0x00
include "teclado.INC" ;Incluye rutinas de manejo del teclado
include "lcd4bitsPIC16.inc" ;Incluir rutinas de manejo del LCD
include "MSE_Delay.inc" ;Incluir rutinas de temporización
;*********************************************************************************************
;Mensaje: Esta rutina envía a la pantalla LCD una cadena de caracteres. El inicio de dicha
;cadena debe estar indicado en el reg. W. Toda cadena debe finalizar con el código 0x00
Mensaje movwf Temporal_1 ;Salva el índice que apunta a la tabla de caracteres
Mensaje_1 movf Temporal_1,W ;Recupera el índice
call Tabla_Mensajes ;Busca el carácter a visualizar
movwf Temporal_2 ;Salva el carácter a visualizar
movf Temporal_2,F
btfss STATUS,Z ;Mira si es el último (0x00)
goto Mensaje_2 ;No
bcf PCLATH,0
return ;Si
Mensaje_2 call LCD_DATO ;Visualiza el carácter sobre el LCD
incf Temporal_1,F ;Incrementa el índice para buscar el siguiente carácter
goto Mensaje_1
;******************************************************************************
esta seria la tabla y la rutia que lo carga en la pantalla
y a continuación os muestro un ejemplo de como se llama a estas
movlw b'00000001'
call LCD_REG ;Borra el LCD e inicia el cursor
movlw Mens_1
call Mensaje ;Visualiza "Seleccione sentido de giro"