elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Informática
| |-+  Electrónica
| | |-+  Resolver problemas con tablas 6 bits.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 2 [3] 4 Ir Abajo Respuesta Imprimir
Autor Tema: Resolver problemas con tablas 6 bits.  (Leído 19,772 veces)
Tokes

Desconectado Desconectado

Mensajes: 140


Ver Perfil
Re: Resolver problemas con tablas 6 bits.
« Respuesta #20 en: 8 Septiembre 2010, 20:03 pm »

Hola, Meta:

¿Estas seguro que el mensaje guardado en la EEPROM 24lc256 termina en 0 (Me refiero al valor 0 y no al ascii '0')?

La rutina de mensaje a LCD busca el valor 0 para finalizar.

          Nos vemos.


En línea

Meta


Desconectado Desconectado

Mensajes: 3.438



Ver Perfil WWW
Re: Resolver problemas con tablas 6 bits.
« Respuesta #21 en: 8 Septiembre 2010, 21:50 pm »

Hello:

Segurísimo, el 0 lo he puesto en la parte hexadecimal (0x00), no en la parte ASCII (0) del winpic800.

La parte modificada de esta librería. Ya que se me retaban los mensajes. Aunque no lo hay amodificado se comporta igual.

Código
  1. ;**************************** Librería "M24LC256.INC" ***********************************
  2. ;
  3.  
  4. ;
  5. ; Estas subrutinas permiten realizar las tareas de manejo de la memoria EEPROM serie
  6. ; 24LC256 que transmite y recibe la información vía serie a través de un bus I2C.
  7. ;
  8. ; Subrutina "M24LC256_InicializaEscritura" ----------------------------------------------
  9. ;
  10. ; Prepara la memoria para iniciar su escritura a partir de la posición de memoria fijada
  11. ; por los registros:
  12. ; - (M24LC256_AddressHigh), indica el número del bloque o página de memoria a escribir.
  13. ; - (M24LC256_AddressLow), indica posición a escribir dentro del bloque.
  14.  
  15. CBLOCK
  16. M24LC256_AddressHigh ; Guarda el valor de la dirección de memoria a
  17. M24LC256_AddressLow ; escribir o leer.
  18. M24LC256_Dato
  19. ENDC
  20. ;
  21. M24LC256_DIR_ESCRITURA EQU b'10100000'; Dirección de la memoria 24LC256 para
  22. M24LC256_DIR_LECTURA EQU b'10100001'; escritura y lectura respectivamente.
  23.  
  24. M24LC256_InicializaEscritura
  25. call I2C_EnviaStart ; Envía condición de Start.
  26. movlw M24LC256_DIR_ESCRITURA ; Envía dirección de escritura del
  27. call I2C_EnviaByte ; esclavo.
  28. movf M24LC256_AddressHigh,W ; A partir de la dirección apuntada por los
  29. call I2C_EnviaByte ; registros M24LC256_AddressHigh y
  30. movf M24LC256_AddressLow,W ; M24LC256_AddressLow.
  31. call I2C_EnviaByte
  32. return
  33.  
  34. ; Subrutina "M24LC256_InicializaLectura" ------------------------------------------------
  35. ;
  36. ; Prepara la memoria para iniciar su lectura a partir de la posición de memoria fijada
  37. ; por los registros:
  38. ; - (M24LC256_AddressHigh), indica el número del bloque o página de memoria a leer.
  39. ; - (M24LC256_AddressLow), indica posición a escribir dentro del bloque.
  40.  
  41. M24LC256_InicializaLectura
  42. bcf I2C_UltimoByteLeer ; Todavía no ha comenzado a leer ningún dato.
  43. call I2C_EnviaStart ; Envía condición de Start.
  44. movlw M24LC256_DIR_ESCRITURA ; Envía dirección de escritura del
  45. call I2C_EnviaByte ; esclavo.
  46. movf M24LC256_AddressHigh,W ; A partir de la dirección apuntada por los
  47. call I2C_EnviaByte ; registros M24LC256_AddressHigh y
  48. movf M24LC256_AddressLow,W ; M24LC256_AddressLow.
  49. call I2C_EnviaByte
  50. call I2C_EnviaStop
  51. ;
  52. call I2C_EnviaStart ; Envía condición de Start.
  53. movlw M24LC256_DIR_LECTURA ; Indica a la memoria 24LC256 que va a
  54. call I2C_EnviaByte ; proceder a la lectura.
  55. return
  56.  
  57. ; Subrutina "M24LC256_Mensaje_a_LCD" ----------------------------------------------------
  58. ;
  59. ; Lee el mensaje grabado en la memoria 24LC256 y lo visualiza en la pantalla del módulo LCD.
  60. ; En el registro de trabajo W se introduce la página de la memoria a partir de cuya primera
  61. ; posición se va a leer. La lectura termina cuando encuentre el código 0x00. Así por ejemplo,
  62. ; si (W)=2Fh lee el mensaje que comienza en la posición 0 de la página 2Fh de la memoria,
  63. ; que es la posición 2F00h absoluta.
  64. ;
  65. CBLOCK
  66. M24LC256_ValorCaracter ; Valor ASCII del carácter leído.
  67. ENDC
  68.  
  69. M24LC256_Mensaje_a_LCD
  70. movwf M24LC256_AddressHigh ; Apunta al inicio de la página correspondiente.
  71. clrf M24LC256_AddressLow
  72. call M24LC256_InicializaLectura
  73. M24LC256_LeeOtroByte
  74. call I2C_LeeByte ; Lee la memoria 24LC256.
  75. movwf M24LC256_ValorCaracter ; Guarda el valor de carácter.
  76. movf M24LC256_ValorCaracter,F ; Lo único que hace es posicionar flag Z. En caso
  77. btfsc STATUS,Z ; que sea "0x00", que es código indicador final
  78. goto M24LC256_FinMensaje ; del mensaje, sale de la subrutina.
  79. movf M24LC256_ValorCaracter,W ; Recupera el valor leído.
  80. call LCD_Caracter ; Lo visualiza en la pantalla del LCD.
  81. incf M24LC256_AddressLow,F ; Apunta a la siguiente posición.
  82. goto M24LC256_LeeOtroByte
  83. M24LC256_FinMensaje
  84. call M24LC256_FinalizaLectura
  85. return
  86.  
  87. ; Subrutina "M24LC256_FinalizaLectura" ------------------------------------------------
  88. ;
  89. ; Activa el bit I2C_UltimoByteLeer para que la subrutina I2C_LeeByte ponga en alta
  90. ; impedancia la línea SDA y pueda ejecutarse posteriormente la condición de Start o Stop
  91. ; que fija el protocolo del bus I2C.
  92.  
  93. M24LC256_FinalizaLectura
  94. bsf I2C_UltimoByteLeer ; Con estas dos instrucciones se pone en
  95. call I2C_LeeByte ; alta impedancia la línea SDA. No importa el
  96. call I2C_EnviaStop ; resultado de la lectura realizada.
  97. return
  98.  
  99. ; Subrutina "M24LC256_Mensaje_a_LCD" ----------------------------------------------------
  100. ;
  101. ; Lee un mensaje grabado en la memoria 24LC256 y lo visualiza por el módulo LCD. En caso que
  102. ; sea más largo que la longitud de la pantalla se desplaza hacia la izquierda con sensación
  103. ; de movimiento. En el registro de trabajo W se introduce la página de la memoria a partir
  104. ; de cuya primera posición va a leer. La visualización termina cuando encuentre el código
  105. ; 0x00. Así por ejemplo si (W)= 2Fh lee el mensaje que comienza en la posición 0 de la
  106. ; página 2Fh de la memoria, que es la posición 2F00h absoluta.
  107. ;
  108. CBLOCK
  109. ; M24LC256_ValorCaracter ; Valor ASCII del carácter leído.
  110. M24LC256_CursorPosicion
  111. ENDC
  112.  
  113. ;M24LC256_Mensaje_a_LCD
  114. bcf I2C_UltimoByteLeer
  115. movwf M24LC256_AddressHigh ; Apunta al inicio de la página correspondiente.
  116. clrf M24LC256_AddressLow
  117. call M24LC256_InicializaLectura
  118. M24LC256_PrimeraPosicion
  119. clrf M24LC256_CursorPosicion ; El cursor en la posición 0 de la línea.
  120. call LCD_Borra ; Se sitúa en la primera posición de la línea 1 y
  121. M24LC256_VisualizaCaracter ; borra la pantalla.
  122. movlw LCD_CaracteresPorLinea ; ¿Ha llegado a final de línea?
  123. subwf M24LC256_CursorPosicion,W
  124. btfss STATUS,C
  125. goto M24LC256_NoEsFinalLinea
  126. M24LC256_EsFinalLinea
  127. call Retardo_200ms ; Lo mantiene visualizado durante este tiempo.
  128. call Retardo_200ms
  129. call M24LC256_FinalizaLectura
  130. incf M24LC256_AddressLow,F
  131. call M24LC256_InicializaLectura
  132. goto M24LC256_PrimeraPosicion
  133. M24LC256_NoEsFinalLinea
  134. call I2C_LeeByte ; Obtiene el ASCII del carácter apuntado.
  135. movwf M24LC256_ValorCaracter ; Guarda el valor de carácter.
  136. movf M24LC256_ValorCaracter,F ; Lo único que hace es posicionar flag Z. En caso
  137. btfsc STATUS,Z ; que sea "0x00", que es código indicador final
  138. goto M24LC256_FinMensaje ; de mensaje, sale fuera.
  139. M24LC256_NoUltimoCaracter
  140. call LCD_Caracter ; Visualiza el carácter ASCII leído.
  141. incf M24LC256_CursorPosicion,F ; Contabiliza el incremento de posición del
  142. ; cursor en la pantalla.
  143. goto M24LC256_VisualizaCaracter ; Vuelve a visualizar el siguiente carácter
  144. ;M24LC256_FinMensaje ; de la línea.
  145. ; call M24LC256_FinalizaLectura
  146. ; return
  147.  
  148. ; -----------------------------------------------------------------------------------------
  149.  
  150.  


