Red de conocimiento del abogados - Preguntas y respuestas jurídicas - Buscando una lista de instrucciones del microcontrolador de la serie MCS-51

Buscando una lista de instrucciones del microcontrolador de la serie MCS-51

Las instrucciones de transferencia son el tipo de instrucciones más básico y más utilizado en el sistema de instrucciones. Se utilizan principalmente para la transmisión, el almacenamiento y el intercambio de datos.

1. Instrucciones con el acumulador A como operando destino (4 elementos)

La función de este grupo de instrucciones es enviar el contenido especificado por el operando origen al acumulador A.

Existen cuatro modos de direccionamiento: registrador, directo, registrador indirecto e inmediato.

MOV A, Rn MOV A, datos

MOV A,@Rn MOV A,#datos

2. Instrucciones con registro Rn como operando destino (3 elementos)

La función de este grupo de instrucciones es enviar el contenido especificado por el operando origen al registro de trabajo seleccionado Rn.

Existen tres modos de direccionamiento: registral, directo e inmediato.

MOV Rn, A MOV Rn,datos

MOV Rn,#datos

3. Instrucciones con una dirección directa como operando de destino (5 elementos)

La función de este grupo de instrucciones es enviar el contenido especificado por el operando de origen a la RAM del chip especificada por los datos de la dirección directa.

Existen cuatro modos de direccionamiento: registrador, directo, registrador indirecto e inmediato.

Datos MOV,A Datos MOV,Rn

Datos MOV1,datos2 Datos MOV,@Ri

Datos MOV,#datos

4. Instrucciones con direcciones indirectas como operandos de destino (3)

La función de este grupo de instrucciones es enviar el contenido especificado por el operando de origen a la RAM del chip con el contenido en Ri como dirección.

Existen tres modos de direccionamiento: registral, directo e inmediato.

MOV @Ri,A MOV @Ri,datos

MOV @Ri,#datos

5. Instrucciones de búsqueda de tablas (2 elementos)

La función de este grupo de instrucciones es buscar y transferir la tabla de datos almacenada en la memoria del programa. Utilice direcciones indexadas.

MOVC A,@A+DPTR MOVC A, @A+PC

6. Instrucciones de transferencia del acumulador A y AM fuera del chip (4)

La función de este grupo de instrucciones es la transferencia mutua entre el acumulador A y la RAM en el chip. Dado que no hay instrucciones especiales de entrada/salida en el sistema de instrucciones MCS-51, y que el puerto de E/S de expansión fuera del chip y la RAM fuera del chip están direccionados de manera uniforme, las siguientes cuatro instrucciones también se pueden utilizar como instrucciones de entrada/salida. Utilice el direccionamiento indirecto de registro.

MOVX A,@DPAR MOVX @DPTR,A

MOVX A,@Ri MOVX @Ri,A

7. Instrucciones de operación de pila (2)

La función de este tipo de instrucción es transferir el contenido de la unidad direccionada directamente a la unidad señalada por el puntero de pila SP, y transferir el contenido de la unidad señalada por el SP a la unidad direccionada directamente en la unidad de direccionamiento.

PUSH datos datos POP

La primera instrucción se llama instrucción de operación push y la última instrucción se llama instrucción pop. Dado que (SP) = 07H después del reinicio del encendido, generalmente es necesario restablecer el valor inicial de SP. Dado que el primer número insertado en la pila debe almacenarse en la unidad de memoria señalada por SP+1, la parte inferior real de la pila es la unidad de memoria señalada por SP+1.

8. Instrucciones de intercambio (4 ítems)

La función de este tipo de instrucciones es intercambiar el contenido del acumulador A con los datos apuntados por el operando fuente.

Existen tres modos de direccionamiento: registrador, directo y registrador indirecto.

XCH A, Rn XCH A, datos

XCH A, @Ri XCHD A, @Ri

9.

MOV DPTR, #data

La función de esta instrucción es enviar una constante de 16 bits al registro del puntero de datos, utilizando el modo de direccionamiento inmediato. Cuando se traduce a código de máquina, el byte de orden superior aparece primero y el byte de orden inferior aparece al final.

MCS-51 tiene cuatro potentes instrucciones de operaciones aritméticas: suma, resta, multiplicación y división.

