Menu

TIPOS DE MEMORIA DEL MICROPROCESADOR 8051

El 8051 tiene tres tipos de memoria. Es necesario tener una comprensión básica de estos tipos de memoria para programar eficazmente el 8051.

Los tipos de memoria se ilustran en el siguiente gráfico. Ellos son: On-Chip de memoria, memoria externa de código y RAM externa.


Tipos de memoria

El Chip de memoria se refiere a cualquier memoria (RAM, código u otro) que existe físicamente en el microcontrolador por sí mismo. El chip de memoria puede ser de varios tipos, pero lo veremos más adelante.

El código de la Memoria externa es un programa (o código) que reside en el chip. Esto es a menudo bajo la forma de una EPROM externa.

La memoria RAM externa es la que reside fuera del chip de memoria RAM. Esto es bajo la forma de una memoria estándar RAM estática o flash RAM.

Código de memoria

El código de memoria es la memoria que contiene el programa del 8051 que realmente se utiliza. Esta memoria se limita a 64K y viene en muchas formas y tamaños: el código de memoria se puede encontrar en el chip, o grabados en el microprocesador como ROM o EPROM. Este código también pueden almacenarse completamente off-chip en una ROM externa o, más comúnmente, una EPROM externa. La Flash RAM es también otro método popular de almacenar un programa. Varias combinaciones de estos tipos pueden también ser utilizados, es decir, la memoria puede tener 4K de memoria en el chip de codificación y 64k de memoria del código off-chip en una EPROM.

Cuando el programa es almacenado en el chip del máximo de 64K a menudo se reduce a 4k, 8k, o 16k. Esto varía dependiendo de la versión del micro que se está utilizando. Cada versión ofrece capacidades específicas y uno de los factores distintivos del chip a chip es cuánto espacio ROM/EPROM tiene.

Sin embargo, el código de memoria se implementa en el off-chip EPROM. Esto es especialmente utilizado en los sistemas de desarrollo de bajo costo y en sistemas desarrollados por los estudiantes.

Consejos de programación: Desde el código de memoria, el Chip está restringido a 64K y en el 8051 los programas lo limitan a 64K. Algunos compiladores y ensambladores ofrecen maneras de conseguir alrededor de este límite cuando se utiliza con hardware especialmente por cable, sin embargo, sin estos compiladores especiales y del hardware, los programas se limitan a 64K.

RAM externo

La RAM interna del 8051 también es compatible con lo que se llama una RAM externa.
Como su nombre indica, la RAM externa es cualquier memoria de acceso aleatorio que se encuentra en el chip. Puesto que la memoria es off-chip no es tan flexible en términos de acceso y también es más lenta. Por ejemplo, para incrementar una RAM interna en la ubicación 1 se requiere solamente 1 instrucción y 1 ciclo de 1 instrucción. Para incrementar un valor de 1 byte almacenado en la memoria RAM externa se necesitan instrucciones de 7 ciclos. En este caso, la memoria externa es 7 veces más lenta.

Consejos de programación: El 8051 sólo puede encontrarse con 64k de RAM. Para ampliar la memoria RAM más allá de este límite requiere de trucos en el hardware y la programación. Que se tenga que hacer esta "programación a mano" desde muchos compiladores y ensambladores, para poder proporcionar apoyo para programas superiores a 64 k, el 8051no soporta más de 64 k de RAM. Esto es un gran inconveniente ya que en mi experiencia personal los programas generalmente necesitan 64k por lo que le falta más memoria RAM. Si necesitas más de 64k de RAM, revisa las características del micro para ver si el compilador admite más, pero si no, debes estar preparado para hacerlo a mano.

Memoria On-Chip

Como se ha mencionado al principio de esta entrada, el 8051 incluye una cierta cantidad de memoria en el chip interno. Esta memoria en el chip es una de estos dos tipos: memoria RAM interna y registro de función especial (SFR). El diseño de la memoria interna de la 8051 se presenta en el siguiente mapa de memoria:

Mapa de memoria del 8051

Como se ilustra en este mapa, el 8051 tiene un banco de 128 bytes de RAM interna. Esta RAM interna se encuentra en el chip del 8051y es la RAM más rápida disponible, y también la más flexible en cuanto a la lectura, escritura y modificar su contenido. Esta RAM interna es volátil, así que cuando se restablece el 8051 dicha memoria se borra.

Los 128 bytes de ram interna se subdivide como se muestra en el mapa de memoria. Los primeros 8 bytes (00h - 07h) son "registro banco 0". Manipulando ciertos SFRs, un programa puede optar por utilizar los bancos de registro 1, 2 ó 3. Estos bancos de registro alternativo están ubicados en la RAM interna en direcciones de 08h a través de 1Fh. Analizaremos "registrar bancos" en una entrada posterior. Por ahora es suficiente saber que "viven" y forman parte de la RAM interna.

