Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Set de instruções 8051, Notas de estudo de Eletrônica

Instruções do 8051 em Assembly

Tipologia: Notas de estudo

2012

Compartilhado em 11/07/2012

thiago-nunes-65
thiago-nunes-65 🇧🇷

3.5

(2)

19 documentos

1 / 12

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
EPUSP - PCS 2308/2355 - LABORATÓRIO DIGITAL
Microprocessadores I – Apêndice B 1
Apêndice B
Conjunto de Instruções do 8051
A.G. e E.T.M. / 2001 (revisão)
O 8051 apresenta 111 tipos de instruções, sendo 49 de um byte, 45 de dois bytes e 17 de três
bytes. Levando-se em contas as variações de cada tipo, chega-se a 225 instruções, onde os opcodes estão
entre 00h e FFh, exceto A5.
A seguir, é apresentado um resumo das instruções.
1. Instruções Aritméticas
São as instruções usuais de um operador de 8 bits: soma (ADD), soma com carry (ADC),
subtração com borrow (SBB), incremento (INC), decremento (DEC) e ajuste decimal (DA A). Apresenta
também duas operações que não são típicas de microprocessadores de 8 bits: multiplicação ( MUL AB) e
divisão (DIV AB).
ADD
Adiciona ao acumulador uma variável de um byte. O resultado da operação é armazenado no acumulador.
O flag C é ativado se há um overflow no bit 7, caso contrário permanece em 0. O flag AC é ativado se
houver um "vai-um" do bit 3.
ADDC
A instrução ADDC realiza a soma entre o conteúdo do acumulador, do valor da variável de um byte e o
conteúdo do flag de carry.
SUBB
Esta instrução subtrai do acumulador, o valor da variável de um byte e o conteúdo do Borrow do
acumulador. O resultado é armazenado no acumulador. O flag de carry indica que houve um "empresta
um" durante a subtração, ou seja um número maior foi subtraído de um menor. Nas demais situações, o
flag de carry permanece em zero.
Flag OV: Este flag é ativado se ocorre "vai-um" no bit 6 e não ocorre "vai-um" no bit 7, ou se ocorre
"vai-um" no bit 7 e não ocorre "vai-um" no bit 6. Na adição com os operadores representados com
sinal, a ativação deste flag indica portanto, que o resultado da adição de dois números positivos é
negativo. Também indica que um resultado negativo é obtido quando um número negativo é subtraído
de um número positivo, ou um resultado positivo é obtido quando um número positivo é subtraído de
um número negativo (overflow).
DA A
Instrução de ajuste decimal do acumulador. O valor de oito bits no acumulador é convertido em dois
dígitos BCD de quatro bits cada. Se o conteúdo dos bits 0-3 for maior que 9, ou o flag AC estiver ativado,
então o valor 6 é adicionado ao conteúdo do acumulador para a obtenção do correto código BCD. O flag
de carry não é afetado. Exemplo de utilização da instrução:
MOV R0, #23 ; R0 23
MOV A, #47 ; A 47
ADD A, R0 ; A 6A (onde 6A=23h+47h)
DA A ; A 70
pf3
pf4
pf5
pf8
pf9
pfa

Pré-visualização parcial do texto

Baixe Set de instruções 8051 e outras Notas de estudo em PDF para Eletrônica, somente na Docsity!

Apêndice B

Conjunto de Instruções do 8051

A.G. e E.T.M. / 2001 (revisão)

O 8051 apresenta 111 tipos de instruções, sendo 49 de um byte, 45 de dois bytes e 17 de três bytes. Levando-se em contas as variações de cada tipo, chega-se a 225 instruções, onde os opcodes estão entre 00h e FFh, exceto A5. A seguir, é apresentado um resumo das instruções.

1. Instruções Aritméticas

São as instruções usuais de um operador de 8 bits: soma (ADD), soma com carry (ADC), subtração com borrow (SBB), incremento (INC), decremento (DEC) e ajuste decimal (DA A). Apresenta também duas operações que não são típicas de microprocessadores de 8 bits: multiplicação ( MUL AB) e divisão (DIV AB).

• ADD

Adiciona ao acumulador uma variável de um byte. O resultado da operação é armazenado no acumulador. O flag C é ativado se há um overflow no bit 7, caso contrário permanece em 0. O flag AC é ativado se houver um "vai-um" do bit 3.

• ADDC

A instrução ADDC realiza a soma entre o conteúdo do acumulador, do valor da variável de um byte e o conteúdo do flag de carry.

• SUBB

