Introducción a la programación del 8051 en lenguaje ensamblador

Introducción a la programación del 8051 en lenguaje ensamblador

El lenguaje ensamblador es un lenguaje de programación de bajo nivel que se usa para escribir código de programa en términos de mnemónicos. Aunque hay muchos idiomas de alto nivel que están en demanda actualmente, el lenguaje de programación ensamblador se usa popularmente en muchas aplicaciones y se puede usar para manipulaciones directas de hardware. También se utiliza para escribir el 8051 código de programación eficientemente con menos ciclos de reloj al consumir menos memoria en comparación con los otros lenguajes de alto nivel.

Programación 8051 en lenguaje ensamblador

Programación 8051

Programación 8051 en lenguaje ensamblador

El lenguaje ensamblador es un lenguaje de programación totalmente relacionado con el hardware. Los diseñadores integrados deben tener conocimientos suficientes sobre el hardware de un procesador o controladores en particular antes de escribir el programa. El lenguaje ensamblador es desarrollado por mnemónicos, por lo tanto, los usuarios no pueden entenderlo fácilmente para modificar el programa.




Programación 8051 en lenguaje ensamblador

Programación 8051 en lenguaje ensamblador

El lenguaje de programación ensamblador es desarrollado por varios compiladores y la 'bolera es más adecuado para microcontroladorprogramación desarrollo. METROmicrocontroladoreso los procesadores solo pueden entender el lenguaje binario en forma de '0 o 1'. Un ensamblador convierte el lenguaje ensamblador a lenguaje binario y luego lo almacena en elmicrocontroladormemoria para realizar la tarea específica.

Arquitectura del microcontrolador 8051

El 8051microcontroladores el Arquitectura de Harvard basada en CISC , y tiene periféricos como 32 E / S, temporizadores / contadores, comunicación serial y memorias. losmicrocontroladorrequiere un programa para realizar las operaciones que requieren una memoria para guardar y leer las funciones. El 8051microcontroladorconsta de memorias RAM y ROM para almacenar instrucciones.

8051 Arctitecuture del microcontrolador

Arquitectura del microcontrolador 8051

Un registro es la parte principal de los procesadores ymicrocontroladores que está contenido en la memoria que proporciona una forma más rápida de recopilar y almacenar los datos. La programación en lenguaje ensamblador 8051 se basa en los registros de memoria. Si queremos manipular datos a un procesador o controlador realizando una resta, suma, etc., no podemos hacerlo directamente en la memoria, pero necesita registros para procesar y almacenar los datos.Microcontroladorescontienen varios tipos de registros que se pueden clasificar según sus instrucciones o el contenido que operan en ellos.

Programas del microcontrolador 8051 en lenguaje ensamblador

El lenguaje ensamblador se compone de elementos que se utilizan para escribir el programa ende forma secuencial. Siga las reglas dadas para escribir programación en lenguaje ensamblador.


Reglas del lenguaje ensamblador

  • El código de ensamblaje debe estar escrito en mayúsculas
  • Las etiquetas deben ir seguidas de dos puntos (etiqueta :)
  • Todos los símbolos y etiquetas deben comenzar con una letra
  • Todos los comentarios están escritos en minúsculas.
  • La última línea del programa debe ser la directiva END.

Los mnemónicos del lenguaje ensamblador tienen la forma de código de operación, como MOV, ADD, JMP, etc., que se utilizan para realizar las operaciones.

Código de operación: El código de operación es una única instrucción que puede ser ejecutada por la CPU. Aquí el código de operación es una instrucción MOV.

Operandos: Los operandos son una sola pieza de datos que puede ser operada por el código de operación. Por ejemplo, la operación de multiplicación se realiza mediante los operandos que se multiplican por el operando.

Sintaxis: MUL a,b

Los elementos de una programación en lenguaje ensamblador:

  • Ensamblar pautas
  • Conjunto de instrucciones
  • Modos de direccionamiento

Instrucciones de montaje:

Las directivas de ensamblaje dan las instrucciones a la CPU. El 8051microcontroladorconsta de varios tipos de instrucciones de montaje para dar la dirección a la unidad de control. Las directivas más útiles son la programación 8051, como:

  • ORG
  • DB
  • EQU
  • FIN

ORG(origen): Esta directiva indica el inicio del programa. Se utiliza para configurar la dirección de registro durante el montaje. Por ejemplo, ORG 0000h le dice al compilador todo el código subsiguiente que comienza en la dirección 0000h.

