Introdução à programação 8051 em linguagem assembly

Experimente Nosso Instrumento Para Eliminar Problemas





A linguagem assembly é uma linguagem de programação de baixo nível usada para escrever código de programa em termos de mnemônicos. Embora existam muitas linguagens de alto nível atualmente em demanda, a linguagem de programação assembly é popularmente usada em muitas aplicações. Ela pode ser usada para manipulações diretas de hardware. Também é usado para escrever o Código de programação 8051 de forma eficiente com menos número de ciclos de clock, consumindo menos memória em comparação com outras linguagens de alto nível.

8051 Programação em linguagem assembly

8051 Programação



8051 Programação em linguagem assembly

A linguagem assembly é uma linguagem de programação totalmente relacionada ao hardware. Os designers embarcados devem ter conhecimento suficiente sobre o hardware de um processador ou controladores específicos antes de escrever o programa. A linguagem assembly é desenvolvida por mnemônicos, portanto, os usuários não podem entendê-la facilmente para modificar o programa.


8051 Programação em linguagem assembly

8051 Programação em linguagem assembly



A linguagem de programação assembly é desenvolvida por vários compiladores e a 'pista de boliche' é mais adequado para microcontroladorprogramação desenvolvimento. Microcontroladoresou os processadores podem entender apenas a linguagem binária na forma de '0s ou 1s'. Um montador converte a linguagem assembly em linguagem binária e, em seguida, armazena-a nomicrocontroladormemória para realizar a tarefa específica.

Arquitetura do microcontrolador 8051

O 8051microcontroladoré o Arquitetura de Harvard baseada na CISC e tem periféricos como 32 E / S, temporizadores / contadores, comunicação serial e memórias. Omicrocontroladorrequer um programa para realizar as operações que requerem uma memória para salvar e ler as funções. O 8051microcontroladorconsiste em memórias RAM e ROM para armazenar instruções.

8051 Microcontrolador Arctitecuture

Arquitetura do microcontrolador 8051

Um registro é a parte principal em os processadores emicrocontroladores que está contido na memória que fornece uma maneira mais rápida de coletar e armazenar os dados. A programação em linguagem assembly do 8051 é baseada nos registros de memória. Se quisermos manipular dados para um processador ou controlador realizando subtração, adição, etc., não podemos fazer isso diretamente na memória, mas ele precisa de registros para processar e armazenar os dados.Microcontroladorescontêm diversos tipos de registros que podem ser classificados de acordo com suas instruções ou conteúdos que neles operam.

Programas de microcontrolador 8051 em linguagem Assembly

A linguagem assembly é composta de elementos que são usados ​​para escrever o programa emmaneira sequencial. Siga as regras fornecidas para escrever programação em linguagem assembly.


Regras da linguagem assembly

  • O código de montagem deve ser escrito em letras maiúsculas
  • Os rótulos devem ser seguidos por dois pontos (rótulo :)
  • Todos os símbolos e rótulos devem começar com uma letra
  • Todos os comentários são digitados em minúsculas
  • A última linha do programa deve ser a diretiva END

Os mnemônicos da linguagem assembly estão na forma de código operacional, como MOV, ADD, JMP e assim por diante, que são usados ​​para realizar as operações.

Código de operação: O op-code é uma única instrução que pode ser executada pela CPU. Aqui, o código operacional é uma instrução MOV.

Operandos: Os operandos são um único dado que pode ser operado pelo op-code. Exemplo, a operação de multiplicação é realizada pelos operandos que são multiplicados pelo operando.

Sintaxe: MUL a,b

Os elementos de uma programação em linguagem Assembly:

  • Diretrizes de montagem
  • Conjunto de instruções
  • Modos de Endereçamento

Instruções de montagem:

As diretivas de montagem fornecem as instruções para a CPU. O 8051microcontroladorconsiste em vários tipos de diretivas de montagem para dar a direção para a unidade de controle. As diretivas mais úteis são a programação 8051, como:

  • ORG
  • DB
  • EQU
  • FIM

ORG(origem): Esta diretiva indica o início do programa. Isso é usado para definir o endereço de registro durante a montagem. Por exemplo, ORG 0000h informa ao compilador todos os códigos subsequentes, começando no endereço 0000h.

Sintaxe: ORG 0000h

DB(definir byte): O definir byte é usado para permitir uma sequência de bytes. Por exemplo, imprima o “EDGEFX” em que cada caractere é obtido pelo endereço e, por fim, imprime a “string” pelo banco de dados diretamente com aspas duplas.

Sintaxe:

ORG 0000h

MOV a, # 00h
————-
————-
DB “EDGEFX”

EQU (equivalente): A diretiva equivalente é usada para igualar o endereço da variável.

Sintaxe:

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

FIM: A diretiva END é usada para indicar o fim do programa.

Sintaxe:

reg equ,09h

—————–
—————–
MOVreg,# 2h
FIM

Modos de endereçamento:

A forma de acessar os dados é chamada de modo de endereçamento. A CPU pode acessar os dados de diferentes maneiras usando modos de endereçamento. O 8051microcontroladorconsiste em cinco modos de endereçamento, como:

  • Modo de endereçamento imediato
  • Registrar modo de endereçamento
  • Modo de endereçamento direto
  • Modo de endereçamento indireto
  • Modo de endereçamento de índice de base

Modo de endereçamento imediato:

Neste modo de endereçamento, a origem deve ser um valor que pode ser seguido por ‘#’ e o destino deve ser Registros SFR, registros de uso geral e endereço. É usado para armazenar imediatamente o valor nos registros da memória.

Sintaxe:

MOV A, # 20h // A éaregistro do acumulador, 20 é armazenado no A //
MOV R0,# 15 // R0 é um registro de propósito geral 15 é armazenado no registro R0 //
MOV P0, # 07h // P0 é um registrador SFR 07 é armazenado no P0 //
MOV 20h,# 05h // 20h é o endereço do registro 05 armazenado nas 20h //

Antigo:

MOV R0, # 1
MOV R0, # 20 // R0<—R0[15] +20, o valor final é armazenado em R0 //

Registrar modo de endereçamento:

Neste modo de endereçamento, a origem e o destino devem ser um registro, mas não registros de uso geral. Portanto, os dados não são movidos dentro do registros de banco de uso geral .

Sintaxe:

MOV A, B // A é um registro SFR, B é um registro de propósito geral //
MOV R0, R1 // Instrução inválida, GPR para GPR não é possível //

ANTIGO:

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

Modo de endereçamento direto

Neste modo de endereçamento, a origem ou destino (ou origem e destino) deve ser um endereço, mas não um valor.

Sintaxe:

MOV A,20h // 20h é um endereço A é um registro //
MOV 00h, 07h // ambos são endereçados dos registros GPS //

Antigo:

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

Modo de endereçamento indireto:

Neste modo de endereçamento, a origem ou destino (ou destino ou origem) deve serparaendereço indireto, mas não um valor. Este modo de endereçamento suporta o conceito de ponteiro. O ponteiro é uma variável usada para armazenar o endereço da outra variável. Este conceito de ponteiro é usado apenas para registradores R0 e R1.

Sintaxe:

MOVR0, # 01h // 01 valor é armazenado no registrador R0, o endereço R0 é 08h //
MOV R1, # 08h // R1 é a variável de ponteiro quelojasendereço (08h) de R0 //
MOV 20h,@ R1 // 01 valor é armazenado no endereço 20h do registro GP //

Modo de endereçamento indireto

Modo de endereçamento indireto

Modo de endereçamento de índice básico:

Este modo de endereçamento é usado para ler os dados do memória externa ou memória ROM . Todos os modos de endereçamento não podem ler os dados da memória de código. O código deve ser lido por meio do registro DPTR. O DPTR é usado para apontar os dados no código ou na memória externa.

Sintaxe:

MOVC A, @ A + DPTR // C indica código de memória //
MOCX A, @ A + DPTR // X indica memória externa //
EX: MOV A, # 00H // 00H é armazenado no registro A //
MOV DPTR, # 0500H // DPTR aponta endereço 0500h na memória //
MOVC A, @ A + DPTR // envie o valorparao registro A //
MOV P0, A // data de A enviar para o registrador do PO //

Conjunto de instruções:

O conjunto de instruções é a estrutura do controlador ou processador que fornece comandos ao controlador para guiá-lo no processamento de dados. O conjunto de instruções consiste em instruções, tipos de dados nativos, modos de endereçamento, registros de interrupção, manipulação excepcional e arquitetura de memória. O 8051microcontrolador pode seguir as instruções CISC com arquitetura Harvard. No caso da programação do 8051, diferentes tipos de instruções CISC incluem:

  • Conjunto de instruções de transferência de dados
  • Conjunto de instruções sequenciais
  • Conjunto de instruções aritméticas
  • Ramificação Iconstruçãodefinir
  • Conjunto de instruções de loop
  • Conjunto de instruções condicionais
  • Conjunto de instruções incondicional
  • Conjunto de instruções lógicas
  • Conjunto de instruções booleanas

Conjunto de instruções aritméticas:

As instruções aritméticas realizam as operações básicas, como:

  • Adição
  • Multiplicação
  • Subtração
  • Divisão

Adição:

ORG 0000h
MOV R0, # 03H // move o valor 3 para o registrador R0 //
MOV A, # 05H // mova o valor 5 para o acumulador A //
Adicionar A, 00H //addAvalor com o valor R0 e armazena o resultadoem um//
FIM

Multiplicação:

ORG 0000h
MOV R0, # 03H // move o valor 3 para o registrador R0 //
MOV A, # 05H // mova o valor 5 para o acumulador A //
MUL A, 03H //Multiplicadoresultado é armazenado no acumulador A //
FIM

Subtração:

ORG 0000h
MOV R0, # 03H // mova o valor 3 para o registrador R0 //
MOV A, # 05H // mova o valor 5 para o acumulador A //
SUBB A, 03H // O valor do resultado é armazenado no Acumulador A //
FIM

Divisão:

ORG 0000h
MOV R0, # 03H // mova o valor 3 para o registrador R0 //
MOV A, # 15H // move o valor 5 para o acumulador A //
DIV A, 03H // valor final é armazenado no Acumulador A //
FIM

Instruções Condicionais

A CPU executa as instruções com base na condição, verificando o status de bit único ou status de byte. O 8051microcontroladorconsiste em várias instruções condicionais, como:

  • JB -> Jump below
  • JNB -> Jump if not below
  • JC -> Jump if Carry
  • JNC -> Jump ifnãoCarregar
  • JZ -> Jump if Zero
  • JNZ -> Jump ifnãoZero
Instruções Condicionais

Instruções Condicionais

1. Sintaxe:

JB P1.0, rótulo
- - - - - - - -
- - - - - - - -
Rótulo: - - - - - - - -
- - - - - - - -
FIM

2. Sintaxe:

JNB P1.0, rótulo
- - - - - - - -
- - - - - - - -
Rótulo: - - - - - - - -
- - - - - - - -
FIM

3. Sintaxe:

JC, rótulo
- - - - - - - -
- - - - - - - -
Rótulo: - - - - - - - -
- - - - - - - -
FIM

4. Sintaxe:

JNC, rótulo
- - - - - - - -
- - - - - - - -
Rótulo: - - - - - - - -
- - - - - - - -
FIM
5. Sintaxe:

JZ, rótulo
- - - - - - - -
- - - - - - - -
Rótulo: - - - - - - - -
- - - - - - - -
FIM

6. Sintaxe:

JNZ, rótulo
- - - - - - - -
- - - - - - - -
Rótulo: - - - - - - - -
- - - - - - - -
FIM

Instruções de ligação e salto:

As instruções de chamada e salto são usadas para evitar a replicação do código do programa. Quando algum código específico usado mais de uma vez em diferentes lugares do programa, se mencionarmosnome específicoparacódigo entãopoderíamos usar esse nome em qualquer lugar do programa sem inserir um código para cada vez. Isso reduz a complexidade do programa. A programação do 8051 consiste em instruções de chamada e salto, como LCALL, SJMP.

  • LCALL
  • UMA CHAMADA
  • SJMP
  • LJMP

1. Sintaxe:

ORG 0000h
- - - - - - - -
- - - - - - - -
ACALL, rótulo
- - - - - - - -
- - - - - - - -
SJMP STOP
Rótulo: - - - - - - - -
- - - - - - - -
- - - - - - - -
direita
PARE:NOP

