Resolver problemas con tablas 6 bits.

Iniciado por Meta, 3 Septiembre 2010, 07:32 AM

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

Meta

Hola:

Pues no, no funciona, se comporta todo como desde el principio. Por lógica debería funcionar.

Código (asm) [Seleccionar]

Principal
movf PORTC,W ; Lee los sensores.
andlw b'00111111' ; Máscara para quedarse con el valor de los sensores.
addwf PCL,F ; Salta a la configuración adecuada.
Configuracion0
call LCD_Linea2EnBlanco
movlw PAGINA_00 ; Lee a partir de la dirección 00 de esta página
call M24LC256_Mensaje_a_LCD ; de la memoria.
goto ActivaSalida
Configuracion1
call LCD_Linea4EnBlanco
movlw PAGINA_01 ; Lee a partir de la dirección 01 de esta página
call M24LC256_Mensaje_a_LCD ; de la memoria.
goto ActivaSalida


En l alibrería LCD_4BIT.INC he colocado las instrucciones que me dijiste.
Código (asm) [Seleccionar]

LCD_Linea1EnBlanco
call LCD_Linea1   ; Sitúa el cursor al principio de la línea 1.
call LCD_LineaEnBlanco  ; Borra la línea.
call LCD_Linea1   ; Regresa el cursor al principio de la línea.
return

LCD_Linea2EnBlanco    ; Similar que la anterior.
call LCD_Linea2
call LCD_LineaEnBlanco
call LCD_Linea2
return

LCD_Linea3EnBlanco   ; Similar que la anterior.
call LCD_Linea3
call LCD_LineaEnBlanco
call LCD_Linea3
return

LCD_Linea4EnBlanco   ; Similar que la anterior.
call LCD_Linea4
call LCD_LineaEnBlanco
call LCD_Linea4
return


Las cosas que debería funcionar por lógica a veces sorprende.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Tokes

Mi buen Meta:

Te faltaron algunas intrucciones:

Código (asm) [Seleccionar]

    movf   PORTC,W
    andlw  b'00111111'
    addwf  PCL,F
    goto    Configuracion0   ; Te faltaron estas instrucciones.
    goto    Configuracion1
    goto    Configuracion2
            .
            .
            .


Pero ya está corregido. Te lo envié por si las dudas.

             Saludos.

Meta

#32
Que despiste.

Muchas gracias, voy hacer más pruebas, parece que ahora si funciona.

Saludo.

Edito:

Uffffffffffff, algo me impresiona y e decepciona el asm. Espero no recurrir al C18 o CCS por culpa de esta tontería.

He colocado los mensajes en las configuraciones de la EEPROM. Precisamente me sale este aviso:

Código (asm) [Seleccionar]

IF (FinTabla > 0xFF)
ERROR "¡CUIDADO!: La tabla ha superado el tamaño de la página de los"
MESSG "primeros 256 bytes de memoria ROM. NO funcionará correctamente."
ENDIF


He dejado de usar las tablas para no tener que cambiar de niveles, por eso uso la EEPROM y descubro que con o sin EEPROM externa me pasa lo mismo.

¿Al final debo usar el truco para superar los 256 bits por obligación aunque use la EEPROM externa?
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Tokes

#33
Hola, Meta:

Me parece que los mensajes todavía los tienes en la programación ocupando espacio. Debes quitarlos, ya que no los ocupas puesto que ahora están en la 24LC256.

Si ya los quitaste, entonces la directiva IF FinTabla > 0xFF... debes ponerla después de los goto's, más o menos así:

Código (asm) [Seleccionar]

  movf   PORTC,W
  andlw  b'00111111'
  addwf  PCL,F
  goto    Configuracion0
  goto    Configuracion1
  goto    Configuracion2
          .
          .
          .
  goto    ConfiguracionX
FinTabla

  IF (FinTabla > 0xFF)
   ERROR "CUIDADO!: La tabla ha superado el tamaño de la página de los"
  MESSG "primeros 256 bytes de memoria ROM. NO funcionará correctamente."
  ENDIF

Configuracion0
   ; Código de la configuracion 0.

Configuracion1
  ; Código de la configuracion 1.

        .
        .
        .
 


Con respecto a lo de usar lenguaje C, pues te vendría mejor, ya que el compilador gestiona la memoria tanto de datos como de programa y no hay que seleccionar bancos ni páginas de programa como en ensamblador.

Si aún haciendo lo que te dije sigue marcando error, entonces sí debes usar el "truquito" para poner la tabla.

            Saludos.