« Última modificación: 8 Septiembre 2010, 21:52 pm por Meta » En línea

Tokes

Desconectado Desconectado

Mensajes: 140


Ver Perfil
Re: Resolver problemas con tablas 6 bits.
« Respuesta #22 en: 8 Septiembre 2010, 23:48 pm »

Meta:

Acabo de probar tu código y me funciona bien.

Asegúrate de dar click en Debug > Reset Persistent Model Data para que se borre lo que tenía la 24lc256 y se cargue el nuevo archivo .bin

             Hasta pronto.
En línea

Meta


Desconectado Desconectado

Mensajes: 3.438



Ver Perfil WWW
Re: Resolver problemas con tablas 6 bits.
« Respuesta #23 en: 9 Septiembre 2010, 00:59 am »

Hola:

Lo hago siempre tal como me enseñaste. (Contigo se aprende mucho).

Debe verse el código siempre en la primera línea del LCD. La cosa rara que hace es que al princpio se ve en la primera línea el mensaje, luego salta a la tercera, luego desplazado a la segunda y al final a la cuarta y vuelta a empezar pero con desplazamiento.



Sólo debe mostrarse en la primera línea "Hola amigo del foro", 0x00 (con su cero al final en hex).

Otra cosa que pasa, que cada vez le cuesta leer y tarda más en verse en el LCD. Ya que veo, hace un chequeo cada dos por tres en el puerto de entrada PORTC para detectar algún cambio y cambie de configuración. Como no cambia simpre lee el estado actual varias veces, pero no debería hacer cosas raras en el LCD.

