Autor Tema: Problema con 16F84 Y LCD 2X20  (Leído 1537 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado randall

  • PIC10
  • *
  • Mensajes: 10
Problema con 16F84 Y LCD 2X20
« en: 13 de Julio de 2009, 19:25:07 »
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


Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Problema con 16F84 Y LCD 2X20
« Respuesta #1 en: 14 de Julio de 2009, 18:40:07 »
Hola, creo que tu error es por el cambio de pagina de memoria, por lo que la tabla del ultimo mensaje, queda "partida", y de alli es ipredecible donde salta el contador de programa del micro....
Fijate aqui en el foro, tratamiento de tablas.... esta explicado este problema  :mrgreen:

Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...


 

anything