Esta instrução subtrai do acumulador, o valor da variável de um byte e o conteúdo do Borrow do acumulador. O resultado é armazenado no acumulador. O flag de carry indica que houve um "empresta um" durante a subtração, ou seja um número maior foi subtraído de um menor. Nas demais situações, o flag de carry permanece em zero. Flag OV : Este flag é ativado se ocorre "vai-um" no bit 6 e não ocorre "vai-um" no bit 7, ou se ocorre "vai-um" no bit 7 e não ocorre "vai-um" no bit 6. Na adição com os operadores representados com sinal, a ativação deste flag indica portanto, que o resultado da adição de dois números positivos é negativo. Também indica que um resultado negativo é obtido quando um número negativo é subtraído de um número positivo, ou um resultado positivo é obtido quando um número positivo é subtraído de um número negativo (overflow).

• DA A

Instrução de ajuste decimal do acumulador. O valor de oito bits no acumulador é convertido em dois dígitos BCD de quatro bits cada. Se o conteúdo dos bits 0-3 for maior que 9, ou o flag AC estiver ativado, então o valor 6 é adicionado ao conteúdo do acumulador para a obtenção do correto código BCD. O flag de carry não é afetado. Exemplo de utilização da instrução:

MOV R0, #23 ; R0 ← 23 MOV A, #47 ; A ← 47 ADD A, R0 ; A ← 6A (onde 6A=23h+47h) DA A ; A ← 70

• MUL AB

Esta instrução multiplica o conteúdo do acumulador pelo conteúdo do registrador B, ambos como inteiros, sem sinal. O byte menos significativo do resultado é armazenado no acumulador e o byte mais significativo é armazenado no registrador B. Se o byte de maior ordem do resultado for zero, o flag OV também é zero, caso contrário é ativado, indicando que o resultado apresenta mais que oito bits. Portanto, o flag OV pode ser utilizado pelo programador para determinar se o registrador B dever ser processado após a instrução.

• DIV AB

Esta instrução faz com que o conteúdo do acumulador seja dividido pelo conteúdo de B, ambos representados como números inteiros sem sinal. A parte inteira do resultado é armazenada no acumulador. O resto é armazenado no registrador B. Se o conteúdo do registrador B anterior à operação de divisão for zero, o flag OV é ativado, caso contrário é zero.

• INC

Soma 1 ao conteúdo do registrador ou da posição de memória endereçada na instrução. Flags não são alterados por esta instrução. Exemplo:

INC DPTR; incrementa o conteúdo do registrador de ponteiro de dados. INC 23h; incrementa o conteúdo da memória RAM de endereço 23h.

• DEC

Subtrai 1 do conteúdo do registrador ou da posição de memória endereçados na instrução. Não afeta flags. Exemplo: DEC 23h; subtrai 1 do conteúdo da memória RAM de endereço 23h

2. Instruções Lógicas

Este grupo de instruções realiza as funções lógicas E (ANL), OU (ORL) e OU-EXCLUSIVO (XRL) entre as duas variáveis endereçadas pelas instruções. O resultado é armazenado na primeira variável, não se restringindo portanto, ao acumulador. As instruções para tornar zero (CLR), complementar (CPL), bem como as instruções de deslocamento (RL, RLC, RR e RRC) também fazem parte deste grupo.

A instrução SWAP A troca os quatro bits menos significativos do acumulador, pelos quatro bits mais significativos. Equivale a quatro RR A ou a quatro RL A.

Nenhuma das instruções contidas neste grupo afeta os flags, exceto RRC e RLC que realizam o deslocamento, utilizando-se do flag de carry.

As instruções lógicas são muito empregadas para realizar o clear, o set e o complemento de um ou mais bits da RAM, das portas de saída ou dos registradores de controle, através da utilização das instruções lógicas ANL, ORL e XRL. Exemplos:

ANL P1, #11100000B ;realiza um clear nos bits 4-0 da porta 1. ORL P1, A ;seta os pinos de P1 segundo os valores dos bits do acumulador XRL A, #0FFH ;complementa os bits do acumulador.

4. Instruções de Manipulação de Variáveis Booleanas

Este grupo inclui as instruções que permitem setar e zerar bits (CLR e SETB), complementar (CPL) e realizar operações lógicas E (ANL C, bit) e OU (ORL C, bit) entre qualquer bit e o carry. Também se encontram instruções de desvios condicionais que testam valores dos bits endereçáveis ou do flag de carry.

Nos mnemônicos das instruções booleanas relacionadas ao carry utiliza-se o símbolo C.

• JC/JNC