2. Sintaxe:

ORG 0000h
- - - - - - - -
- - - - - - - -
LCALL, rótulo
- - - - - - - -
- - - - - - - -
SJMP STOP
Rótulo: - - - - - - - -
- - - - - - - -
- - - - - - - -
direita
PARE:NOP

Instruções de ligação e salto

Instruções de ligação e salto

Instruções de loop:

As instruções de loop são usadas para repetir o bloco a cada vez durante a execução das operações de incremento e decremento. O 8051microcontroladorconsistem em dois tipos de instruções de loop:

  • CJNE -> compare e salte se não for igual
  • DJNZ -> decrementar e saltar se não for zero

1. Sintaxe:

deCJNE
MOV A, # 00H
MOV B, # 10H
Rótulo: INC A
- - - - - -
- - - - - -
CJNE A, rótulo

2. Sintaxe:

deDJNE

MOV R0, # 10H
Rótulo: - - - - - -
- - - - - -
DJNE R0, rótulo
- - - - - -
- - - - - -
FIM

Conjunto de instruções lógicas:

O conjunto de instruções do microcontrolador 8051 fornece as instruções de lógica AND, OR, XOR, TEST, NOT e Booleana para definir e limpar os bits com base na necessidade do programa.

Conjunto de instruções lógicas

Conjunto de instruções lógicas

1. Sintaxe:

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

2. Sintaxe:

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

3. Sintaxe:

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

Operadores de turnos

Os operadores de turno são usados ​​para enviar e receber os dados de forma eficiente. O 8051microcontroladorconsistem em quatro operadores de turno:

  • RR -> Girar para a direita
  • RRC -> Girar para a direita através do transporte
  • RL -> Girar para a esquerda
  • RLC -> Girar para a esquerda através do transporte

Girar para a direita (RR):

Nesta operação de deslocamento, o MSB se torna LSB e todos os bits se deslocam para o lado direito, bit a bit, em série.

Sintaxe:

MOV A, # 25h
RR A

Girar para a esquerda (RL):

Nesta operação de deslocamento, o MSB se torna LSB e todos os bits se deslocam para o lado esquerdo bit a bit, em série.

Sintaxe:

MOV A, # 25h
RL A

RRC Rotate Right through Carry:

Nesta operação de deslocamento, o LSB se move para o carry e o carry se torna MSB, e todos os bits são deslocados para o lado direito, bit a bit.

Sintaxe:

MOV A, # 27h
RRC A

RLC Girar para a esquerda através de Carry:

Nesta operação de deslocamento, o MSB se move para o carry e o carry se torna LSB e todos os bits se deslocam para o lado esquerdo em uma posição bit a bit.

Sintaxe:

MOV A, # 27h
RLC A

Programas C embutidos básicos:

Omicrocontroladora programação difere para cada tipo de sistema operacional. tem muitos sistemas operacionais como Linux, Windows, RTOS e assim por diante. No entanto, o RTOS tem várias vantagens para o desenvolvimento de sistemas embarcados. Alguns dos exemplos de programação em nível de Assembléia são fornecidos abaixo.

LED piscando usando com 8051microcontrolador:

  • Número exibido no display de 7 segmentos usando o microcontrolador 8051
  • Cálculos e programa de temporizador / contador usando 8051microcontrolador
  • Cálculos de comunicação serial e programa usando 8051microcontrolador

Programas de LED com 8051 Microcontrolador

1. WAP para alternar os LEDs PORT1

ORG 0000H
TOGLE: MOV P1, # 01 //jogada00000001 para o registro p1 //
ATRASO DE CHAMADA // executa o atraso //
MOV A, P1 // movimentovalor p1para o acumulador //
CPL A // complementa o valor A //
MOV P1, A // move 11111110 para o registro da porta1 //
ATRASO DE CHAMADA // executa o atraso //
SJMP TOGLE
ATRASO: MOV R5, # 10H // carrega o registro R5 com 10 //
DOIS: MOV R6, # 200 // carrega o registro R6 com 200 //
UM: MOV R7, # 200 // carrega o registro R7 com 200 //
DJNZ R7, $ // decrementa R7 até ser zero //
DJNZ R6, ONE // decrementa R7 até ser zero //
DJNZ R5, TWO // decrementa R7 até chegar a zero //
RET // voltar ao programa principal //
FIM

Cálculos de temporizador / contador e programa usando 8051 Microcontrolador:

O atraso é um dos fatores importantes no desenvolvimento do software aplicativo. O cronômetros e contadores são componentes de hardware domicrocontrolador, que são usados ​​em muitas aplicações para fornecer o atraso de tempo preciso com pulsos de contagem. Boutras tarefas são implementadas pela técnica do software.

1. WAP para calcular o atraso de 500us.

MOV TMOD, # 10H // selecione o modo do temporizador pelos registros //
MOV TH1, # 0FEH // armazena o tempo de atraso no bit superior //
MOV TL1, # 32H // armazena o tempo de atraso no bit baixo //
JNB TF1, $ // decrementa o valor do cronômetro até que seja zero //
CLR TF1 // limpa o sinalizador do cronômetromordeu//
CLR TR1 // DESLIGUE o cronômetro //

2. WAP para alternar os LEDscom o5segatraso de tempo

ORG 0000H
RETORNO: MOV PO, # 00H
ATRASO DE CHAMADA
MOV P0, # 0FFH
ATRASO DE CHAMADA
SJUMP RETURN
ATRASO: MOV R5, # 50H // carrega o registro R5 com 50 //
DELAY1: MOV R6, # 200 // carrega o registro R6 com 200 //
DELAY2: MOV R7, # 229 // carrega o registro R7 com 200 //
DJNZ R7, $ // decrementa R7 até ser zero //
DJNZ R6, DELAY2 // decrementa R6 até que seja zero //
DJNZ R5, DELAY1 // decrementa R5 até que seja zero //
RET // voltar ao programa principal //
FIM

3. WAP para contar 250 pulsos usando mode0 count0

Sintaxe:

ORG 0000H
MOV TMOD, # 50H // selecione o contador //
MOV TH0, # 15 // move o bit superior de contagem de pulsos //
MOV TH1, # 9FH //jogadaos pulsos de contagem, bit inferior //
SET TR0 // LIGUE o cronômetro //
JNB $ // diminui o valor da contagem até zero //
CLR TF0 // limpar o contador, sinalizarmordeu//
CLR TR0 // parar o cronômetro //
FIM

Programação de comunicação serial usando 8051 Microcontrolador:

Comunicação em série é comumente usado para transmitir e receber os dados. O 8051microcontroladorconsistem em comunicação serial UART / USART e os sinais são transmitidos e recebidos porTxe pinos Rx. A comunicação UART transfere os dados bit a bit serialmente. O UART é um protocolo half-duplex que transfere e recebe os dados, mas não ao mesmo tempo.

1. WAP para transmitir os personagens para o Hiper Terminal

MOV SCON, # 50H // definir a comunicação serial //
MOV TMOD, # 20H // selecione o modo do temporizador //
MOV TH1, # -3 // definir a taxa de transmissão //
SET TR1 // ON o cronômetro //
MOV SBUF, # ’S’ // transmitir S para a janela serial //
JNB TI, $ // decrementa o valor do cronômetro até que seja zero //
CLR RI // limpar interrupção de recepção //
CLR TR1 // limpar cronômetro //

2. WAP para transmitir o Receber o personagem pelo Hiper Terminal

MOV SCON, # 50H // definir a comunicação serial //
MOV TMOD, # 20H // selecione o modo do temporizador //
MOV TH1, # -6 // definir a taxa de transmissão //
SET TR1 // no cronômetro //
MOV SBUF, # ’S’ // transmitir S para a janela serial //
JNB RI, $ // decrementa o valor do cronômetro até que seja zero //
CLR RI // limpar interrupção de recepção //
MOV P0, SBUF // envia o valor do registro SBUF para a porta0 //
CLR TR1 // limpar cronômetro //

Isso é tudo sobre o 8051 Programming in Assembly language em resumo com programas baseados em exemplos. Esperamos que esta informação adequada sobre a linguagem assembly seja certamente útil para os leitores e esperamos seus valiosos comentários na seção de comentários abaixo.