La Memoria de bit también se encuentra y es parte de la RAM interna. Muy pronto hablaremos más sobre memoria de bit, pero para sólo tener en cuenta esa memoria de bit en realidad reside en la RAM interna, en las direcciones de 20h a través 2Fh.

Los restantes 80 bytes de RAM interna, desde direcciones 30h a 7Fh, pueden utilizarse por las variables de usuario que deben consultarse con frecuencia o a alta velocidad. Esta zona también es utilizada por el microcontrolador como un área de almacenamiento para la pila de funcionamiento. Este hecho limita gravemente la pila 8051s ya que, como se ilustra en el mapa de memoria, la zona reservada para la pila es de sólo 80 bytes y es generalmente menos puesto que estos 80 bytes tienen que ser compartidos entre las variables de pila y usuario.

Registro de bancos

El 8051 usa 8 registros "R" que se utilizan en muchas de sus instrucciones. Estos registros "R" están numerados del 0 al 7 (R0, R1, R2, R3, R4, R5, R6 y R7). Estos registros se utilizan generalmente para ayudar a manipular valores y mover los datos de localización de una memoria a otra. Por ejemplo, para agregar el valor de R4 al acumulador, que ejecute la siguiente instrucción:

ADD A, R4
Por lo tanto si el acumulador (A) figura el valor 6 y R4 el valor 3, el acumulador contendrá el valor 9 después fue ejecutada esta instrucción.



Sin embargo, como muestra el mapa de memoria, el R4 registro "R" es realmente parte de RAM interna. Específicamente, R4 es Dirección 04h. Esto se puede ver en la sección verde brillante del mapa de memoria. Por lo tanto la instrucción anterior logra lo mismo que la operación siguiente:

ADD A, 04h
Esta instrucción suma el valor encontrado en la dirección de RAM interna 04h con el valor del acumulador, dejando el resultado en el acumulador. Puesto que R4 es realmente interno RAM 04h, la instrucción anterior logra efectivamente la misma cosa.
Pero ¡ cuidado!, como muestra el mapa de memoria, el 8051 tiene cuatro bancos de registro distintos. Cuando primero es arrancado el 8051, el registro de banco 0 (direcciones h 00 a 07h) se utiliza de forma predeterminada. Sin embargo, el programa podrá indicar al 8051 para utilizar uno de los bancos de registro alterno; es decir, registro de bancos de 1, 2 ó 3. En este caso, R4 ya no será la misma que RAM interna Dirección 04h. Por ejemplo, si su programa instruye el 8051 utilizar registro Banco 3, registro "R" R4 ahora será sinónimo de RAM interna Dirección 1Ch.

El concepto de registro de bancos agrega un gran nivel de flexibilidad para el 8051, especialmente cuando se trata con interrupciones (hablaremos de interrupciones más adelante). Sin embargo, recuerde siempre que los bancos registro realmente residen en los primeros 32 bytes de RAM interna.

Consejos de programación: Si sólo utiliza el primer registro de banco (es decir, 0), puede utilizar lugares de RAM interna 08h a través de 1Fh para su propio uso. Pero si usted planea usar registra bancos 1, 2 ó 3, sea muy cuidadoso acerca de cómo utilizar direcciones por debajo de 20h ya que puede terminar de  sobrescribir el valor de sus registros de "R"

Memoria de bit

El 8051, siendo un microcontrolador orientado a las comunicaciones, le da al usuario la posibilidad de acceder a un número de bits variables. Estas variables pueden ser 0 o 1.

Hay 128 bits variables disponibles para el usuario, en las direcciones 00h hasta 7Fh. El usuario podrá hacer uso de estas variables con comandos como SETB y CLR. Por ejemplo, para establecer el bit número 24 (hexadecimal) en 1 se ejecutaría la instrucción:

SETB 24h
Es importante señalar que la memoria de Bit es realmente parte de la RAM interna. De hecho, las variables de 128 bits ocupan los 16 bytes de RAM interna de 20h a través 2Fh. Por lo tanto, si se escribe el valor FFh a dirección de RAM interna 20h efectivamente ha establecido bits h 00 a 07h. Es decir:
MOV 20h #0FFh
y es equivalente a:

SETB 00h
SETB 01h
SETB 02h
SETB 03h
SETB 04h
SETB 05h
SETB 06h
SETB 07h

Como se ilustra arriba, la memoria de bit no es realmente un nuevo tipo de memoria. Es sólo un subconjunto de RAM interna. Pero desde el 8051 se proporciona instrucciones especiales para acceder a estos 16 bytes de memoria.  Sin embargo, siempre tenga en cuenta que es sólo un subconjunto de RAM interna y que las operaciones que se realizan en la RAM interna puede cambiar los valores de las variables de bit.

Consejos de programación: Si su programa no utiliza pocas variables, puede utilizar lugares de la RAM interna 20h hasta 2Fh para su propio uso. Pero si planea usar pocas variables, sea muy cuidadoso sobre el uso de direcciones de 20h a través 2Fh ya que se puede terminar por  sobrescribir el valor de las variables.