1. Palabra de estado del programa PSW

MCS-51 tiene un registro de palabra de estado del programa PSW, que se utiliza para guardar el indicador del resultado de la ejecución de instrucciones para la consulta y evaluación del programa. PSW es ​​uno de los registros de funciones especiales y su formato es el siguiente:

PSW7: es tanto el acumulador C del procesador booleano como el indicador de acarreo CY si el resultado de la operación tiene una salida de acarreo. en el bit más alto (al sumar) o tomar prestada la entrada (durante la resta), establezca CY; de lo contrario, borre "0" CY.

AC——bandera de transporte auxiliar (medio transporte). Si hay un acarreo en los 4 bits inferiores del resultado de la operación (durante la suma) o un préstamo de los 4 bits superiores (resta), configure AC; de lo contrario, borre "0" AC se utiliza principalmente para el ajuste de suma de números binarios-decimales. .

Indicador de desbordamiento de OV. Si hay un acarreo al bit más alto del resultado de la operación, pero no se genera ningún acarreo desde el bit más alto, o si se genera un acarreo desde el bit más alto pero el bit bajo no se lleva al bit más alto, entonces se activa la bandera de desbordamiento. de lo contrario, OV se pone a "0". El bit de bandera de desbordamiento se utiliza para operaciones de complemento. Cuando el resultado de la operación del número con signo no puede representarse mediante un número binario de 8 bits, se establecerá OV.

P - Bit de indicador de paridad del acumulador A. Si la suma módulo 2 de los 8 bits del acumulador A es 1 (impar), entonces P=1, en caso contrario, P=0; Dado que P siempre representa la paridad de A, cambia con el contenido de A, por lo que el valor de un valor escrito en el bit P de PSW no cambia.

RS1, RS0: indica el área de registro de trabajo actualmente utilizada.

F0——Indicador de usuario. Se puede utilizar como indicador de software y su función es similar a la del área de direccionamiento de bits de RAM interna.

PSW1: bit reservado, las operaciones en él no son válidas.

2. Instrucción de suma

1. Instrucción de suma sin acarreo

ADD A,#data ADD A,data

ADD A,@Ri ADD A,Rn

El registro de trabajo, el contenido de la unidad RAM interna o el número binario sin signo de 8 bits del valor inmediato se suma al número en el acumulador A. La suma resultante se almacena en el acumulador A. Cuando los bits 3 y 7 del la suma es Cuando se transporta, establezca los indicadores AC y CY en 1 respectivamente; de ​​lo contrario, configúrelos en 0.

La ejecución de las instrucciones anteriores afectará a los bits de bandera AC, CY, OV y P.

Para números sin signo, el indicador de acarreo CY=1 significa desbordamiento; CY=0 significa que no hay desbordamiento. El desbordamiento de la operación de número con signo depende de si uno de los bits 6 y 7 genera un acarreo y el otro bit no genera un acarreo. El indicador de desbordamiento OV se establece en "1"; de lo contrario, se borra a "0". OV=1 significa que cuando se suman dos números positivos, la suma se convierte en un número negativo, o cuando se suman dos números negativos, la suma se convierte en un número positivo.

Existen cuatro modos de direccionamiento para operandos fuente: registro, directo, indirecto e inmediato.

2. Instrucción de suma con acarreo:

ADDC A,#data ADDC A,data

ADDC A,@Ri ADDC A,Rn

Estas son cuatro instrucciones adicionales con transporte. Agregue el contenido del acumulador A al contenido del indicador CY actual, más el número de un solo byte sin signo, y almacene la suma en el acumulador A. Cuando se produce un desbordamiento de acarreo en los bits 3 y 7 del resultado de la operación, los indicadores AC, CY y OV se activan respectivamente. La ejecución de esta instrucción afectará los bits de bandera AC, CY, OV y P.

Esta instrucción se utiliza a menudo para la suma de varios bytes.

3. Añadir 1 comando:

INC A INC datos

INC @Ri INC Rn

INC DPTR

< La instrucción p>INC agrega 1 al contenido especificado y el resultado aún se almacena en el A original o en la unidad original. Si el valor original es 0FFH, se convertirá en 00H después de agregar 1. El resultado de la operación no afecta el bit de bandera.