Sintaxis: ORG 0000h

DB(definir byte): El byte de definición se utiliza para permitir una cadena de bytes. Por ejemplo, imprima el 'EDGEFX' donde cada carácter es tomado por la dirección y finalmente imprime la 'cadena' por el DB directamente con comillas dobles.

Sintaxis:

ORG 0000h

MOV a, # 00h
————-
————-
DB 'EDGEFX'

EQU (equivalente): La directiva equivalente se utiliza para equiparar la dirección de la variable.

Sintaxis:

reg equ,09h
—————–
—————–
MOVreg,# 2h

FIN: La directiva END se utiliza para indicar el final del programa.

Sintaxis:

reg equ,09h

—————–
—————–
MOVreg,# 2h
FIN

Modos de direccionamiento:

La forma de acceder a los datos se denomina modo de direccionamiento. La CPU puede acceder a los datos de diferentes formas utilizando modos de direccionamiento. El 8051microcontroladorconsta de cinco modos de direccionamiento como:

  • Modo de direccionamiento inmediato
  • Registrar modo de direccionamiento
  • Modo de direccionamiento directo
  • Modo de direccionamiento indirecto
  • Modo de direccionamiento de índice base

Modo de direccionamiento inmediato:

En este modo de direccionamiento, la fuente debe ser un valor que pueda ir seguido del '#' y el destino debe ser Registros SFR, registros de propósito general y dirección. Se utiliza para almacenar inmediatamente el valor en los registros de memoria.

Sintaxis:

MOV A, # 20h // A esunregistro acumulador, 20 se almacena en el A //
MOV R0,# 15 // R0 es un registro de propósito general 15 se almacena en el registro R0 //
MOV P0, # 07h // P0 es un registro SFR 07 se almacena en el P0 //
MOV 20h,# 05h // 20h es la dirección del registro 05 almacenado en el 20h //

Ex:

MOV R0, n.º 1
MOV R0, # 20 // R0<—R0[15] +20, el valor final se almacena en R0 //

Registrar modo de direccionamiento:

En este modo de direccionamiento, el origen y el destino deben ser un registro, pero no registros de propósito general. De modo que los datos no se mueven dentro del registros bancarios de propósito general .

Sintaxis:

MOV A, B // A es un registro SFR, B es un registro de propósito general //
MOV R0, R1 // Instrucción no válida, GPR a GPR no es posible //

EX:

MOV R0, # 02h
MOV A, # 30h
AÑADIR R0, A // R0<—R0+A, the final value is stored in the R0 register//

Modo de direccionamiento directo

En este modo de direccionamiento, la fuente o el destino (o tanto la fuente como el destino) deben ser una dirección, pero no un valor.

Sintaxis:

MOV A,20h // 20h es una dirección A es un registro //
MOV 00h, 07h // ambos son direccionados de los registros GPS //

Ex:

MOV 07h,# 01h
MOV A, # 08h
AGREGA UN,07h // A<—A+07h the final value is stored in A//

Modo de direccionamiento indirecto:

En este modo de direccionamiento, la fuente o destino (o destino o fuente) debe seradirección indirecta, pero no un valor. Este modo de direccionamiento admite el concepto de puntero. El puntero es una variable que se utiliza para almacenar la dirección de la otra variable. Este concepto de puntero solo se utiliza para los registros R0 y R1.

Sintaxis:

MOVR0, # 01h // El valor 01 se almacena en el registro R0, la dirección R0 es 08h //
MOV R1, # 08h // R1 es la variable de puntero quehistoriasdirección (08h) de R0 //
MOV 20h,@ R1 // El valor 01 se almacena en la dirección 20h del registro GP //

Modo de direccionamiento indirecto

Modo de direccionamiento indirecto

Modo de direccionamiento de índice base:

Este modo de direccionamiento se utiliza para leer los datos del memoria externa o memoria ROM . Todos los modos de direccionamiento no pueden leer los datos de la memoria de códigos. El código debe leerse a través del registro DPTR. El DPTR se utiliza para apuntar los datos en el código o en la memoria externa.

Sintaxis:

MOVC A, @ A + DPTR // C indica memoria de código //
MOCX A, @ A + DPTR // X indica memoria externa //
EX: MOV A, # 00H // 00H se almacena en el registro A //
MOV DPTR, # 0500H // Puntos DPTR 0500h dirección en la memoria //
MOVC A, @ A + DPTR // enviar el valorael registro A //
MOV P0, A // fecha de envío A al registrador de PO //