Comando SETB 80h

Ambas instrucciones logran lo mismo. Sin embargo, usando el comando SETB se convertirá en la línea P0.0 sin afectar el estado de cualquiera de las otras líneas de salida P0. El comando MOV efectivamente desactiva todas las otras líneas de salida que, en algunos casos, pueden no ser aceptables.

Consejos de programación: De forma predeterminada, el 8051 Inicializa el puntero de pila (SP) a las 07h al arranca el microcontrolador. Esto significa que la pila se comienza con la dirección 08h y se amplia hacia arriba. Si va a utilizar los registro alternos de los bancos (1, 2 ó 3) debe inicializar la pila puntero a una dirección sobre el mayor banco de registro que va a utilizar, de lo contrario la pila sobrescribe a sus bancos de registro alterno. Del mismo modo, si va a utilizar pocas variables es generalmente una buena solución el inicializar el puntero de pila en un valor mayor que 2Fh de garantizar que sus variables están protegidas de la pila.

Función especial (SFR) registro de memoria

Registros de función especial (SFRs) son áreas de memoria que controlan la funcionalidad específica del procesador 8051. Por ejemplo, cuatro SFRs permiten el acceso a la 8051s 32 líneas de entrada/salida. SFR nos permite que un programa pueda leer o escribir en el puerto de serie 8051s. Otros SFRs permiten al usuario configurar la velocidad de respuesta, contadores de velocidad, control y acceso y configuración el sistema de interrupción de 8051s.

Cuando se está programando, SFRs tienen la ilusión de ser memoria interna. Por ejemplo, si quieres escribir el valor "1" en hex ubicación 50 RAM interna podría ejecutar la instrucción:

MOV 50h, h #01
Del mismo modo, si quieres escribir el valor "1" en el puerto serial 8051s escribir este valor el SFR SBUF, que tiene una dirección SFR de 99 Hex. Por lo tanto, para escribir el valor "1" en el puerto serie se ejecutaría la instrucción:

MOV 99 #01 h, h
Como puedes ver, parece que el SFR es parte de la memoria interna. Este no es el caso. Cuando se utiliza este método de acceso a la memoria (su dirección directa), cualquier instrucción que tiene una dirección de 00h a 7Fh se refiere a una dirección de memoria RAM interna y cualquier instrucción con una dirección de 80h hasta FFh se refiere a un registro de control SFR.

Consejos de programación: los SFRs se utilizan para controlar las funciones de forma del 8051. Cada SFR tiene un propósito específico y formato que se discutirá más adelante. No todas las direcciones por encima de 80h se asignan a SFRs. Sin embargo, esta área no puede utilizarse como memoria RAM adicional aunque no se ha asignado una dirección dada a un SFR.

Escrito por Archie Tecnology

Si te ha gustado esta entrada y te ha sido de utilidad, por favor, ayuda a otros a encontrarnos con un Me Gusta en Facebook, o , un Twitter. Además para que puedas estar informado puntualmente de nuestras novedades puedes hacerte seguidor de este blog y seguirnos en nuestras redes sociales. Muchas gracias por su confianza, que es por lo que trabajamos y hace superarnos día a día.


ARTÍCULOS RELACIONADOS



7 comentarios:

  1. Genial, ojalá puedas seguir compartiendo más info sobre este micro. Llegué a él de manera casual, cuando una tarjeta en mi trabajo se malogró. Ahora ando informándome poco a poco sobre este tipo de micros.
    Gracias, espero poder leer más posts tuyos!

    ResponderEliminar
  2. Genial, ojalá puedas seguir compartiendo más info sobre este micro. Llegué a él de manera casual, cuando una tarjeta en mi trabajo se malogró. Ahora ando informándome poco a poco sobre este tipo de micros.
    Gracias, espero poder leer más posts tuyos!

    ResponderEliminar
  3. Genial, ojalá puedas seguir compartiendo más info sobre este micro. Llegué a él de manera casual, cuando una tarjeta en mi trabajo se malogró. Ahora ando informándome poco a poco sobre este tipo de micros.
    Gracias, espero poder leer más posts tuyos!

    ResponderEliminar
  4. Genial, ojalá puedas seguir compartiendo más info sobre este micro. Llegué a él de manera casual, cuando una tarjeta en mi trabajo se malogró. Ahora ando informándome poco a poco sobre este tipo de micros.
    Gracias, espero poder leer más posts tuyos!

    ResponderEliminar
  5. Genial, ojalá puedas seguir compartiendo más info sobre este micro. Llegué a él de manera casual, cuando una tarjeta en mi trabajo se malogró. Ahora ando informándome poco a poco sobre este tipo de micros.
    Gracias, espero poder leer más posts tuyos!

    ResponderEliminar