¿Te voy a pasar el proyecto completo  otra vez por e-mail?

En línea

Tokes

Desconectado Desconectado

Mensajes: 140


Ver Perfil
Re: Resolver problemas con tablas 6 bits.
« Respuesta #24 en: 9 Septiembre 2010, 02:17 am »

Meta:

Envíame el archivo completo.

              Nos vemos.
En línea

Meta


Desconectado Desconectado

Mensajes: 3.438



Ver Perfil WWW
Re: Resolver problemas con tablas 6 bits.
« Respuesta #25 en: 9 Septiembre 2010, 03:08 am »

Enviado.

Edito:

En la librería se usa el LCD a 16x2, en mi caso el 20x4. Quizás no sea igual la configuración. Me lo confirmas por si acaso.

Código
  1. LCD_2Lineas4Bits5x7 ; Define la pantalla de 2 líneas, con caracteres
  2. movlw b'00101000' ; de 5x7 puntos y conexión al PIC mediante bus de
  3. ; goto LCD_EnviaComando ; 4 bits.
« Última modificación: 9 Septiembre 2010, 13:43 pm por Meta » En línea

Meta


Desconectado Desconectado

Mensajes: 3.438



Ver Perfil WWW
Re: Resolver problemas con tablas 6 bits.
« Respuesta #26 en: 9 Septiembre 2010, 14:23 pm »