Conjunto de instrucciones:

El conjunto de instrucciones es la estructura del controlador o procesador que proporciona comandos al controlador para guiarlo en el procesamiento de datos. El conjunto de instrucciones consta de instrucciones, tipos de datos nativos, modos de direccionamiento, registros de interrupción, manejo excepcional y arquitectura de memoria. los 8051microcontrolador puede seguir las instrucciones de CISC con la arquitectura de Harvard. En el caso de la programación del 8051, los diferentes tipos de instrucciones CISC incluyen:

  • Conjunto de instrucciones de transferencia de datos
  • Conjunto de instrucciones secuenciales
  • Conjunto de instrucciones aritméticas
  • Ramificación Instruccioncolocar
  • Conjunto de instrucciones de bucle
  • Conjunto de instrucciones condicionales
  • Conjunto de instrucciones incondicionales
  • Conjunto de instrucciones lógicas
  • Conjunto de instrucciones booleanas

Conjunto de instrucciones aritméticas:

Las instrucciones aritméticas realizan las operaciones básicas como:

  • Adición
  • Multiplicación
  • Sustracción
  • División

Adición:

ORG 0000h
MOV R0, # 03H // mueve el valor 3 al registro R0 //
MOV A, # 05H // mueve el valor 5 al acumulador A //
Agregar A, 00H //Agrega unvalor con valor R0 y almacena el resultadoen un//
FIN

Multiplicación:

ORG 0000h
MOV R0, # 03H // mueve el valor 3 al registro R0 //
MOV A, # 05H // mueve el valor 5 al acumulador A //
MUL A, 03H //Multiplicadoel resultado se almacena en el acumulador A //
FIN

Sustracción:

ORG 0000h
MOV R0, # 03H // mueve el valor 3 para registrar R0 //
MOV A, # 05H // mueve el valor 5 al acumulador A //
SUBB A, 03H // El valor del resultado se almacena en el acumulador A //
FIN

División:

ORG 0000h
MOV R0, # 03H // mueve el valor 3 para registrar R0 //
MOV A, # 15H // mueve el valor 5 al acumulador A //
DIV A, 03H // el valor final se almacena en el acumulador A //
FIN

Instrucciones condicionales

La CPU ejecuta las instrucciones basándose en la condición comprobando el estado de un solo bit o el estado de un byte. El 8051microcontroladorconsta de varias instrucciones condicionales como:

  • JB -> Saltar abajo
  • JNB -> Saltar si no está debajo
  • JC -> Saltar si llevar
  • JNC -> Saltar sinoLlevar
  • JZ -> Saltar si es cero
  • JNZ -> Saltar sinoCero
Instrucciones condicionales

Instrucciones condicionales

1. Sintaxis:

JB P1.0, etiqueta
– – – – – – – –
– – – – – – – –
Etiqueta: - - - - - - - -
– – – – – – – –
FIN

2. Sintaxis:

JNB P1.0, etiqueta
– – – – – – – –
– – – – – – – –
Etiqueta: - - - - - - - -
– – – – – – – –
FIN

3. Sintaxis:

JC, etiqueta
– – – – – – – –
– – – – – – – –
Etiqueta: - - - - - - - -
– – – – – – – –
FIN

4. Sintaxis:

JNC, etiqueta
– – – – – – – –
– – – – – – – –
Etiqueta: - - - - - - - -
– – – – – – – –
FIN
5. Sintaxis:

JZ, etiqueta
– – – – – – – –
– – – – – – – –
Etiqueta: - - - - - - - -
– – – – – – – –
FIN

6. Sintaxis:

JNZ, etiqueta
– – – – – – – –
– – – – – – – –
Etiqueta: - - - - - - - -
– – – – – – – –
FIN

Instrucciones de llamada y salto:

Las instrucciones de llamada y salto se utilizan para evitar la replicación del código del programa. Cuando algún código específico se usa más de una vez en diferentes lugares del programa, si mencionamosnombre especificoacodificar entoncespodríamos usar ese nombre en cualquier parte del programa sin ingresar un código para cada vez. Esto reduce la complejidad del programa. La programación del 8051 consta de instrucciones de llamada y salto como LCALL, SJMP.

  • LCALL
  • UNA LLAMADA
  • SJMP
  • LJMP

1. Sintaxis:

ORG 0000h
– – – – – – – –
– – – – – – – –
ACALL, etiqueta
– – – – – – – –
– – – – – – – –
PARADA SJMP
Etiqueta: - - - - - - - -
– – – – – – – –
– – – – – – – –
derecho
DETENER:NOP