Esta instrucción puede sumar 1 al contenido del acumulador A, registro de trabajo RN, dirección indirecta RI y unidad de direccionamiento directo. Se puede ver que las instrucciones MCS-51 plus 1 son relativamente ricas.

Nota: Cuando se utiliza este comando para aumentar el contenido de E/S paralelas de salida en 1, se utilizará como el valor original del puerto de salida, que se leerá desde el pestillo de datos del puerto de salida. , no desde el pestillo de datos del puerto de salida leído en el pin.

4. Comando de corrección binario-decimal:

DA A

Si [(A0-3)>9] o [(AC)=1), luego (A0-3)(A0-3)+06H

Este comando es para corregir el resultado de la suma del código BCD de A. Después de agregar dos códigos BCD comprimidos como números binarios, deben corregirse con este comando para obtener la suma de los códigos BCD comprimidos.

El funcionamiento de esta instrucción es: si el valor bajo de 4 dígitos del acumulador A es mayor que 9 o el 3er bit genera un acarreo al 4to bit, es decir, el bit de acarreo auxiliar AC es 1 , entonces los 4 bits inferiores de A deben corregirse. El contenido del bit se corrige sumando 6 para producir el valor de código BCD correcto para los 4 dígitos inferiores. Si después de agregar 0 para la corrección, se produce un acarreo en los 4 bits inferiores y los 4 bits superiores son todos 1, la suma interna establecerá el bit CY. De lo contrario, no borrará el indicador CY "0".

Si el valor de los 4 bits superiores del acumulador A es mayor que 9 o el bit de acarreo más alto CY=1, entonces los 4 bits superiores deben corregirse sumando 6 para generar el valor de código BCD correcto. de los 4 bits altos. De manera similar, si el acarreo más alto ocurre después de agregar 6 para la corrección, se establecerá CY. Por el contrario, si "0" CY no está claro, se establecerá CY, lo que indica que el valor del código BCD suma es mayor o igual a 100. . Esto es útil para la suma decimal multibyte. No afecta la bandera OV.

Se puede ver que esta instrucción agrega O6H, 60H o 66H al acumulador A según el valor original del acumulador A y el estado de PSW.

Cabe señalar: esta instrucción no puede simplemente intercambiar el número hexadecimal del acumulador A a código BCD, ni puede usarse para corregir la resta decimal.

3. Instrucción de resta

MCS-51 agrega una instrucción de resta con préstamo sobre la base de MCS-48, lo que mejora la función informática de la computadora.

1 Instrucción de resta con préstamo:

SUBB A,#data SUBB A,data

SUBB A,@Ri SUBB A,Rn

.

La instrucción de resta SUBB con préstamo resta el indicador de acarreo CY y la variable especificada del acumulador A. El resultado está en el acumulador A. Si hay un bit de préstamo en el séptimo bit, el bit CY se establece; de ​​lo contrario, CY se borra a 0. Si el bit 3 está mal colocado, se establece el indicador de acarreo auxiliar AC; de lo contrario, se borra a 0 AC. Si es necesario tomar prestado uno de los bits 7.º y 6.º, pero no se toma prestado el otro bit, se establece el indicador de desbordamiento OV. El bit de desbordamiento OV se utiliza para la resta de enteros con signo, lo que indica (OV = 1) que el resultado de restar un número positivo de un número negativo es un número negativo o que el resultado de un número negativo menos un número positivo es un número positivo; número.

El operando fuente permite cuatro modos de direccionamiento: registro RN, dirección directa, dirección indirecta Ri o número inmediato.

Cuando el valor del indicador de acarreo CY no se conoce antes de la resta de un solo byte o de varios bytes, CY debe ponerse a "0" antes de la instrucción de resta.

4. Instrucciones de multiplicación

MUL AB

Las instrucciones de multiplicación se agregaron recientemente al MCS-51 y la velocidad de operación solo requiere 4 ciclos de la máquina. Aumenta en gran medida la función informática del microordenador de un solo chip MCS-51 y supera las deficiencias del microordenador de un solo chip de la serie MCS-48.

Esta instrucción multiplica dos enteros sin signo de 8 bits en el acumulador A y el registro B. Los 8 bits inferiores del producto de 16 bits se almacenan en A y los 8 bits superiores se almacenan en B. Si el producto Mayor que 255 (0FFH), es decir, cuando el contenido de B no es 0, se establece el indicador de desbordamiento OV; de lo contrario, se borra a "0" OV. La bandera de acarreo CY siempre se pone a "0".

