






Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Instruções do 8051 em Assembly
Tipologia: Notas de estudo
1 / 12
Esta página não é visível na pré-visualização
Não perca as partes importantes!







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.
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).
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.
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.
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).
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
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.
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.
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.
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
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.
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.
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.
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;
Torna zero o flag de carry.
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
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;
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)
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.
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
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).
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.
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.