2. Sintaxis:

ORG 0000h
– – – – – – – –
– – – – – – – –
LCALL, etiqueta
– – – – – – – –
– – – – – – – –
PARADA SJMP
Etiqueta: - - - - - - - -
– – – – – – – –
– – – – – – – –
derecho
DETENER:NOP

Instrucciones de llamada y salto

Instrucciones de llamada y salto

Instrucciones de bucle:

Las instrucciones de bucle se utilizan para repetir el bloque cada vez que se realizan las operaciones de incremento y decremento. El 8051microcontroladorconstan de dos tipos de instrucciones de bucle:

  • CJNE -> comparar y saltar si no es igual
  • DJNZ -> decrementar y saltar si no es cero

1. Sintaxis:

deCJNE
MOV A, # 00H
MOV B, # 10H
Etiqueta: INC A
– – – – – –
– – – – – –
CJNE A, etiqueta

2. Sintaxis:

deDJNE

MOV R0, # 10H
Etiqueta: – – – – – –
– – – – – –
DJNE R0, sello
– – – – – –
– – – – – –
FIN

Conjunto de instrucciones lógicas:

El conjunto de instrucciones del microcontrolador 8051 proporciona las instrucciones lógicas AND, OR, XOR, TEST, NOT y booleanas para el conjunto y borra los bits según la necesidad del programa.

Conjunto de instrucciones lógicas

Conjunto de instrucciones lógicas

1. Sintaxis:

MOV A, # 20H / 00100000 /
MOV R0, # 03H / 00000101 /
ORL A, R0 // 00100000/00000101 = 00000000 //

2. Sintaxis:

MOV A, # 20H / 00100000 /
MOV R0, # 03H / 00000101 /
ANL A, R0

3. Sintaxis:

MOV A, # 20H / 00100000 /
MOV R0, # 03H / 00000101 /
XRL A, R0

Operadores de cambio

Los operadores de turno se utilizan para enviar y recibir los datos de manera eficiente. El 8051microcontroladorconstan de cuatro operadores de turno:

  • RR -> Girar a la derecha
  • RRC -> Girar a la derecha a través del transporte
  • RL -> Girar a la izquierda
  • RLC -> Girar a la izquierda a través del transporte

Girar a la derecha (RR):

En esta operación de desplazamiento, el MSB se convierte en LSB y todos los bits se desplazan hacia el lado derecho bit a bit, en serie.

Sintaxis:

MOV A, # 25h
RR A

Girar a la izquierda (RL):

En esta operación de desplazamiento, el MSB se convierte en LSB y todos los bits se desplazan hacia el lado izquierdo bit a bit, en serie.

Sintaxis:

MOV A, # 25h
RL A

RRC Girar a la derecha a través del transporte:

En esta operación de cambio, el LSB se mueve a acarreo y el acarreo se convierte en MSB, y todos los bits se desplazan hacia la posición del lado derecho bit a bit.

Sintaxis:

MOV A, # 27h
RRC A

RLC Girar a la izquierda a través de Carry:

En esta operación de cambio, el MSB se mueve para llevar y el acarreo se convierte en LSB y todos los bits se desplazan hacia el lado izquierdo en una posición bit a bit.

Sintaxis:

MOV A, # 27h
RLC A

Programas C integrados básicos:

losmicrocontroladorla programación difiere para cada tipo de sistema operativo. Existen muchos sistemas operativos como Linux, Windows, RTOS y así sucesivamente. Sin embargo, RTOS tiene varias ventajas para el desarrollo de sistemas integrados. Algunos de los ejemplos de programación de nivel de ensamblador se dan a continuación.

LED parpadeando con 8051microcontrolador:

  • Número que se muestra en la pantalla de 7 segmentos utilizando el microcontrolador 8051
  • Cálculos del temporizador / contador y programa con 8051microcontrolador
  • Cálculos y programa de comunicación serial usando 8051microcontrolador

Programas LED con 8051 Microcontrller

1. WAP para alternar los LED de PORT1