Esto de usar la EEPROM externas para cambiar de mensajes de avisos rápidamente no vale la pena. ¿Verdad?

A lo mejor es porque es muy lento.
En línea

Tokes

Desconectado Desconectado

Mensajes: 140


Ver Perfil
Re: Resolver problemas con tablas 6 bits.
« Respuesta #27 en: 9 Septiembre 2010, 18:22 pm »

Hola, Meta:

En verdad que esta vez sí tenías muchos errores. Te mencionaré unos pocos:

1. La rutina para enviar mensaje al LCD nunca borraba la pantalla. Por eso el mensaje ocupaba todo el LCD.

Aquí te pongo la subrutina corregida. Nota que la única diferencia es que esta vez sí se borra la pantalla.

Código
  1. M24LC256_Mensaje_a_LCD
  2. movwf M24LC256_AddressHigh ; Apunta al inicio de la página correspondiente.
  3. clrf M24LC256_AddressLow
  4. call M24LC256_InicializaLectura
  5. call LCD_Borra    ; Borra la pantalla.
  6. M24LC256_LeeOtroByte
  7. call I2C_LeeByte ; Lee la memoria 24LC256.
  8. movwf M24LC256_ValorCaracter ; Guarda el valor de carácter.
  9. movf M24LC256_ValorCaracter,F ; Lo único que hace es posicionar flag Z. En caso
  10. btfsc STATUS,Z ; que sea "0x00", que es código indicador final
  11. goto M24LC256_FinMensaje ; del mensaje, sale de la subrutina.
  12. movf M24LC256_ValorCaracter,W ; Recupera el valor leído.
  13. call LCD_Caracter ; Lo visualiza en la pantalla del LCD.
  14. incf M24LC256_AddressLow,F ; Apunta a la siguiente posición.
  15. goto M24LC256_LeeOtroByte
  16. M24LC256_FinMensaje
  17. call M24LC256_FinalizaLectura
  18. return

2. En tu programa principal tienes un bucle infinito:

Código
  1. Principal
  2. movlw PAGINA_00
  3. call M24LC256_Mensaje_a_LCD
  4. call Retardo_2s
  5. goto Principal

Si no lo quitas jamás vas a llegar a la zona de configuraciones (mejor, porque en la zona donde están las configuraciones tienes el error más grande).

3. En tu código tienes esto:

Código
  1. movf   PORTC,W
  2.   andlw   b'00111111'
  3.   addwf   PCL,F
  4.   call      Configuracion