Estas instruções testam se o flag de carry do registrador PSW está setado ou resetado. Se a condição for verdadeira, o desvio é realizado.

• JB/JNB/JBC

Estas instruções testam se o bit endereçado está setado (JB) ou resetado (JNB), sendo que a instrução JBC zera o bit depois do desvio. Exemplo:

LP1: JB P3.4, T0_ON ;testa se a entrada do temporizador 0 está setado SJMP LP1 ;sendo falso, retorna para LP1, sendo verdadeiro, prosseguem em T0_ON: …… ;T0_ON;

• CLR C

Torna zero o flag de carry.

5. Desvios Incondicionais

• LJMP

Esta é a instrução de desvio longo que usa endereços de 16 bits como parte da instrução, gerando instruções de 3 bytes. Possibilita acessar qualquer localização no espaço de 64Kb de memória de programa. O formato da instrução é:

opcode Addr15-addr8 addr7- addr

Exemplo:

TEMP EQU 1000H ORG 1000H TEMP: LJMP LABEL LABEL1: LJMP TEMP

• AJMP

Esta instrução desvia o fluxo do programa para outro endereço numa faixa de 2Kbytes referentes à atual posição da memória de programa. O formato da instrução é:

ad10-ad8 / opcode Addr7-addr

Exemplo:

AJMP NEXT; MOV A, #01H; NEXT: MOV A, #0FEH;

• SJMP

Desvio curto relativo. Usa um offset de oito bits, podendo ser negativo ou positivo, ou seja o endereço de desvio pode ser de até 128 bytes a menos ou 127 bytes a mais, respectivamente, em relação à posição atual da memória. O formato da instrução é:

opcode Offset relativo

Exemplo: SJMP 00h; ;desvia para a próxima instrução (offset = 0) NEXT: SJMP 0FEH; ;retorna para a instrução anterior (offset = -1)

• JMP @A+DPTR

O conteúdo do PC é armazenado com o valor da soma dos conteúdos dos registradores DPTR e acumulador, prosseguindo portanto a execução do programa a partir deste ponto.

6. Desvios Condicionais

• JZ/JNZ

Estas instruções desviam para o endereço especificado, se o conteúdo do acumulador for igual a ou diferente de zero, respectivamente

Exemplo: MOV A, #00h JNZ LB LB1: JZ LB LB2: MOV A, #0FFh LB3: SJMP LB

• JC /JNC

Desvia se o flag de carry está ativado ou desativado respectivamente.

Resumo das Instruções do 8051 (baseado no manual da Intel)

Antes de passarmos a apresentar o conjunto completo das instruções do 8051, convém apresentarmos uma visão geral de sua estrutura interna. A figura abaixo ilustra o diagrama de blocos da arquitetura interna do microcontrolador 8051.

A figura mostra os principais componentes internos (como por exemplo, as portas de E/S, o módulo de temporização e controle, a memória interna) e os seus registradores (como por exemplo, ACC, PC, DPTR, PSW).

Segue abaixo um resumo das instruções do 8051 (em inglês).

Instructions that Affect Flag Settings:

Instruction Flags Instruction Flags C OV AC C OV AC ADD X X X CLR C 0 ADDC X X X CPL C X SUBB X X X ANL C,bit X MUL 0 X ANL C,/bit X DIV 0 X ORL C,bit X DA X ORL C,/bit X RRC X MOV C,bit X RLC X CJNE X SETB C 1

Note that operations on SFR byte address 208 or bit addresses 209-215 (i.e., the PSW or bits in the PSW) will also affect flag settings.

Note on instruction set and addressing modes:

Rn - Register R7 – R0 of currently selected Register Bank. direct - 8-bit internal data location’s address. This could be an Internal Data RAM location (0-127) or a SFR [i.e., I/O port, control register, status register, etc. (128-255)]. @Ri - 8-bit internal data RAM location (0-255) addressed indirectly through register R1 or R0.

#data - 8-bit constant included in instruction.

#data 16 - 16-bit constant included in instruction. addr 16 - 16-bit destination address. Used by LCALL & LJMP. A branch can be anywhere within 64K- byte Program Memory address space.

addr 11 - 11-bit destination address. Used by ACALL & AJMP. The branch will be within the same 2K-byte page of program memory as the first byte of the following instruction.

rel - Signed (two’s complement) 8-bit offset byte. Used by SJMP and all conditional jumps. Range is -128 to +127 bytes relative to the first byte of the following instruction. bit - Direct Addressed bit in Internal Data RAM or Special Function Register.

Logical Operations

Data Transfer Operations