Hola compañeros, estoy empezando con esto de los pic y practico con los ejemplos que tengo en un libro de electronica.
quiero que en un LCD me aparerzcan diferentes mensajes escritos.El ejemplo del libro era solo de 4 mensajes, pero yo quiero aumentar ese numero de mensajes a 12.Ahora os voy a poner el codigo que tengo para que me digais por favor donde esta el error pero antes os comento que es lo que hace el programa y que es lo que realmente quiero yo que haga.
Yo quiero que vayan apareciendo 1 mensaje por linea (osea 2 por pantalla) que se borre y que aparezca el siguiente y asi hasta 6 pantallas diferentes.El problema es que cuando el programa llega a la pantalla 5 esta no se muestra y el programa se reinicia solo a la primera pantalla.Osea, en la primera pantalla aparecen los mensajes 1 y 2 ( uno en cada linea) en la pantalla 2 aparecen los mensajes 3 y 4 en la 3 aparecen el 5 y el 6 , en la pantalla 4 el 7 y el 8 pero en este momento en lugar de aparecer el 9 y el 10 (pantalla 5) y luego el 11 y 1l 12 (pantalla 6 y ultima) vuelve a aparecer la primera pantalla con los mensajes 1 y 2 y asi siempre en el mismo bucle.Yo no entiendo mucho y seguramente vosotros vereis el problema rapidamente, os lo agradezco de antemano.
aqui os dejo el codigo, si alguno de vosotros lo quiere optimizar un poco , en sus manos queda y asi me sirve para seguir aprendiendo.los comentarios de los finales de linea no tienen nada que ver con el programa ya que como os he comentado esta basado en otro programa que he ido modificando pero los comentarios se han ido quedando por ahi, ya lo limpiare.
; ZONA DE DATOS **********************************************************************
LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC
CBLOCK 0x0C
ENDC
; ZONA DE CÓDIGOS ********************************************************************
ORG 0
call LCD_Inicializa
Inicio
movlw Mensaje1 ; Apunta al mensaje fijo y lo visualiza.
call LCD_Mensaje
call LCD_Linea2 ; Pasa a la segunda línea.
movlw Mensaje2 ; Apunta al mensaje parpadeante.
call LCD_Mensaje ; Lo visualiza.
call Retardo_5s ; Durante este tiempo.
call LCD_Borra ; Vuelve a situarse al principio de la línea 2.
call Retardo_1s ; Durante este tiempo, produciendo un efecto de
call LCD_Linea1 ; Pasa a la primera línea.
movlw Mensaje3 ; Apunta al mensaje fijo y lo visualiza.
call LCD_Mensaje
call LCD_Linea2 ; Pasa a la segunda línea.
movlw Mensaje4 ; Apunta al mensaje parpadeante.
call LCD_Mensaje ; Lo visualiza.
call Retardo_5s ; Durante este tiempo.
call LCD_Borra ; Vuelve a situarse al principio de la línea 2.
call Retardo_1s ; Durante este tiempo, produciendo un efecto de
call LCD_Linea1 ; Pasa a la primera línea.
movlw Mensaje5 ; Apunta al mensaje fijo y lo visualiza.
call LCD_Mensaje
call LCD_Linea2 ; Pasa a la segunda línea.
movlw Mensaje6 ; Apunta al mensaje parpadeante.
call LCD_Mensaje ; Lo visualiza.
call Retardo_5s ; Durante este tiempo.
call LCD_Borra ; Vuelve a situarse al principio de la línea 2.
call Retardo_1s ; Durante este tiempo, produciendo un efecto de
call LCD_Linea1 ; Pasa a la primera línea.
movlw Mensaje7 ; Apunta al mensaje fijo y lo visualiza.
call LCD_Mensaje
call LCD_Linea2 ; Pasa a la segunda línea.
movlw Mensaje8 ; Apunta al mensaje parpadeante.
call LCD_Mensaje ; Lo visualiza.
call Retardo_5s ; Durante este tiempo.
call LCD_Borra ; Vuelve a situarse al principio de la línea 2.
call Retardo_1s ; Durante este tiempo, produciendo un efecto de
call LCD_Linea1 ; Pasa a la primera línea.
movlw MensajeA ; Apunta al mensaje fijo y lo visualiza.
call LCD_Mensaje
call LCD_Linea2 ; Pasa a la segunda línea.
movlw MensajeB ; Apunta al mensaje parpadeante.
call LCD_Mensaje ; Lo visualiza.
call Retardo_5s ; Durante este tiempo.
call LCD_Borra ; Vuelve a situarse al principio de la línea 2.
call Retardo_1s ; Durante este tiempo, produciendo un efecto de
call LCD_Linea1 ; Pasa a la primera línea.
movlw MensajeC ; Apunta al mensaje fijo y lo visualiza.
call LCD_Mensaje
call LCD_Linea2 ; Pasa a la segunda línea.
movlw MensajeD ; Apunta al mensaje parpadeante.
call LCD_Mensaje ; Lo visualiza.
call Retardo_5s ; Durante este tiempo.
call LCD_Borra ; Vuelve a situarse al principio de la línea 2.
call Retardo_1s ; Durante este tiempo, produciendo un efecto de
goto Inicio
;
; "Mensajes" ----------------------------------------------------------------------------
;
Mensajes
addwf PCL,F
Mensaje1
DT "mensaje 1", 0x00
Mensaje2
DT " mensaje 2", 0x00
Mensaje3
DT "mensaje3", 0x00
Mensaje4
DT " mensaje4", 0x00
Mensaje5
DT " mensaje5", 0x00
Mensaje6
DT " mensaje6", 0x00
Mensaje7
DT " mensaje7 ", 0x00
Mensaje8
DT " mensaje8", 0x00
MensajeA
DT "mensaje9", 0x00
MensajeB
DT "mensaje10", 0x00
MensajeC
DT "mensaje11", 0x00
MensajeD
DT "mensaje12", 0x00
INCLUDE <LCD_4BIT.INC>
INCLUDE <LCD_MENS.INC>
INCLUDE <RETARDOS.INC>
END
A ver si localizais donde esta el fallo.Seguro que si.
Muchas gracias a todos.Un saludo