Eso está bastante mal, porque la instrucción addwf   PCL,F es el encabezado de las configuraciones. Esa instrucción debería estar dentro de la subrutina Configuracion.

Código
  1. movf   PORTC,W
  2.   andlw   b'00111111'
  3.   call      Configuracion

Y dentro de la rutina Configuracion:

Código
  1. Configuracion
  2. addwf PCL,F   ; Aquí debe estar la instrucción addwf PCL,F.
  3. goto Configuracion0 ; 0 0 0 0 0 0
  4. goto Configuracion1 ; 0 0 0 0 0 1
  5. goto Configuracion2 ; 0 0 0 0 1 0
  6.                          .
  7.                          .
  8.                          .

4. Tu rutina Configuración nunca retorna (nunca ejecuta la instrucción return).

Lo que sucede es que en tu rutina Configuración pones instrucciones de brinco:

    goto   Configuracion0
    goto   Configuracíon1
          .
          .

y en las respectivas zonas de códigos ejecutas un goto al programa principal.

Código
  1. Configuracion1
  2.               goto ActivaSalida
  3.                       .
  4.                       .
  5.                       .
  6.          ActivaSalida
  7.                goto        Principal

Nunca ejecutas Return.

5. Por estética, es mejor que todos los elementos de una rutina estén todos en un mismo archivo. ¿Qué es lo que sucede con tu código?

La rutina Configuracion hace brincos (goto) hacia instrucciones que se encuentran en tu programa principal. Lo mejor es que esas instrucciones se encuentren también dentro del archivo de la subrutina de Cofiguracion.

En fín, te mandé al correo el programa corregido. Este sí debes revisarlo muy bien, porque le corregí muchas cosas.

Sigue echándole muchas ganas. Yo también empecé así. Me ocurrió casi de todo. He cometido casi todos los errores que se pueden cometer en ensamblador y es por eso que he podido resolver los tuyos.

                Saludos.
« Última modificación: 9 Septiembre 2010, 18:32 pm por Tokes » En línea

Meta


Desconectado Desconectado

Mensajes: 3.438



Ver Perfil WWW
Re: Resolver problemas con tablas 6 bits.
« Respuesta #28 en: 10 Septiembre 2010, 04:21 am »

Hola, Meta:

En verdad que esta vez sí tenías muchos errores. Te mencionaré unos pocos:

1. La rutina para enviar mensaje al LCD nunca borraba la pantalla. Por eso el mensaje ocupaba todo el LCD.

Aquí te pongo la subrutina corregida. Nota que la única diferencia es que esta vez sí se borra la pantalla.

Código
  1. M24LC256_Mensaje_a_LCD
  2. movwf M24LC256_AddressHigh ; Apunta al inicio de la página correspondiente.
  3. clrf M24LC256_AddressLow
  4. call M24LC256_InicializaLectura
  5. call LCD_Borra    ; Borra la pantalla.
  6. M24LC256_LeeOtroByte
  7. call I2C_LeeByte ; Lee la memoria 24LC256.
  8. movwf M24LC256_ValorCaracter ; Guarda el valor de carácter.
  9. movf M24LC256_ValorCaracter,F ; Lo único que hace es posicionar flag Z. En caso
  10. btfsc STATUS,Z ; que sea "0x00", que es código indicador final
  11. goto M24LC256_FinMensaje ; del mensaje, sale de la subrutina.
  12. movf M24LC256_ValorCaracter,W ; Recupera el valor leído.
  13. call LCD_Caracter ; Lo visualiza en la pantalla del LCD.
  14. incf M24LC256_AddressLow,F ; Apunta a la siguiente posición.
  15. goto M24LC256_LeeOtroByte
  16. M24LC256_FinMensaje
  17. call M24LC256_FinalizaLectura
  18. return

