• Martes 5 de Noviembre de 2024, 20:53

Autor Tema:  Instrucciones Para Seleccionar Banco De Memoria  (Leído 1980 veces)

xernovil

  • Miembro activo
  • **
  • Mensajes: 30
    • Ver Perfil
Instrucciones Para Seleccionar Banco De Memoria
« en: Martes 13 de Marzo de 2007, 17:47 »
0
Buenas, aquí estoy otra vez... con mis dudas, jejejeje, pues bién, tengo este código para un PIC16F873:

Código: Text
  1.  
  2.    bcf STATUS,RP0;
  3.    bcf STATUS,RP1
  4.    movf param01_rd_flsh,w
  5.    bsf STATUS,RP1;
  6.    movwf EEADR;
  7.    bcf STATUS,RP1;
  8.    movf param00_rd_flsh,w
  9.    bsf STATUS,RP1;
  10.    movwf EEADRH
  11.    bsf STATUS, RP1;
  12.    bsf STATUS, RP0;
  13.    bsf EECON1,EEPGD;
  14.    bsf EECON1,RD;
  15.    nop
  16.    nop
  17.    bcf STATUS,RP0
  18.  
  19.  

y buscando por internet no me queda claro qué hacen las instrucciones, por ejemplo, según un libro que tengo, al poner [bcf STATUS,RP0] estoy seleccionando el banco 0, no?

Por lo tanto en el código de después, estoy seleccionando el banco 1?

No se bien bien por qué se hace, pero lo veo un poco ambiguo, si selecciono primero un banco, y luego otro, el primero no queda "descartado"?

En fin, en su totalidad el código no lo entiendo muy bien... si alguien con un poco de tiempo y paciencia me lo puede explicar, estaré muy agradecido, mientras seguiré "decodificando" el resto del código que si que entiendo. Lo único que pienso es que se trata de escribir y/o leer en la memoria flash y/o e2prom... espero no estar equivocado en eso...

Gracias por anticipado.

Huguen_aus_Tirol

  • Miembro MUY activo
  • ***
  • Mensajes: 318
    • Ver Perfil
    • http://www.erhard-automation.co.cc
Re: Instrucciones Para Seleccionar Banco De Memoria
« Respuesta #1 en: Martes 13 de Marzo de 2007, 19:37 »
0
Hola!
Bueno, el 873 dispone de 4 bancos de memoria RAM, que debemos seleccionar adecuadamente para tener acceso a los registros que queremos. Esto se logra con los bits RP0 y RP1 del registro STATUS. Y como puedes ver (en el Data Sheet!) este registro está en los cuatro bancos...
Al seleccionar un banco, los otros quedan "no" direccionados, por decirlo de alguna forma.
Esto es así, porque al direccionar de formar directa alguna posición de RAM el "opcode" contiene los 7 bits de menor peso de la dirección, en tanto que los otros 2 bits de mayor peso están contenidos en los bits RPx (2^9 = 512 posiciones RAM) En caso del direccionamiento indirecto, es algo distinto, pero dejémoslo así...
Una mejor explicación encontrarás en la hoja de datos, sección 2.5 ;)
Si, en este micro puedes escribir en la flash. En el Data Sheet encontrarás en detalle como se hace...

Espero haber sido más o menos claro!

Saludos

pic-man

  • Miembro activo
  • **
  • Mensajes: 54
    • Ver Perfil
    • http://micropic.wordpress.com
Re: Instrucciones Para Seleccionar Banco De Memoria
« Respuesta #2 en: Miércoles 14 de Marzo de 2007, 01:48 »
0
Como ya dijo Huguen_aus_Tirol los 4 bancos de memoria se seleccionan a traves de los bits RP0 y RP1 del registro STATUS de la siguiente manera

Código: Text
  1.  
  2. RP1  RP0
  3.  0   0  BANCO 0
  4.  0   1  BANCO 1
  5.  1   0  BANCO 2
  6.  1   1  BANCO 3
  7.  
  8.  

si te fijas en el codigo que pudiste primero ponen en cero (bcf) el bit RP0 y despues ponen en cero el bit RP1, eso no es para nada redundante, lo hacen para asegurarse asi de seleccionar el banco de memoria 0, despues hacen uno (bsf) el bit RP1 y dejan en cero el RP2 con eso seleccionan el banco 2, posteriormente ponen en 1 los dos bits, asi pasan al banco 3

espero no haberme confundido con el orden de los bancos, sigue el consejo de Huguen_aus_Tirol y consulta la hoja de datos del pic

xernovil

  • Miembro activo
  • **
  • Mensajes: 30
    • Ver Perfil
Re: Instrucciones Para Seleccionar Banco De Memoria
« Respuesta #3 en: Miércoles 14 de Marzo de 2007, 19:43 »
0
Sí, tenéis razón, yo todavía pensaba en el 16f84 que solo tiene 2 bancos de memoria, y eso me generó la duda. Gracias a los 2