5. Instrucciones de división

DIV AB

Las instrucciones de división agregadas a la serie de microcontroladores MCS-51 solo requieren 4 ciclos de máquina en tiempo de operación. También mejora la función de operación de MCS-51. por lo que se puede aplicar a sistemas de control complejos que requieren sólidas capacidades informáticas. Formato de instrucción de división:

Esta instrucción divide el entero sin signo de 8 bits en el acumulador A por el entero sin signo de 8 bits en el registro B. La parte entera del cociente resultante se almacena en A, y la parte entera se almacena en A. en el registro B. Borre "0" las banderas CY y OV. Cuando el divisor (contenido en B) es 00H, el resultado de la ejecución será un valor indefinido, es decir, el resultado de la ejecución enviado a A y B es un valor indefinido y se establece el indicador de desbordamiento OV. En cualquier caso, borre "0" CY.

6. Disminuir una instrucción

DEC A Datos DEC

DEC @Ri DEC Rn

La instrucción DEC disminuye el contenido del registro puntiagudo en 1 y el resultado es aún se devuelve al registro original, si el contenido original del registro es 00H, será FFH después de restar 1. El resultado de la operación no afecta ningún bit de bandera. Este grupo de instrucciones utiliza direccionamiento directo, de registro y entre registros. Al igual que la instrucción agregar 1, en la segunda instrucción, si la dirección directa es un puerto de E/S, se realiza una operación de "lectura-modificación-escritura".

Hay 25 instrucciones de operación lógica válidas, incluidas AND, OR, XOR, negación, desplazamiento hacia la izquierda y hacia la derecha, borrado a 0 y otras operaciones lógicas. Los modos de direccionamiento correspondientes son direccionamiento directo, de registro e indirecto. la ejecución de este tipo de instrucción generalmente no afecta al PSW.

1. Rotar instrucciones de cambio (4)

RL A; RR A;

RLC A; RRC A;

Las funciones de las dos primeras instrucciones son mover The El contenido del acumulador A se gira un bit hacia la izquierda. Las funciones de las dos últimas instrucciones son girar el contenido del acumulador A junto con el bit de acarreo CY hacia la izquierda o hacia la derecha un bit.

2. Instrucción de intercambio de nibble del acumulador (1)

SWAP A;

La función de esta instrucción es intercambiar los nibbles altos y bajos del acumulador A. Por ejemplo, (A) = 56H, luego de ejecutar el comando SWAP A, el resultado (A) = 65H.

3. Instrucción de negación (1 ítem)

CPL A;

4. Borrar 0 instrucción (1)

CLR A;

5. Lógica e instrucciones (6 ítems)

ANL A, #data; ANL data, #data

ANL A, Rn ANL A, data

ANL data, A ANL A, @Ri

En las instrucciones segunda y quinta de este grupo de instrucciones, si la dirección directa resulta ser el puerto de E/S, también es una operación de "lectura-modificación-escritura". .

6. Instrucciones lógicas OR (6 elementos)

ORL A, #data ORL data, #data

ORL A, Rn ORL A, data

ORL data, A ORL A, @Ri

Las instrucciones segunda y quinta de este conjunto de instrucciones también tienen la función "lectura-modificación-escritura".

7. Instrucciones XOR lógicas (6 elementos)

XRL A, #data XRL data, #data

XRL A, Rn XRL A, data

XRL data, A

Las instrucciones de transferencia de control se utilizan para controlar la dirección del programa, por lo que su ámbito de acción es el espacio de memoria del programa. Se pueden usar instrucciones de llamada larga y transferencia larga con direcciones de 16 bits para acceder a cualquier unidad de dirección de la memoria del programa de 64 K. También se pueden usar llamadas absolutas y instrucciones de transferencia absoluta con direcciones de 11 bits para acceder a 2 K bytes de espacio.

Además, existen transferencias relativas cortas dentro de un rango de páginas y muchas instrucciones de transferencia condicional. Estas instrucciones generalmente no afectan los bits de bandera y no se presentarán por separado a continuación.

1. Declaraciones de transferencia incondicional (4 elementos)

LJMP addr16 AJMP addr11 SJMP rel JMP @(A)+DPTR

La función de las instrucciones anteriores es que cuando el programa completa la ejecución de la instrucción, el programa será transferido incondicionalmente a la dirección proporcionada por la instrucción.

La primera instrucción se denomina instrucción de transferencia larga. La instrucción proporciona una dirección de destino de 16 bits. Los códigos de dirección del segundo y tercer byte de la instrucción se cargan en los 8 bits superiores de la PC respectivamente. es incondicional. El rango de direcciones de destino de la transferencia es de 64 KB de espacio.

La segunda instrucción se llama instrucción de transferencia absoluta. La instrucción proporciona una dirección de destino de 11 bits. Por lo tanto, el rango de direcciones de destino de la transferencia incondicional es el espacio de 2 K bytes a partir de la siguiente instrucción.

La tercera instrucción se denomina instrucción de transferencia relativamente corta y controla que el programa redirija incondicionalmente a la dirección especificada. La rel de esta instrucción es un desplazamiento relativo con signo, que oscila entre -128 y +127. Un número negativo indica un desplazamiento hacia atrás, un número positivo indica un desplazamiento hacia adelante. La ventaja de esta instrucción es que proporciona una dirección de transferencia relativa y no especifica el valor de la dirección. De esta manera, cuando la dirección del programa cambia, siempre que la dirección relativa no cambie, la instrucción no necesita realizar ninguna. cambios. Al escribir un programa en lenguaje ensamblador, rel es una etiqueta y el ensamblador calcula automáticamente la dirección de desplazamiento durante el proceso de ensamblaje. Durante el ensamblaje manual, se puede utilizar la siguiente fórmula para calcular la dirección de desplazamiento:

Al transferir hacia atrás: rel=FEH- (el valor absoluto de las direcciones de origen y destino)

Cuando transferencia hacia adelante: rel= (el valor absoluto de la diferencia entre las direcciones de origen y destino) - 2

La cuarta instrucción se llama instrucción de transferencia dispersa (también llamada instrucción de transferencia indirecta). Esta instrucción transfiere la 8. -bit cero bits en el acumulador A a El número de símbolo se suma a los datos de 16 bits en el registro de dirección base DPTR y el valor resultante se envía a la PC como dirección de destino de la transferencia. Después de la ejecución de esta instrucción, no afecta el contenido original del acumulador A y el puntero de datos DPTR, ni afecta ningún bit de bandera. La característica de esta instrucción es que su dirección de transferencia no se determina durante la programación, sino que se determina dinámicamente cuando el programa se está ejecutando. Por lo tanto, las primeras direcciones de múltiples programas de rama se pueden cargar en DPTR y el contenido del acumulador A se utiliza para seleccionar dinámicamente a qué programa de rama se debe transferir en ese momento.

2. Instrucciones de transferencia condicional (8)

1. JZ versión 2. Relación JNZ

3. CJNEA, datos, rel 4. CJNE A,#datos,rel

5. CJNE Rn,#datos,rel

6. CJNE @Ri,datos,rel

7. DJNZ Rn,rel

8. DJNZ data,rel

La instrucción anterior ejecuta una transferencia que cumple ciertas condiciones específicas y su objetivo está dentro del rango de 256 bytes (-128 ~ +127) centrado en la dirección inicial de la siguiente instrucción.

La primera y segunda instrucciones son para determinar si el contenido en el acumulador A es 0 para determinar si se debe ejecutar secuencialmente o transferir.

Los elementos tercero a sexto son instrucciones de transferencia de comparación. Esta instrucción compara el tamaño de los dos operandos anteriores. Si sus valores no son iguales, transfiera. Si son iguales, continúe la ejecución. Después de ejecutar la instrucción, el bit de transporte CY se verá afectado. Si el operando 1 es menor que el operando 2, entonces CY = 1; si el operando 1 es mayor que el operando 2, entonces CY = 0.

3. La llamada se refiere al programa y las instrucciones de devolución (4 artículos)

1. Dirección LCALL16 2. ACALL dirección11 3. RETIRAR 4. RETI

En programación, a menudo es necesario ejecutar un determinado programa repetidamente. Para reducir la escritura de programas y desperdiciar espacio de direcciones innecesario, se introducen los conceptos de programa principal y subrutina. para ejecutarse repetidamente. El programa que se llama repetidamente se llama subprograma. La última instrucción del subprograma es el regreso a la instrucción del programa principal (RET), y la instrucción con la función de llamar al subprograma se llama instrucción de llamada.

La primera instrucción se denomina instrucción de llamada larga. Al igual que LJMP, proporciona una dirección de 16 bits y puede llamar a subrutinas dentro de un rango de 64 KB. Dado que es una instrucción de tres bytes, al ejecutar, primero se obtiene (PC) + 3 para obtener la dirección de la siguiente instrucción, y el contenido de la PC en este momento se inserta en la pila como dirección de retorno, y luego la dirección addr16 se carga en la PC y se transfiere a la subrutina de ejecución.

La segunda instrucción se llama instrucción de llamada absoluta. Esta instrucción proporciona una dirección de destino de 11 bits y está limitada a una llamada dentro de un rango de 2K bytes, ya que es una instrucción de doble byte (PC). Se obtiene + 2 durante la ejecución. La dirección de la siguiente instrucción luego se inserta en la pila como dirección de retorno. La formación de su código de operación es la misma que la de la instrucción AJMP.

La tercera instrucción se llama instrucción de retorno de subrutina, lo que significa que la subrutina necesita regresar al programa principal después del final, por lo que cuando se ejecuta esta instrucción, aparece la dirección de retorno ingresada al llamar a la subrutina. de la pila.

La cuarta instrucción se llama instrucción de retorno de interrupción. El proceso de ejecución de esta instrucción es similar a la instrucción RET, pero también puede restaurar la lógica de interrupción. RETI y RET no deben usarse indistintamente.

4. Instrucción sin operación (1)

NOP;

Además de agregar 1 a la PC, el CPC no realiza ninguna operación y pasa a la siguiente instrucción para su ejecución. Esta instrucción se utiliza a menudo para generar un retraso en el ciclo de la máquina.

Hay instrucciones de operación de 17 bits***, todas las cuales utilizan bits como objetos operativos para completar funciones como transferencia de bits, control de estado de bits, operaciones lógicas de bits, transferencia condicional de bits, etc. En ensamblaje idioma, bit Hay cuatro formas de expresar direcciones:

Expresado directamente por dirección de bit: como 91H.

Modo de dígitos de dirección de bytes: como P1.0 (90H).

Modo de nombre de bit: como RS0.

El usuario utiliza la dirección simbólica definida previamente mediante la directiva.

1. Instrucciones de transferencia de datos de bits (2)

MOV C, bit MOV bit, C

Las instrucciones anteriores transfieren la variable especificada por el operando de origen a la unidad especificada por el operando de destino. Si la segunda instrucción opera en los bits del puerto de E/S, también es una operación de "lectura-modificación-escritura".

2. Instrucciones de control de estado de bits (6)

CLR C CLR bit CPL C

CPL bit SETB C SETB bit

La función de las instrucciones anteriores es controlar el llevar bandera respectivamente. También tiene la función "lectura-modificación-escritura" al borrar y negar el direccionamiento directo, y cuando la dirección de bit directo es un determinado bit del puerto de E/S.

3. Instrucciones de operación lógica de bits (4)

ANL C,bit ANL C,/bit

ORL C,bit ORL C/bit

Funciones de las instrucciones anteriores El contenido del acumulador de bits C se aplica lógicamente con AND o lógicamente con OR con el contenido de la dirección de bit directa o el inverso del contenido de la dirección de bit directa, y el resultado aún se envía de regreso a C.

4. Instrucción de transferencia condicional de bits (5)

JC rel JNC rel

JB bit,rel JNB bit,rel

JBC bit,rel

La función de las instrucciones anteriores es determinar si el contenido del bit de acarreo C y la dirección del bit directo son "1" o "0", respectivamente, para determinar la dirección del programa. La función de la última instrucción es: si el contenido de la dirección directa es "1", transfiera y borre el bit a 0 al mismo tiempo; de lo contrario, ejecútelo secuencialmente. Si esta instrucción opera en un determinado bit del puerto de E/S, también tiene una función de "lectura-modificación-escritura".