Si lo he hecho en el programa principal y lo he quitado, lo has hecho aquí. Hay que tener en cuenta una cosa. El LDC es de 20x4. Uso las 4 líneas independiente, es decir. En una goto de configuración puede salir un mensaje en la línea 1. Luego otra en la líena 4. Si borra el LCD completo, sólo se ve el último mensaje. Se tiene que ver las 4 líneas independiente. Para mi hay que usar la rutina "LCD_LineaEnBlanco", puede que no sea la adecuata, pero lo nombro por si acaso, debo hacer más pruebas hasta que me salga.

2. En tu programa principal tienes un bucle infinito:

Código
  1. Principal
  2. movlw PAGINA_00
  3. call M24LC256_Mensaje_a_LCD
  4. call Retardo_2s
  5. goto Principal

Si no lo quitas jamás vas a llegar a la zona de configuraciones (mejor, porque en la zona donde están las configuraciones tienes el error más grande).

Dejé ese bucle infinito adrede para hacer pruebas, lo que me olvidé quitarlos con ;.


3. En tu código tienes esto:

Código
  1. movf   PORTC,W
  2.   andlw   b'00111111'
  3.   addwf   PCL,F
  4.   call      Configuracion

Eso está bastante mal, porque la instrucción addwf   PCL,F es el encabezado de las configuraciones. Esa instrucción debería estar dentro de la subrutina Configuracion.

Código
  1. movf   PORTC,W
  2.   andlw   b'00111111'
  3.   call      Configuracion

Y dentro de la rutina Configuracion:

Código
  1. Configuracion
  2. addwf PCL,F   ; Aquí debe estar la instrucción addwf PCL,F.
  3. goto Configuracion0 ; 0 0 0 0 0 0
  4. goto Configuracion1 ; 0 0 0 0 0 1
  5. goto Configuracion2 ; 0 0 0 0 1 0
  6.                          .
  7.                          .
  8.                          .

Lo tendré en cuenta, sólo quería ahorrar espacio, mejor lo pongo en el programa principal otra vez.

4. Tu rutina Configuración nunca retorna (nunca ejecuta la instrucción return).

Lo que sucede es que en tu rutina Configuración pones instrucciones de brinco:

    goto   Configuracion0
    goto   Configuracíon1
          .
          .

y en las respectivas zonas de códigos ejecutas un goto al programa principal.

Código
  1. Configuracion1
  2.               goto ActivaSalida
  3.                       .
  4.                       .
  5.                       .
  6.          ActivaSalida
  7.                goto        Principal

Nunca ejecutas Return.

En los ejemplos del libro www.pic16f84a.org se usa sin el return. Los return se usa en subrutinas, es más aconsejable para que se sepa que si tienes un return, tienes un subrutina que el que lo llama es "call".

En realidad no hace falta los return, si hace falta se los pondré, ya que crees que hay que ponerlos. Recuerdo que en el libro jamás se usa un return en este tipo de tablas.


5. Por estética, es mejor que todos los elementos de una rutina estén todos en un mismo archivo. ¿Qué es lo que sucede con tu código?

La rutina Configuracion hace brincos (goto) hacia instrucciones que se encuentran en tu programa principal. Lo mejor es que esas instrucciones se encuentren también dentro del archivo de la subrutina de Cofiguracion.

En fín, te mandé al correo el programa corregido. Este sí debes revisarlo muy bien, porque le corregí muchas cosas.

Sigue echándole muchas ganas. Yo también empecé así. Me ocurrió casi de todo. He cometido casi todos los errores que se pueden cometer en ensamblador y es por eso que he podido resolver los tuyos.

                Saludos.

Lo voy a meter todo otra vez en el archivo principal. Los gotos. ;)

Gracias por la ayuda.

Hice cambios, puse los gotos otra vez en la primera página. Hice cosas que tocando el RC0 a 1, para que se muestre que el mensje 1 se vea en la primera línea, y si pulsas el RC0 otra vez, se muestre en la tercera línea del LCD pero se ve siempre en la primera.

