Sistemas integrados: registros

Los registros se utilizan en la CPU para almacenar información de forma temporal, que podrían ser datos a procesar o una dirección que apunta a los datos que se van a buscar. En 8051, hay un tipo de datos de 8 bits, desde el MSB (bit más significativo) D7 hasta el LSB (bit menos significativo) D0. Con el tipo de datos de 8 bits, cualquier tipo de datos de más de 8 bits debe dividirse en fragmentos de 8 bits antes de procesarse.

Los registros más utilizados del 8051 son A (acumulador), B, R0-R7, DPTR (puntero de datos) y PC (contador de programa). Todos estos registros son de 8 bits, excepto DPTR y PC.

Registros de almacenamiento en 8051

Analizaremos los siguientes tipos de registros de almacenamiento aquí:

  • Accumulator
  • Registro R
  • Registro B
  • Puntero de datos (DPTR)
  • Contador de programas (PC)
  • Puntero de pila (SP)

Acumulador

El acumulador, registro A, se utiliza para todas las operaciones aritméticas y lógicas. Si el acumulador no está presente, todos los resultados de cada cálculo (suma, multiplicación, desplazamiento, etc.) deben almacenarse en la memoria principal. El acceso a la memoria principal es más lento que el acceso a un registro como el acumulador porque la tecnología utilizada para la memoria principal grande es más lenta (pero más barata) que la utilizada para un registro.

Los registros "R"

Los registros "R" son un conjunto de ocho registros, a saber, R0, R1 a R7. Estos registros funcionan como registros de almacenamiento auxiliar o temporal en muchas operaciones. Considere un ejemplo de la suma de 10 y 20. Almacene una variable 10 en un acumulador y otra variable 20 en, digamos, el registro R4. Para procesar la operación de adición, ejecute el siguiente comando:

ADD A,R4

Después de ejecutar esta instrucción, el acumulador contendrá el valor 30. Por lo tanto, los registros "R" son auxiliares o helper registers. El acumulador por sí solo no sería muy útil si no fuera por estos registros "R". Los registros "R" están destinados al almacenamiento temporal de valores.

Tomemos otro ejemplo. Sumaremos los valores de R1 y R2 juntos y luego restaremos los valores de R3 y R4 del resultado.

MOV A,R3   ;Move the value of R3 into the accumulator 
ADD A,R4   ;Add the value of R4 
MOV R5,A   ;Store the resulting value temporarily in R5 
MOV A,R1   ;Move the value of R1 into the accumulator 
ADD A,R2   ;Add the value of R2 
SUBB A,R5  ;Subtract the value of R5 (which now contains R3 + R4)

Como puede ver, usamos R5 para mantener temporalmente la suma de R3 y R4. Por supuesto, esta no es la forma más eficiente de calcular (R1 + R2) - (R3 + R4), pero ilustra el uso de los registros "R" como una forma de almacenar valores temporalmente.

El registro "B"

El registro "B" es muy similar al acumulador en el sentido de que puede contener un valor de 8 bits (1 byte). El registro "B" es utilizado solo por dos instrucciones 8051:MUL AB y DIV AB. Para multiplicar o dividir A por otro número de forma rápida y sencilla, puede almacenar el otro número en "B" y utilizar estas dos instrucciones. Además de usar instrucciones MUL y DIV, el registro "B" se usa a menudo como otro registro de almacenamiento temporal, muy parecido a un noveno registro R.

El puntero de datos

El puntero de datos (DPTR) es el único registro de 16 bits (2 bytes) accesible para el usuario del 8051. El acumulador, los registros R0 – R7 y el registro B son registros de valor de 1 byte. DPTR está diseñado para apuntar a datos. Es utilizado por el 8051 para acceder a la memoria externa usando la dirección indicada por DPTR. DPTR es el único registro de 16 bits disponible y se utiliza a menudo para almacenar valores de 2 bytes.

El contador de programas

El Contador de programas (PC) es una dirección de 2 bytes que le dice al 8051 dónde se puede encontrar en la memoria la siguiente instrucción a ejecutar. La PC comienza a las 0000h cuando el 8051 se inicializa y se incrementa cada vez que se ejecuta una instrucción. PC no siempre se incrementa en 1. Algunas instrucciones pueden requerir 2 o 3 bytes; en tales casos, el PC se incrementará en 2 o 3.

Branch, jumpy interruptLas operaciones cargan el Contador de programa con una dirección distinta a la siguiente ubicación secuencial. La activación de un reinicio de encendido hará que se pierdan todos los valores del registro. Significa que el valor de la PC es 0 al reiniciar, lo que obliga a la CPU a buscar el primer código de operación de la ubicación de la ROM 0000. Significa que debemos colocar el primer byte del código ascendente en la ubicación de la ROM 0000 porque es allí donde la CPU espera encontrar el primera instrucción.

El puntero de pila (SP)

El Stack Pointer, como todos los registros excepto DPTR y PC, puede contener un valor de 8 bits (1 byte). El puntero de pila indica la ubicación desde donde se eliminará el siguiente valor de la pila. Cuando se empuja un valor a la pila, el valor de SP se incrementa y luego el valor se almacena en la ubicación de memoria resultante. Cuando un valor se extrae de la pila, el valor se devuelve desde la ubicación de memoria indicada por SP, y luego el valor de SP se reduce.

Este orden de operación es importante. El SP se inicializará a las 07h cuando se inicialice el 8051. Si se inserta un valor en la pila al mismo tiempo, el valor se almacenará en la dirección RAM interna 08h porque el 8051 primero incrementará el valor de SP (de 07h a 08h) y luego almacenará el valor insertado en esa memoria dirección (08h). SP es modificado directamente por el 8051 mediante seis instrucciones: PUSH, POP, ACALL, LCALL, RET y RETI.

Espacio ROM en 8051

Algunos miembros de la familia de 8051 tienen solo 4 K bytes de ROM en chip (por ejemplo, 8751, AT8951); algunos tienen ROM de 8K como AT89C52, y hay algunos miembros de la familia con 32K bytes y 64K bytes de ROM en chip, como Dallas Semiconductor. El punto a recordar es que ningún miembro de la familia 8051 puede acceder a más de 64K bytes de código de operación ya que el contador de programa en 8051 es un registro de 16 bits (0000 a la dirección FFFF).

La primera ubicación de la ROM del programa dentro del 8051 tiene la dirección 0000H, mientras que la última ubicación puede ser diferente dependiendo del tamaño de la ROM en el chip. Entre los 8051 miembros de la familia, AT8951 tiene $ k bytes de ROM en el chip con una dirección de memoria de 0000 (primera ubicación) a 0FFFH (última ubicación).

8051 Bits de bandera y registro PSW

El registro de la palabra de estado del programa (PSW) es un registro de 8 bits, también conocido como flag register. Tiene un ancho de 8 bits, pero solo se utilizan 6 bits. Los dos bits no utilizados sonuser-defined flags. Cuatro de las banderas se llamanconditional flags, lo que significa que indican una condición que se produce después de que se ejecuta una instrucción. Estos cuatro sonCY (Llevar), AC (transporte auxiliar), P (paridad), y OV(Desbordamiento). Los bits RS0 y RS1 se utilizan para cambiar los registros bancarios. La siguiente figura muestra el registro de palabras de estado del programa.

El registro PSW contiene los bits de estado que reflejan el estado actual de la CPU.

CY California F0 RS1 RS0 OV - PAGS

CY PSW.7 Llevar bandera
C.A. PSW.6 Bandera de transporte auxiliar
F0 PSW.5 Marcar 0 disponible para el usuario para fines generales.
RS1 PSW.4 Registro selector de banco bit 1
RS0 PSW.3 Registro selector de banco bit 0
OV PSW.2 Bandera de desbordamiento
- PSW.1 BANDERA definible por el usuario
PAGS PSW.0 BANDERA de paridad. Establecido / borrado por hardware durante el ciclo de instrucción para indicar un número par / impar de 1 bit en el acumulador.

Podemos seleccionar el bit del banco de registros correspondiente usando los bits RS0 y RS1.

RS1 RS2 Banco de registro Habla a
0 0 0 00H-07H
0 1 1 08H-0FH
1 0 2 10H-17H
1 1 3 18H-1FH
  • CY, the carry flag- Esta bandera de acarreo se establece (1) siempre que haya un acarreo desde el bit D7. Se ve afectado después de una operación de suma o resta de 8 bits. También se puede restablecer a 1 o 0 directamente mediante una instrucción como "SETB C" y "CLR C", donde "SETB" significa transporte de bits establecido y "CLR" significa transporte claro.

  • AC, auxiliary carry flag- Si hay un acarreo de D3 y D4 durante una operación ADD o SUB, se establece el bit AC; de lo contrario, se borra. Se utiliza para que la instrucción realice operaciones aritméticas decimales codificadas en binario.

  • P, the parity flag- La bandera de paridad representa el número de unos en el registro del acumulador únicamente. Si el registro A contiene un número impar de unos, entonces P = 1; y para un número par de unos, P = 0.

  • OV, the overflow flag- Esta bandera se establece siempre que el resultado de una operación de número con signo es demasiado grande, lo que hace que el bit de orden superior se desborde en el bit de signo. Se usa solo para detectar errores en operaciones aritméticas con signo.

Ejemplo

Muestre el estado de las banderas CY, AC y P después de la adición de 9CH y 64H en la siguiente instrucción.

MOV A, # 9CH

AÑADIR A, # 64H

Solution:  9C   10011100 
          +64   01100100 
          100   00000000 
			 
CY = 1 since there is a carry beyond D7 bit  
AC = 0 since there is a carry from D3 to D4 
P  = 0 because the accumulator has even number of 1's