Sistemas integrados: registros bancarios / apilados

El microcontrolador 8051 tiene un total de 128 bytes de RAM. Discutiremos sobre la asignación de estos 128 bytes de RAM y examinaremos su uso como pila y registro.

Asignación de espacio de memoria RAM en 8051

A los 128 bytes de RAM dentro del 8051 se les asigna la dirección 00 a 7FH. Se puede acceder a ellos directamente como ubicaciones de memoria y se dividen en tres grupos diferentes de la siguiente manera:

  • Se reservan 32 bytes de las ubicaciones 00H a 1FH para los bancos de registros y la pila.

  • Se reservan 16 bytes de las ubicaciones 20H a 2FH para la memoria de lectura / escritura direccionable por bits.

  • Se utilizan 80 bytes de las ubicaciones 30H a 7FH para almacenamiento de lectura y escritura; se llama comoscratch pad. Estas 80 ubicaciones de RAM se utilizan ampliamente con el propósito de almacenar datos y parámetros por los programadores 8051.

Registrar bancos en 8051

Se reserva un total de 32 bytes de RAM para los bancos de registros y la pila. Estos 32 bytes se dividen en cuatro bancos de registros en los que cada banco tiene 8 registros, R0 – R7. Las ubicaciones de RAM de 0 a 7 se reservan para el banco 0 de R0 – R7, donde R0 es la ubicación de RAM 0, R1 es la ubicación de RAM 1, R2 es la ubicación de memoria 2, y así sucesivamente, hasta la ubicación de memoria 7, que pertenece a R7 del banco 0.

El segundo banco de registros R0 – R7 comienza en la ubicación 08 de la RAM y va a las ubicaciones OFH. El tercer banco de R0 – R7 comienza en la ubicación de memoria 10H y va a la ubicación 17H. Finalmente, las ubicaciones de RAM 18H a 1FH se reservan para el cuarto banco de R0-R7.

Banco de registro predeterminado

Si las ubicaciones de RAM 00–1F se reservan para los cuatro bancos de registros, ¿a qué banco de registros de R0 – R7 tenemos acceso cuando se enciende el 8051? La respuesta es el banco de registros 0; es decir, se accede a las ubicaciones de RAM de 0 a 7 con los nombres R0 a R7 al programar el 8051. Porque es mucho más fácil referir estas ubicaciones de RAM por nombres como R0 a R7, en lugar de sus ubicaciones de memoria.

Cómo cambiar de banco de registro

El banco de registros 0 es el predeterminado cuando el 8051 está encendido. Podemos cambiar a los otros bancos usando el registro PSW. Los bits D4 y D3 de la PSW se utilizan para seleccionar el banco de registros deseado, ya que se puede acceder a ellos mediante las instrucciones direccionables de bits SETB y CLR. Por ejemplo, "SETB PSW.3" establecerá PSW.3 = 1 y seleccionará el registro bancario 1.

RS1 RS2 Banco seleccionado
0 0 Banco0
0 1 Banco1
1 0 Banco2
1 1 Banco3

Stack y sus operaciones

Apilar en el 8051

La pila es una sección de una RAM utilizada por la CPU para almacenar información como datos o direcciones de memoria de forma temporal. La CPU necesita esta área de almacenamiento considerando un número limitado de registros.

Cómo se accede a las pilas

Como la pila es una sección de una RAM, hay registros dentro de la CPU para señalarla. El registro utilizado para acceder a la pila se conoce como registro de puntero de pila. El puntero de pila en el 8051 tiene un ancho de 8 bits y puede tomar un valor de 00 a FFH. Cuando se inicializa el 8051, el registro SP contiene el valor 07H. Esto significa que la ubicación de RAM 08 es la primera ubicación utilizada para la pila. La operación de almacenamiento de un registro de CPU en la pila se conoce comoPUSH, y recuperar el contenido de la pila en un registro de CPU se llama POP.

Empujando en la pila

En el 8051, el puntero de pila (SP) apunta a la última ubicación utilizada de la pila. Cuando los datos se insertan en la pila, el puntero de la pila (SP) se incrementa en 1. Cuando se ejecuta PUSH, el contenido del registro se guarda en la pila y SP se incrementa en 1. Para insertar los registros en la pila, deben usar sus direcciones RAM. Por ejemplo, la instrucción "PUSH 1" empuja el registro R1 a la pila.

Saliendo de la pila

Volver a colocar el contenido de la pila en un registro dado es lo opuesto al proceso de empujar. Con cada operación emergente, el byte superior de la pila se copia al registro especificado por la instrucción y el puntero de la pila se reduce una vez.