Recuerda que cada entrade del LCD puede haber mensajes a la vez en diferentes líneas, no que se borre toda la pantalla y que se vea sola una línea por cada actualización. Esto de la EEPROM y asm es un poco infierno.

Gracias de nuevo por tu tiempo.
Te envío otra vez.
En línea

Tokes

Desconectado Desconectado

Mensajes: 140


Ver Perfil
Re: Resolver problemas con tablas 6 bits.
« Respuesta #29 en: 10 Septiembre 2010, 20:13 pm »

Hola, Meta:

Bien, para arreglar tus problemas con el LCD vamos a hacer lo siguiente:

Citar
Recuerda que cada entrade del LCD puede haber mensajes a la vez en diferentes líneas, no que se borre toda la pantalla y que se vea sola una línea por cada actualización. Esto de la EEPROM y asm es un poco infierno.

Para solucionar eso debes quitar de la subruitna "M24LC256_Mensaje_a_LCD" la instrucción que borra la pantalla (call   LCD_borra).

Bueno, hasta ahí se soluciona el problema de que se borre un mensaje al poner otro.

Ahora, debes tomar en cuenta otro aspecto importantísimo: para visualizar un mensaje en una línea determinada debes:

1. Colocar el cursor al principio de la línea correspondiente.
2. Visualizar espacios en blanco hasta que se llene la línea (es decir, borrar la línea).
3. Regresar el cursor al principio de esa línea.

Aquí te dejo las funciones que hacen eso para cada una de las líneas del LCD.

Código
  1. LCD_Linea1EnBlanco
  2. call LCD_Linea1   ; Sitúa el cursor al principio de la línea 1.
  3. call LCD_LineaEnBlanco  ; Borra la línea.
  4. call LCD_Linea1   ; Regresa el cursor al principio de la línea.
  5. return
  6.  
  7. LCD_Linea2EnBlanco    ; Similar que la anterior.
  8. call LCD_Linea2
  9. call LCD_LineaEnBlanco
  10. call LCD_Linea2
  11. return
  12.  
  13. LCD_Linea3EnBlanco   ; Similar que la anterior.
  14. call LCD_Linea3
  15. call LCD_LineaEnBlanco
  16. call LCD_Linea3
  17. return
  18.  
  19. LCD_Linea4EnBlanco   ; Similar que la anterior.
  20. call LCD_Linea4
  21. call LCD_LineaEnBlanco
  22. call LCD_Linea4
  23. return

Esas rutinas pégalas en tu archivo "LCD_4BIT.INC".

Siempre que quieras visualizar un mensaje en una línea determinada deberás llamar esas rutinas. Por ejemplo, en el caso de la Configuración0, sería algo más o menos así:

Código
  1. Configuracion0
  2.    call LCD_Linea1EnBlanco ; Borra la línea 1 y se sitúa al principio de dicha línea.
  3. movlw PAGINA_00   ; Lee a partir de la dirección 00 de esta página
  4. call M24LC256_Mensaje_a_LCD ; de la memoria.
  5. call Retardo_2s
  6. goto ActivaSalida

Hazlo así y te debería funcionar. Espero tus comentarios.

                 ¡¡¡Buen día!!!
« Última modificación: 10 Septiembre 2010, 20:25 pm por Tokes » En línea

Páginas: 1 2 [3] 4 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayundeme a resolver esto problemas :(
Programación C/C++
alkimista1988 1 1,999 Último mensaje 14 Julio 2011, 22:53 pm
por El_Java
problemas con ide no se como resolver poo
Programación C/C++
gorge2004 1 1,916 Último mensaje 8 Marzo 2012, 18:31 pm
por darkvidhack
Problemas de seguridad en HTML5 webrtc permite resolver tu ip local
Bugs y Exploits
WHK 6 7,983 Último mensaje 2 Septiembre 2016, 06:20 am
por EFEX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines