Autor Tema: Dudas con variables en banco 0 de Pic 16f877a  (Leído 3192 veces)

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

Desconectado P@tolin

  • PIC10
  • *
  • Mensajes: 13
Dudas con variables en banco 0 de Pic 16f877a
« en: 25 de Julio de 2011, 19:34:16 »
Hola Amigos:


Estoy confundido.

Estoy trabajando con un 16F877a, a 20MHz, y nunca he grabado datos en la eeprom, asi que estoy practicando. En el 16F84a nunca tuve problemas, pero ahora si.

Tengo declaradas unas variables, desde la direccion 46H hasta la 55H.

Hice una rutina, de la cual, utilizo otras 2 variables, una, que es la direccion de la eeprom, y la otra el dato a grabar.

Entonces hago lo siguiente:


MOVLW 0X46
MOVWF TMP1  ;GUARDA DIRECCION DE LA VARIABLE

MOVLW 0X0
MOVWF TMP2 ;GUARDA LA DIRECCION DE LA MEMORIA EEPROM

Lo que hago, es usar el FSR para dar apuntar a la direccion de la variable (empezando por la 0x46), para luego utilizar el INDF para volcarla  al dato a grabar en la primera direccion de la eeprom (valor de TMP2).

Entonces, hago el procedimiento de grabacion que aparece en el datasheet, salvo por un pequeño detalle.

Utilizando el simulador del MPLAB, solo graba el primer dato que tengo en la primera variable (46H), que es un cero, y cuando  se incrementan TMP1 y TMP2 con sus respectivos INCF TM1,1 , en la ventana de Watch, el valor no cambia, sigue estando en 46 y 0 respectivamente. Lo raro, que en W aparece un 8, cuando traspaso el TMP2 a la direccion de EEADR, por lo tanto, supuestamente que el incremento debiese ser 0x01, internamente es 0x8, entonces, graba un dato aleatoreo que no es valor de la variable a la que se esta apuntando, y de la direccion 0x0 de la eeprom, salta y graba un cero a la 0x08....


Tengo la impresion, que como tengo las variables en el banco cero, cuando se requiere cambiar los bancos para trabajar con EEADR y EEDATA, y ya no es el banco cero, las variables  y sus valores se "pierden".

¿Esto es asi?. Yo pensaba que estas declaraciones se mantendrian sin importar el banco.

¿Como lo puedo solucionar¿.

Muchas gracias y ojala me ayuden.


Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Dudas con variables en banco 0 de Pic 16f877a
« Respuesta #1 en: 25 de Julio de 2011, 23:08:40 »
Sería mejor si muestras el código que estás utilizando.... Yo no recuerdo bien como trabajar en el modo indirecto, pero para poder mover un dato de un registro a otro en el modo directo si tienen que estar en el mismo banco o sino se puede recurrir a almacenar el dato del registro en W, luego cambiar de banco y ahí si pasar el valor de W al registro necesario.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado P@tolin

  • PIC10
  • *
  • Mensajes: 13
Re: Dudas con variables en banco 0 de Pic 16f877a
« Respuesta #2 en: 26 de Julio de 2011, 00:19:02 »
Sería mejor si muestras el código que estás utilizando.... Yo no recuerdo bien como trabajar en el modo indirecto, pero para poder mover un dato de un registro a otro en el modo directo si tienen que estar en el mismo banco o sino se puede recurrir a almacenar el dato del registro en W, luego cambiar de banco y ahí si pasar el valor de W al registro necesario.

Gracias por responder.

Ni en el modo directo ni indirecto, las variables declaradas, no me funcionan en otro banco que no sea el 0.

Quizas sea por el cambio de arquitectura, ya que no recuerdo alguna situacion asi en el 16f84.

De todas formas, hace unos pocos minutos logre hacer funcionar, y tal como lo dices, tuve que guardar los datos en W, y lluego cambiar de banco, cambiando segun banco 0, 2 y 3. Como EEADR y EEDATA estan en el banco 2, tuve que modificar la direccion de TMP1 y TMP2, para que estuviesen en el banco 2, asi evitaba mas movimientos de banco.

Te agradezco la ayuda, y ojala que esto sirva para quienes nos iniciamos.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Dudas con variables en banco 0 de Pic 16f877a
« Respuesta #3 en: 26 de Julio de 2011, 00:28:54 »
  Según el datasheet del F84A las direcciones en el banco 1 están mapeadas hacia el banco 0. Seguramente es por ello que no ocurría ningún error, ya que por mas que estuvieses en el banco 1 terminabas accediendo al banco 0.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado P@tolin

  • PIC10
  • *
  • Mensajes: 13
Re: Dudas con variables en banco 0 de Pic 16f877a
« Respuesta #4 en: 26 de Julio de 2011, 20:19:55 »
  Según el datasheet del F84A las direcciones en el banco 1 están mapeadas hacia el banco 0. Seguramente es por ello que no ocurría ningún error, ya que por mas que estuvieses en el banco 1 terminabas accediendo al banco 0.

Gracias por tu post.

Ya hace mucho tiempo que lei el datasheet del f84 que ya ni lo recuerdo.

Y efectivamente es como dices, asi es que por esa razon nunca tuve problemas, salvo hasta ahora con otra linea de microchip.

Gracias a todos, ahora me quedo mas claro ese punto y logre mi objetivo.


 

anything