ORG 0000H
TOGLE: MOV P1, # 01 //moverse00000001 al registro p1 //
CALL DELAY // ejecuta el retraso //
MOV A, P1 // movervalor p1al acumulador //
CPL A // valor complementario A //
MOV P1, A // mover 11111110 al registro port1 //
CALL DELAY // ejecuta el retraso //
CAMBIO SJMP
DELAY: MOV R5, # 10H // cargar el registro R5 con 10 //
DOS: MOV R6, # 200 // carga el registro R6 con 200 //
UNO: MOV R7, # 200 // carga el registro R7 con 200 //
DJNZ R7, $ // decrementar R7 hasta que sea cero //
DJNZ R6, ONE // decrementar R7 hasta que sea cero //
DJNZ R5, TWO // decrementar R7 hasta que sea cero //
RET // volver al programa principal //
FIN

Cálculos y programación del temporizador / contador con 8051 Microcontrolador:

El retraso es uno de los factores importantes en el desarrollo de software de aplicación. los temporizadores y contadores son componentes de hardware delmicrocontrolador, que se utilizan en muchas aplicaciones para proporcionar el retardo de tiempo preciso con pulsos de conteo. Botras tareas se implementan mediante la técnica del software.

1. WAP para calcular la demora de 500us.

MOV TMOD, # 10H // seleccione el modo de temporizador por los registros //
MOV TH1, # 0FEH // almacena el tiempo de retardo en un bit superior //
MOV TL1, # 32H // almacena el tiempo de retardo en bit bajo //
JNB TF1, $ // disminuir el valor del temporizador hasta que sea cero //
CLR TF1 // borrar la bandera del temporizadorun poco//
CLR TR1 // APAGAR el temporizador //

2. WAP para alternar los LEDcon el5segundotiempo de retardo

ORG 0000H
DEVOLUCIÓN: MOV PO, # 00H
RETRASO DE LLAMADA
MOV P0, # 0FFH
RETRASO DE LLAMADA
SALTO RETORNO
DELAY: MOV R5, # 50H // cargar el registro R5 con 50 //
DELAY1: MOV R6, # 200 // carga el registro R6 con 200 //
DELAY2: MOV R7, # 229 // carga el registro R7 con 200 //
DJNZ R7, $ // decrementar R7 hasta que sea cero //
DJNZ R6, DELAY2 // decrementar R6 hasta que sea cero //
DJNZ R5, DELAY1 // decrementar R5 hasta que sea cero //
RET // volver al programa principal //
FIN

3. WAP para contar los 250 pulsos usando mode0 count0

Sintaxis:

ORG 0000H
MOV TMOD, # 50H // seleccione el contador //
MOV TH0, # 15 // mueve los pulsos de conteo bit más alto //
MOV TH1, # 9FH //moverselos pulsos de conteo, bit inferior //
SET TR0 // EN el temporizador //
JNB $ // disminuir el valor de la cuenta hasta cero //
CLR TF0 // borrar el contador, banderaun poco//
CLR TR0 // detener el temporizador //
FIN

Programación de comunicación en serie con 8051 Microcontrolador:

Comunicación serial se utiliza comúnmente para transmitir y recibir los datos. El 8051microcontroladorconsisten en comunicación serial UART / USART y las señales son transmitidas y recibidas porTxy pines Rx. La comunicación UART transfiere los datos bit a bit en serie. El UART es un protocolo semidúplex que transfiere y recibe los datos, pero no al mismo tiempo.

1. WAP para transmitir los personajes al Hyper Terminal

MOV SCON, # 50H // establece la comunicación serial //
MOV TMOD, # 20H // seleccione el modo de temporizador //
MOV TH1, # -3 // establece la velocidad en baudios //
SET TR1 // EN el temporizador //
MOV SBUF, # ’S’ // transmite S a la ventana serial //
JNB TI, $ // disminuir el valor del temporizador hasta que sea cero //
CLR RI // borrar la interrupción de recepción //
CLR TR1 // borrar temporizador //

2. WAP para transmitir el Recibir el carácter por el Hyper Terminal

MOV SCON, # 50H // establece la comunicación serial //
MOV TMOD, # 20H // seleccione el modo de temporizador //
MOV TH1, # -6 // establece la velocidad en baudios //
SET TR1 // en el temporizador //
MOV SBUF, # ’S’ // transmite S a la ventana serial //
JNB RI, $ // disminuir el valor del temporizador hasta que sea cero //
CLR RI // borrar la interrupción de recepción //
MOV P0, SBUF // envía el valor del registro SBUF al puerto0 //
CLR TR1 // borrar temporizador //

Se trata de la programación 8051 en lenguaje ensamblador en breve con programas basados ​​en ejemplos. Esperamos que esta información adecuada sobre el lenguaje ensamblador sea ciertamente útil para los lectores y esperamos sus valiosos comentarios en la sección de comentarios a continuación.