Você está na página 1de 97

Especificao Funcional

Microcontrolador 8051 CPU

Projeto Fnix

BRAZIL IP

Verso 2.1 | 02/09/2003


Responsvel: Tiago Sampaio Lins
{tsl@cin.ufpe.br}

Fnix Project

Microcontrolador 8051 - CPU

Histrico de Alteraes
Data

Verso

Descrio

Autor

06/08/03

1.0

Primeira
verso
do
Especificao da CPU.

documento

de (jfbs, jcs, tsl)@cin.ufpe.br

01/09/03

2.0

Segunda
verso
do
Especificao da CPU.

documento

de (jfbs,jcs,aaca)@cin.ufpe.br

02/09/03

2.1

Correo ortogrfica.

(jfbs,jcs,aaca)@cin.ufpe.br

Lista de Aprovadores
Nome

Cargo

Edna Barros

Coordenadora Geral do Projeto Fnix

Srgio Cavalcante

Coordenao de Divulgao Externa do Brazil-IP

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 2/97

Microcontrolador 8051 - CPU

Fnix Project

Contedo

1. Caso de Uso Executar Instruo..................................................................................................... 16


1.1 Convenes, termos e abreviaes________________________________________________ 16
OV........................................................................................................................................................ 16
Overflow............................................................................................................................................... 16
SP......................................................................................................................................................... 16
Stack Pointer........................................................................................................................................ 16
ACC, A................................................................................................................................................. 16
Acumulador......................................................................................................................................... 16
IR.......................................................................................................................................................... 16
Registrador de Instruo..................................................................................................................... 16
DPTR LOW......................................................................................................................................... 16
Data Pointer Registrar Low................................................................................................................ 16
DPTR HIGH........................................................................................................................................ 16
Data Pointer Registrar High............................................................................................................... 16
PSW...................................................................................................................................................... 16
Program Status Work.......................................................................................................................... 16
C........................................................................................................................................................... 16
Carry flag............................................................................................................................................. 16
AC......................................................................................................................................................... 16
Carry flag auxiliar............................................................................................................................... 16
B........................................................................................................................................................... 16
Registrador B....................................................................................................................................... 16
SBUF.................................................................................................................................................... 16
Registrador usado no recebimento e na transferncia de dados da USART (Para maiores detalhes
vide a especificao da USART)........................................................................................................... 16
Write_to_sbuf....................................................................................................................................... 16
Sinal usado para escrever no SBUF (Para maiores detalhes vide a especificao da USART)......16
P0, P1, P2 e P3.................................................................................................................................... 16

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 3/97

Microcontrolador 8051 - CPU

Fnix Project

Portas de entradas e sada do 8051 (Para maiores detalhes vide especificao das portas de
entrada e sada) ................................................................................................................................... 16
1.2 Descrio___________________________________________________________________ 16
1.3 Diagrama Comportamental_____________________________________________________ 17
2. Diagrama de Blocos......................................................................................................................... 18
Nesta sesso ser mostrado um diagrama de blocos para a CPU do microcontrolador 8051 e como
foi feita a especificao do seu repertrio de instrues j se fazendo uma breve explanao de cada
uma......................................................................................................................................................... 18
A especificao do repertrio de instrues foi feita agrupando as instrues em cinco grupos:
operaes aritmticas, operaes lgicas, transferncia de dados, manipulao de variveis
booleanas e desvio de programa. O agrupamento foi feito com base na semelhana da operao
que cada instruo executa e pela forma de endereamento comum................................................. 18
Ainda dentro de cada grupo especificamos detalhadamente cada instruo e sugerimos um
diagrama de estados para uma possvel implementao..................................................................... 18
O diagrama de blocos abaixo mostra a arquitetura do microcontrolador 8051, temos um
barramento de dados de 8 bits, um barramento de endereo de 16 bits, os seguintes registradores:
SP, ACC, IR, DPTR LOW, DPTR HIGH e o PSW como registradores de 8 bits. A memria RAM
com 256 posies endereadas a byte e, contida nesta, a regio endereada a bit que vai do
endereo 20H a 2FH. Temos ainda as portas de entrada e sada P0, P1, P2 e P3. ........................... 18
Para um entendimento completo do restante da especificao o sumrio de termos apresentado
abaixo:................................................................................................................................................... 19
TERMO................................................................................................................................................ 19
DESCRIO....................................................................................................................................... 19
SFR...................................................................................................................................................... 19
Registrador de Funo Especial......................................................................................................... 19
Ciclo..................................................................................................................................................... 19
Um ciclo corresponde a 12 pulsos de clock na freqncia de 33 MHz............................................. 19
Rn......................................................................................................................................................... 19
Corresponde ao registrador R7-R0 do banco de registradores ativo................................................. 19
Direto................................................................................................................................................... 19
Endereo de um dado de 8 bits. Esse dado pode est localizado na RAM interna (0-127) ou um
SFR [portas de E/S, PSW, TCOM, etc. (128-255)].............................................................................. 19
@Ri....................................................................................................................................................... 19
Endereo de um dado de 8 bits localizado na RAM interna endereado indiretamente pelos
registradores R0 e R1. ......................................................................................................................... 19
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 4/97

Microcontrolador 8051 - CPU

Fnix Project

#dado.................................................................................................................................................... 19
Uma constante de 8 bits contida na instruo.................................................................................... 19
#dado 16............................................................................................................................................... 19
Uma constante de 16 bits contida na instruo.................................................................................. 19
Addr 16................................................................................................................................................. 19
Endereo de destino com 16 bits. Usado nas instrues LCALL e LJMP........................................ 19
Addr 11................................................................................................................................................. 20
Endereo de destino com 11 bits. Usado nas instrues ACALL e AJMP.......................................20
Rel........................................................................................................................................................ 20
Offset de 8 bits com sinal. Usado pela instruo SJMP e todas as instrues de desvio condicional.
Seu valor varia de 128 a +127............................................................................................................. 20
Bit......................................................................................................................................................... 20
Endereo direto de um bit na RAM interna ou de um SFR.............................................................. 20
3. Repertrio de Instrues.................................................................................................................. 20
A seguir temos uma tabela com todas as instrues do 8051 com uma breve descrio da sua
funcionalidade, o nmero de bytes e o nmero de ciclos que leva para executar. Adiante cada uma
das instrues ser minuciosamente detalhada................................................................................... 20
Conforme visto anteriormente neste documento as instrues do Microcontrolador 8051 foram
divididas em subgrupos por semelhanas na forma de endereamento e no tipo de operao que
executam. No decorrer desta sesso ser especificado detalhadamente o comportamento de cada
instruo do 8051 e a qual subgrupo ela pertence............................................................................... 25
Para uma melhor compreenso das instrues descritas a seguir, pode-se visualizar cada uma
delas como sendo um sub-fluxo do fluxo principal, tal sub-fluxo est contido dentro do estado de
execuo do fluxo principal.................................................................................................................. 25
Instrues Aritmticas____________________________________________________________ 27
Neste grupo esto as instrues ADD (adio de dois operandos), ADDC (adio de dois
operandos com carry flag), SUBB (subtrao de dois operandos com carry flag), INC (incrementa
operando), DEC (decrementa operando), MUL (multiplicao de dois operandos) DIV (diviso de
dois operandos) e DA (ajuste decimal)................................................................................................. 27
3.1.1 ADD A, operando.................................................................................................................. 27
ADD A, Rn........................................................................................................................................... 27
Opcode: 00101rrr (x28 ->x2F)............................................................................................................ 28
Operao: (A) (A) + (Rn)............................................................................................................... 28
ADD A, direto...................................................................................................................................... 27
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 5/97

Microcontrolador 8051 - CPU

Fnix Project

Opcode: 00100101 (x25)..................................................................................................................... 28


ADD A, @Ri......................................................................................................................................... 27
Opcode: 0010011i (x26 -> x27)........................................................................................................... 28
Operao: (A) (A) + ((Ri)).............................................................................................................. 28
ADD A, #dado...................................................................................................................................... 28
Opcode: 00100100 (x24)..................................................................................................................... 28
3.1.2 ADDC A, operando............................................................................................................... 28
ADDC A, Rn........................................................................................................................................ 29
Opcode: 00111rrr (x38 -> x3F)........................................................................................................... 29
Operao: (A) (A) + (Rn) + (C)...................................................................................................... 29
ADDC A, direto................................................................................................................................... 29
Opcode: 00110101 (x35)..................................................................................................................... 29
ADDC A, @Ri...................................................................................................................................... 29
Opcode: 0011011i (x36 -> x37)........................................................................................................... 29
Operao: (A) (A) + (C) + ((Ri)).................................................................................................... 29
ADDC A, #dado................................................................................................................................... 29
Opcode: 00110100 (x34)..................................................................................................................... 29
3.1.3 SUBB A, operando................................................................................................................ 29
SUBB A, Rn......................................................................................................................................... 30
Opcode: 01001rrr (x98 -> x9F)........................................................................................................... 30
Operao: (A) (A) - (C) - (Rn........................................................................................................ 30
SUBB A, direto.................................................................................................................................... 30
Opcode: 10010101 (x95)..................................................................................................................... 30
SUBB A, @Ri....................................................................................................................................... 30
Opcode: 1001011i (x96-> x97)............................................................................................................ 30
Operao: (A) (A) - (C) - ((Ri))...................................................................................................... 30
SUBB A, #dado.................................................................................................................................... 30
Opcode: 10010100 (x94)..................................................................................................................... 31
3.1.4 INC operando......................................................................................................................... 31
Opcode: 00000100 (x04)..................................................................................................................... 32
Operao: (A) (A) + 1..................................................................................................................... 32
INC Rn................................................................................................................................................. 31
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 6/97

Microcontrolador 8051 - CPU

Fnix Project

Opcode: 00001rrr (x08 -> x0F)........................................................................................................... 32


INC direto............................................................................................................................................ 31
Opcode: 00000101 (x05)..................................................................................................................... 32
Operao: (direto) (direto) + 1....................................................................................................... 32
INC @Ri............................................................................................................................................... 32
Opcode: 0000011i (x06 -> x07)........................................................................................................... 32
INC DPTR........................................................................................................................................... 32
Opcode: 10100011(xA3)...................................................................................................................... 32
3.1.5 DEC operando........................................................................................................................ 32
SUBB A, Rn......................................................................................................................................... 33
Opcode: 01001rrr (x98 -> x9F)........................................................................................................... 33
Operao: (A) (A) - (C) - (Rn........................................................................................................ 33
SUBB A, direto.................................................................................................................................... 33
Opcode: 10010101 (x95)..................................................................................................................... 33
SUBB A, @Ri....................................................................................................................................... 33
Opcode: 1001011i (x96-> x97)............................................................................................................ 33
Operao: (A) (A) - (C) - ((Ri))...................................................................................................... 33
SUBB A, #dado.................................................................................................................................... 33
Opcode: 10010100 (x94)..................................................................................................................... 33
3.1.6 MUL AB................................................................................................................................ 33
MUL AB............................................................................................................................................... 34
Opcode: 10100100 (xA4)..................................................................................................................... 34
Operao: (A)7-0 (A) x (B).............................................................................................................. 34
(B)15-8.............................................................................................................................. 34
3.1.7 DIV AB.................................................................................................................................. 34
DIV AB................................................................................................................................................ 35
Opcode: 10000100 (x84).................................................................................................................... 35
Operao: (A)15-8 (A)/(B).............................................................................................................. 35
(B)7-0................................................................................................................................. 35
3.1.8 DA A...................................................................................................................................... 35
DA A..................................................................................................................................................... 36
Opcode: 11010100 (xD4)..................................................................................................................... 37
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 7/97

Microcontrolador 8051 - CPU

Fnix Project

Operao: IF[[(A3-0) > 9] [(AC) = 1]]............................................................................................. 37


THEN(A3-0) (A3-0) + 6............................................................................................... 37
AND ................................................................................................................................. 37
IF[[(A7-4) > 9] [C = 1]]................................................................................................. 37
THEN(A7-4) (A7-4) + 6............................................................................................... 37
3.2 Instrues Lgicas____________________________________________________________ 37
Neste grupo esto as instrues de ANL (e lgico entre dois operandos), ORL (ou lgico de dois
operandos), XRL (ou exclusivo de dois operandos), CLR (limpa Acumulador), CPL (complemento
lgico do acumulador), RL (rotao para a esquerda), RLC (rotao para a esquerda com carry
flag), RR (rotao para a direita), RRC (rotao para a direita com carry flag) e SWAP (troca os
nibbles do acumulador)......................................................................................................................... 37
3.2.1 ANL A, operando.................................................................................................................. 37
ANL A, Rn........................................................................................................................................... 38
Opcode: 01011rrr (x58 -> 5F)............................................................................................................. 38
Operao: (A) (A)(Rn).................................................................................................................. 38
ANL A, Direto...................................................................................................................................... 38
Opcode: 01010101 (x55)..................................................................................................................... 38
ANL A, @Ri......................................................................................................................................... 38
Opcode: 0101011i (x56 -> 57)............................................................................................................. 38
Operao: (A) (A)(indireto).......................................................................................................... 38
ANL A, #dado...................................................................................................................................... 38
Opcode: 01010100 (x54)..................................................................................................................... 38
3.2.2 ANL direto, operando............................................................................................................ 38
ANL direto, A....................................................................................................................................... 39
Opcode: 01010010 (x52)..................................................................................................................... 39
Operao:(direto) (direto) (A)........................................................................................................ 39
ANL direto, #dado............................................................................................................................... 39
Opcode: 01010011 (x53)..................................................................................................................... 39
3.2.3 ORL A, operando................................................................................................................... 39
ORL A, Rn........................................................................................................................................... 40
Opcode: 01001rrr (x48 -> x4F)........................................................................................................... 40
Operao: (A) (A)(Rn).................................................................................................................. 40
ORL A, direto....................................................................................................................................... 40
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 8/97

Microcontrolador 8051 - CPU

Fnix Project

Opcode: 01000101 (x45)..................................................................................................................... 40


ORL A, @Ri......................................................................................................................................... 40
Opcode: 0100011i (x46 -> x47)........................................................................................................... 40
Operao: (A) (A)(indireto).......................................................................................................... 40
ORL A, #dado...................................................................................................................................... 40
Opcode: 01000100 (x44)..................................................................................................................... 40
3.2.4 ORL direto, operando............................................................................................................ 40
ORL direto, A....................................................................................................................................... 41
Opcode: 01000010 (x42)..................................................................................................................... 41
Operao:(direto)(direto) (A)......................................................................................................... 41
ORL direto, #dado............................................................................................................................... 41
Opcode: 01000011 (x43)..................................................................................................................... 41
3.2.5 XRL A, operando................................................................................................................... 41
XRL A, Rn............................................................................................................................................ 42
Opcode: 01101rrr (x68 -> 6F)............................................................................................................. 42
Operao: (A) (A) (Rn)................................................................................................................ 42
XRL A, Direto...................................................................................................................................... 42
Opcode: 01100101 (x65)..................................................................................................................... 42
XRL A, @Ri......................................................................................................................................... 42
Opcode: 0110011i (x66 -> x67)........................................................................................................... 42
Operao: (A) (A) (indireto)....................................................................................................... 42
XRL A, #dado...................................................................................................................................... 42
Opcode: 01100100 (x64)..................................................................................................................... 43
3.2.6 XRL direto, operando............................................................................................................ 43
Obs.: Quando esta instruo usada para modificar uma porta de sada, o valor usado como
origem deve ser lido do latch e no dos pinos de entrada.................................................................... 43
Modo de Endereamento: Acumulador e dado imediato................................................................... 43
XRL direto, A....................................................................................................................................... 43
Opcode: 01100010 (x62)..................................................................................................................... 44
Operao: (direto)(direto) (A)....................................................................................................... 44
XRL direto, #dado................................................................................................................................ 43
Opcode: 01100011 (x63)..................................................................................................................... 44
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 9/97

Microcontrolador 8051 - CPU

Fnix Project

3.2.7 CLR A.................................................................................................................................... 44


Fluxo:................................................................................................................................................... 44
1. Zera os bits do Acumulador;............................................................................................................ 44
2. No afeta nenhum flag..................................................................................................................... 44
Diagrama de Execuo da Instruo CRL A..................................................................................... 44
.............................................................................................................................................................. 44
Variaes:............................................................................................................................................ 44
CRL A.................................................................................................................................................. 44
Opcode: 11100100 (xE4)..................................................................................................................... 44
3.2.8 CPL A.................................................................................................................................... 44
Fluxo:................................................................................................................................................... 45
1. Complemento lgico de cada bit do Acumulador;.......................................................................... 45
2. No afeta nenhum flag..................................................................................................................... 45
Diagrama de Execuo da Instruo CPL A..................................................................................... 45
.............................................................................................................................................................. 45
CPL A................................................................................................................................................... 45
Opcode: 11110100 (xF4)..................................................................................................................... 45
3.2.9 RL A...................................................................................................................................... 45
Fluxo:................................................................................................................................................... 45
1. Rotaciona os bits do Acumulador e coloca o resultado no Acumulador;...................................... 45
2. No afeta nenhum flag..................................................................................................................... 46
Diagrama de Execuo da Instruo RL A....................................................................................... 46
.............................................................................................................................................................. 46
RL A..................................................................................................................................................... 46
Opcode: 00100011 (x23)..................................................................................................................... 46
Operao: (An+1) (An),.................................................................................................................. 46
n = 0 6,........................................................................................................................... 46
3.2.10 RLC A.................................................................................................................................. 46
Fluxo:................................................................................................................................................... 46
1. Rotaciona os bits do Acumulador e coloca o resultado no Acumulador;...................................... 46
2. Afeta carry flag................................................................................................................................. 46
Diagrama de Execuo da Instruo RLC A..................................................................................... 46
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 10/97

Microcontrolador 8051 - CPU

Fnix Project

.............................................................................................................................................................. 47
RLC A.................................................................................................................................................. 47
Opcode: 00110011 (x33)..................................................................................................................... 47
Operao: (An+1) (An),.................................................................................................................. 47
n = 0 6,........................................................................................................................... 47
(A0) C,.......................................................................................................................... 47
3.2.11 RR A.................................................................................................................................... 47
Fluxo:................................................................................................................................................... 47
1. Rotaciona os bits do Acumulador e coloca o resultado no Acumulador;...................................... 47
2. No afeta nenhum flag..................................................................................................................... 47
Diagrama de Execuo da Instruo RR A....................................................................................... 47
.............................................................................................................................................................. 48
RL A..................................................................................................................................................... 48
Opcode: 00000011 (x3)....................................................................................................................... 48
Operao: (An) (An+1),.................................................................................................................. 48
n = 0 6,.......................................................................................................................... 48
3.2.12 RRC A.................................................................................................................................. 48
Funo: Rotao a Direita com o Carry Flag................................................................................... 48
Fluxo:................................................................................................................................................... 48
1. Rotaciona os bits do Acumulador e coloca o resultado no Acumulador;...................................... 48
2. Afeta carry flag................................................................................................................................. 48
Diagrama de Execuo da Instruo RRC A.................................................................................... 49
.............................................................................................................................................................. 49
RLC A.................................................................................................................................................. 49
Opcode: 00010011 (x13)..................................................................................................................... 49
Operao: (An) (An+1),.................................................................................................................. 49
n = 0 6,........................................................................................................................... 49
(A7) C,.......................................................................................................................... 49
3.2.13 SWAP A.............................................................................................................................. 49
SWAP A............................................................................................................................................... 50
Opcode: 11000100 (xC4)..................................................................................................................... 50
3.3 Instrues de transferncia de dados_____________________________________________ 50
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 11/97

Microcontrolador 8051 - CPU

Fnix Project

As instrues de transferncia de dados so aquelas relacionadas a movimentao e copia de


dados entre a memria, registrador, acumulador. Essas instrues so descritas abaixo:...............50
3.3.1 MOV A, operando................................................................................................................. 50
MOV A, Rn......................................................................................................................................... 51
Opcode: 11101rrr (xE8 -> xEF)......................................................................................................... 51
MOV A, @Ri........................................................................................................................................ 51
Opcode: 1110011i (xE6 -> xE7)......................................................................................................... 51
MOV A, #dado..................................................................................................................................... 51
Opcode:01110100 (x74)...................................................................................................................... 51
MOV A, direto...................................................................................................................................... 51
Opcode: 11100101 (xE5)..................................................................................................................... 52
3.3.2 MOV Rn, operando................................................................................................................ 52
MOV Rn, A.......................................................................................................................................... 52
Opcode: 11111rrr (xF8 -> xFF)......................................................................................................... 52
MOV Rn, direto................................................................................................................................... 52
Opcode: 10101rrr (A8 -> AF)............................................................................................................. 52
MOV Rn, #dado................................................................................................................................... 52
Opcode: 1110011i (x78 -> x7F).......................................................................................................... 52
3.3.3 MOV direto, operando........................................................................................................... 53
MOV direto, A...................................................................................................................................... 53
Opcode: 11110101 (xF5)..................................................................................................................... 54
MOV direto, Rn................................................................................................................................... 53
Opcode:10001rrr (x88 -> x8F)............................................................................................................ 54
MOV direto, direto............................................................................................................................... 53
Opcode: 10000101 (x85)..................................................................................................................... 54
MOV direto, @Ri................................................................................................................................. 54
Opcode: 1000011i (x86 -> x87)........................................................................................................... 54
MOV direto, #dado.............................................................................................................................. 54
Opcode: 01110101 (x75)..................................................................................................................... 54
3.3.4 MOV @Ri, operando............................................................................................................. 54
MOV @Ri, A........................................................................................................................................ 55
Opcode:1111011i (xF6 -> xF7)........................................................................................................... 55
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 12/97

Microcontrolador 8051 - CPU

Fnix Project

MOV @Ri, direto................................................................................................................................. 55


Opcode: 1010011i (xA6 -> xA7)......................................................................................................... 55
MOV @Ri, #dado................................................................................................................................. 55
Opcode: 0111011i (x76 -> x77)........................................................................................................... 55
3.3.5 MOV DPTR, #dado16........................................................................................................... 55
MOV DPTR, #dado16......................................................................................................................... 56
Opcode: 10010000 (x90)..................................................................................................................... 56
Operao: (DPTR) (#dado(15-0)).................................................................................................. 56
3.3.6 MOVC A, @A+operando...................................................................................................... 56
MOVC A, @A + DPTR........................................................................................................................ 57
Opcode: 10010011 (x93)..................................................................................................................... 57
Opcode: 10000011 (x83)..................................................................................................................... 57
3.3.7 MOVX A, @operando........................................................................................................... 57
MOVX A, @Ri..................................................................................................................................... 58
Opcode: 1110001i (xE2 -> xE3)......................................................................................................... 58
MOVX A, @DPTR............................................................................................................................... 58
Opcode: 11100000 (xE0)..................................................................................................................... 58
3.3.8 MOVX @operando, A........................................................................................................... 58
Opcode: 1111001i (xF2 -> xF3).......................................................................................................... 59
MOVX @DPTR, A............................................................................................................................... 59
Opcode: 11110000 (xF0)..................................................................................................................... 59
3.3.9 PUSH operando..................................................................................................................... 59
PUSH direto......................................................................................................................................... 60
Opcode: 11000000 (xC0)..................................................................................................................... 60
3.3.10 POP operando...................................................................................................................... 60
POP direto........................................................................................................................................... 61
Opcode:10001rrr (xD0) ...................................................................................................................... 61
3.3.11 XCH A, operando................................................................................................................ 61
XCH A, Rn........................................................................................................................................... 62
Opcode: 11001rrr (xC8 -> xCF)......................................................................................................... 62
XCH A, direto...................................................................................................................................... 62
Opcode: 11000101 (xC5)..................................................................................................................... 62
XCH A, @Ri......................................................................................................................................... 62
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 13/97

Microcontrolador 8051 - CPU

Fnix Project

Opcode: 1100011i (xC6 -> xC7)......................................................................................................... 62


3.3.12 XCHD A, operando............................................................................................................. 62
XCHD A, @Ri...................................................................................................................................... 63
Opcode: 1101011i (xD6 -> xD7)......................................................................................................... 63
3.4 Instrues de manipulao de bit._______________________________________________ 63
Neste grupo esto as instrues CLR (Reseta bit) e CPL (Complementa bit), SETB (Seta bit),
ANL(AND lgico de bit), ORL(OR lgico de bit), MOV(Move bit Estas foram agrupadas, pois todas
manipulam bit. A seguir sero detalhados seus comportamentos e variaes...................................63
3.4.1 CLR operando........................................................................................................................ 63
3.4.2 SETB operando...................................................................................................................... 64
3.4.3 CPL operando........................................................................................................................ 65
3.4.4 ANL C, operando................................................................................................................... 67
3.4.5 ORL C, operando................................................................................................................... 68
3.4.6 MOV C, bit ........................................................................................................................... 69
3.4.7 MOV bit, C ........................................................................................................................... 70
3.5 Instrues de desvio___________________________________________________________ 71
Neste grupo esto as instrues JC, JNC, JB, JNB, JBC, ACALL, LCALL, RET, RETI, JMP,
LJMP, SJMP, JMP, JZ, JNZ, CJNE, DJNZ, NOP, que so instrues que executam desvio. A
seguir sero detalhados seus comportamentos e variaes.................................................................
3.5.1 JC rel......................................................................................................................................
3.5.2 JNC rel...................................................................................................................................
3.5.3 JB bit, rel................................................................................................................................
3.5.4 JNB bit, rel.............................................................................................................................
3.5.5 JBC bit,rel..............................................................................................................................
3.5.6 ACALL addr11......................................................................................................................
3.5.7 LCALL addr16......................................................................................................................
3.5.8 RET........................................................................................................................................
3.5.9 RETI.......................................................................................................................................
3.5.10 AJMP addr11.......................................................................................................................
3.5.11 LJMP addr16........................................................................................................................
3.5.12 SJMP rel...............................................................................................................................
3.5.13 JMP @A+DPTR..................................................................................................................
3.5.14 JZ rel....................................................................................................................................
3.5.15 JNZ rel.................................................................................................................................

71
71
72
73
75
76
77
78
79
80
81
83
83
84
85
86

Diagrama de Execuo da Instruo JNZ rel................................................................................... 87


.............................................................................................................................................................. 87
Variaes:............................................................................................................................................
3.5.16 CJNE A, operando, rel.........................................................................................................
3.5.17 CJNE Rn, dado, rel..............................................................................................................
3.5.18 CJNE @Ri, dado, rel...........................................................................................................
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 14/97

87
87
89
90

Microcontrolador 8051 - CPU

Fnix Project

3.5.19 DNJZ Rn, rel........................................................................................................................ 92


Funo: Decrementa e salta se o valor no for igual a zero............................................................. 92
3.5.20 DNJZ direto, rel................................................................................................................... 93
Funo: Decrementa e salta se o valor no for igual a zero............................................................. 93
3.5.21 NOP..................................................................................................................................... 95
4. Referncias....................................................................................................................................... 96
[1] Documento de Requisitos; BrazilIP_Requisitos_8051.doc........................................................... 96
[2] Modelo de Casos de Uso; <Excutar_Instruo.rtmdl>;................................................................ 96
[3] 80C51 family programmers guide and instruction set, Philips Semicondutores........................ 96

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 15/97

Fnix Project

Microcontrolador 8051 - CPU

1. Caso de Uso Executar Instruo


1.1

Convenes, termos e abreviaes

Esta subseo explica o conceito de alguns termos importantes que sero mencionados no decorrer
deste documento. Estes termos so descritos na tabela a seguir, estando apresentados por ordem
alfabtica.
Termo

1.2

Descrio

OV

Overflow

SP

Stack Pointer

ACC, A

Acumulador

IR

Registrador de Instruo

DPTR LOW

Data Pointer Registrar Low

DPTR HIGH

Data Pointer Registrar High

PSW

Program Status Work

Carry flag

AC

Carry flag auxiliar

Registrador B

SBUF

Registrador usado no recebimento e na transferncia de dados da


USART (Para maiores detalhes vide a especificao da USART)

Write_to_sbuf

Sinal usado para escrever no SBUF (Para maiores detalhes vide a


especificao da USART)

P0, P1, P2 e P3

Portas de entradas e sada do 8051 (Para maiores detalhes vide


especificao das portas de entrada e sada)

Descrio

Temporizao: O ciclo de instruo do 8051 se divide em 6 estados, cada estado em duas fases e cada
uma das fases tem a durao de um ciclo de clock, totalizando assim 12 ciclos de clock por ciclo de
instruo. Para se referir a uma fase em especfico se utiliza a notao SxPy, onde x representa o
nmero do estado e y o nmero da fase.
Pr-condies: no se aplica.
Ps-condies: no se aplica.

Fluxo de eventos principal


Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 16/97

Fnix Project

Microcontrolador 8051 - CPU

1. Este caso de uso inicia quando se comea a execuo de um programa;


2. No estado de busca da instruo deve ser carregado o opcode da mesma;
3. No prximo passo a instruo lida decodificada;
4. A instruo decodificada no passo anterior executada e o reset checado ([SB001] Verifica
o reset);
5. Execuo do reset, caso a checagem seja positiva ([SB002] Executa o reset);
6. Checa o manipulador de interrupo para saber se h alguma interrupo pendente a ser
executada, caso haja, a CPU a tratar como uma instruo qualquer apenas com a diferena de
que ser habilitado um bit para que seja passada a informao ao manipulador de interrupo
que j foi tratada a interrupo especfica.

Subfluxo
[SB001] Verifica o Reset
1. A CPU verifica o reset na fase dois (P2) do estado S5, porm o reset s ser ativado se estiver
por dois ciclos de instruo ativado(24 ciclos de clock). Caso essa condio seja atendida a
CPU responde gerando um reset interno. Durante a verificao do Reset, ALE e PSEN (Vide
especificao Portas de Entrada/Sada) mantm suas atividades atuais por 19 perodos de
oscilao, para manter as atividades de leitura da memria externa, depois que o sinal de
Reset externo foi aplicado ao pino RST (pino do reset) e verificado na fase 2 do estado 5, ou
seja, quando RST ativado, de 19 a 31 perodos aps, ALE e PSEN sero ativados tambm.

[SB002] Executa o Reset

1. O sinal de Reset interno escreve 0 (zero) em todos os SFRs exceto nos latches das portas, no
Stack Pointer e no SBUF. Os latches das portas so inicializados com FFH, o Stack Pointer
com 07H, e o SBUF com valor indeterminado. A RAM interna no ter valores modificados
pelo Reset. E aps RST ser desativado, decorrer entre 1 a 2 ciclos de mquina at que ALE e
PSEN voltem a oscilar.

1.3

Diagrama Comportamental

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 17/97

Fnix Project

Microcontrolador 8051 - CPU

Diagrama geral de execuo de instruo

t2
Busca da
Instruo

D ecodificao
da Instruo

Execuo da
Instruo

S egunda
checagem
consecutiva do
R esetpositiva

E xecuo do
R eset

E4
Initial

E1

t1

E2

t1

E 3_1

T rue
t1

t2

Checagem do
R eset(S5P 2)

t1
E 3_2

False
C P1

P rim eira checagem


positiva do R eseto
u checagem
negativa

E5

C hecagem do
M anipuladorde
Interrupo

t1

2.

Di
agrama de Blocos

Nesta sesso ser mostrado um diagrama de blocos para a CPU do microcontrolador 8051 e como foi
feita a especificao do seu repertrio de instrues j se fazendo uma breve explanao de cada uma.
A especificao do repertrio de instrues foi feita agrupando as instrues em cinco grupos:
operaes aritmticas, operaes lgicas, transferncia de dados, manipulao de variveis booleanas
e desvio de programa. O agrupamento foi feito com base na semelhana da operao que cada
instruo executa e pela forma de endereamento comum.
Ainda dentro de cada grupo especificamos detalhadamente cada instruo e sugerimos um diagrama
de estados para uma possvel implementao.
O diagrama de blocos abaixo mostra a arquitetura do microcontrolador 8051, temos um barramento de
dados de 8 bits, um barramento de endereo de 16 bits, os seguintes registradores: SP, ACC, IR,
DPTR LOW, DPTR HIGH e o PSW como registradores de 8 bits. A memria RAM com 256 posies
endereadas a byte e, contida nesta, a regio endereada a bit que vai do endereo 20H a 2FH. Temos
ainda as portas de entrada e sada P0, P1, P2 e P3.

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 18/97

Fnix Project

Microcontrolador 8051 - CPU

As instrues que endeream a RAM para a escrita no registrador SBUF, tero o endereo
para escrita do SBUF identificado, e o sinal write_to_sbuf ficar ativado durante um perodo de
oscilao do Clock1, quando a escrita for efetivada.

Para um entendimento completo do restante da especificao o sumrio de termos apresentado


abaixo:

TERMO

DESCRIO

SFR

Registrador de Funo Especial

Ciclo

Um ciclo corresponde a 12 pulsos de clock na freqncia de 33 MHz

Rn

Corresponde ao registrador R7-R0 do banco de registradores ativo

Direto

Endereo de um dado de 8 bits. Esse dado pode est localizado na RAM


interna (0-127) ou um SFR [portas de E/S, PSW, TCOM, etc. (128-255)]

@Ri

Endereo de um dado de 8 bits localizado na RAM interna endereado


indiretamente pelos registradores R0 e R1.

#dado

Uma constante de 8 bits contida na instruo

#dado 16

Uma constante de 16 bits contida na instruo

Addr 16

Endereo de destino com 16 bits. Usado nas instrues LCALL e LJMP.

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 19/97

Fnix Project

Microcontrolador 8051 - CPU

Addr 11

Endereo de destino com 11 bits. Usado nas instrues ACALL e AJMP.

Rel

Offset de 8 bits com sinal. Usado pela instruo SJMP e todas as instrues
de desvio condicional. Seu valor varia de 128 a +127.

Bit

Endereo direto de um bit na RAM interna ou de um SFR.

3. Repertrio de Instrues

Modos de Endereamento

Descrio

Acumulador (A)

O endereo
acumulador.

Registrador (Rn)

O endereo especificado o do registrador


escolhido.

Endereamento direto (direto)

O endereo dado o endereo que ser acessado


na memria.

Endereamento indireto (@Ri)

O endereo a ser acessado, ser o endereo


contido no registrador selecionado, podendo ser
este registrador R0 ou R1 do banco de
registradores ativo.

especificado

do

prprio

Endereamento indireto por meio do DPTR O endereo a ser acessado ser o endereo contido
(@DPTR)
no DPTR.
Dado imediato (#dado)

Nesse caso o dado fornecido diretamente na


instruo.

A seguir temos uma tabela com todas as instrues do 8051 com uma breve descrio da sua
funcionalidade, o nmero de bytes e o nmero de ciclos que leva para executar. Adiante cada uma das
instrues ser minuciosamente detalhada.

MINEMNICO

DESCRIO

NMERO DE BYTES

CICLOS

OPERAES ARITMTICAS
ADD A,Rn

Soma registrador com Acumulador

ADD A,direto

Soma endereo direto com Acumulador

ADD A,@Ri

Soma
endereo
Acumulador

com 1

ADD A,#dado

Soma dado imediato com Acumulador

Executar Instruo

indireto

fenix_especificao_8051_CPU.d
oc

1
Pg 20/97

Fnix Project

Microcontrolador 8051 - CPU

ADDC A,Rn

Soma registrador com Acumulador e 1


Carry

ADDC A,direto

Soma endereo direto com Acumulador 2


e Carry

ADDC A,@Ri

Soma
endereo
Acumulador e Carry

com 1

ADDC A,#dado

Soma dado imediato com Acumulador e 2


Carry

SUBB A,Rn

Subtrai Acumulador de registrador com 1


Borrow

SUBB A,direto

Subtrai Acumulador de endereo direto 2


com Borrow

SUBB A,@Ri

Subtrai Acumulador
indireto com Borrow

endereo 1

SUBB A,#dado

Subtrai Acumulador de dado imediato 2


com Borrow

INC A

Incrementa Acumulador

INC Rn

Incrementa registrador

INC direto

Incrementa endereo direto

INC @Ri

Incrementa endereo indireto

DEC A

Decrementa Acumulador

DEC Rn

Decrementa registrador

DEC direto

Decrementa endereo direto

DEC @Ri

Decrementa endereo indireto

INC DPTR

Incrementa
Register(DPTR)

Pointer 1

MUL AB

Multiplica A por B

DIV AB

Divide A por B

DA A

Ajuste decimal do Acumulador

indireto

de

Dado

OPERAES LGICAS
ANL A,Rn

E Lgico
registrador

com 1

ANL A,direto

E Lgico do Acumulador com endereo 2


direto

ANL A,@Ri

E Lgico de endereo indireto com 1

Executar Instruo

do

Acumulador

fenix_especificao_8051_CPU.d
oc

Pg 21/97

Fnix Project

Microcontrolador 8051 - CPU

Acumulador
ANL A,#dado

E Lgico de dado imediato


Acumulador

com 2

ANL direto,A

E Lgico do Acumulador com endereo 2


direto

ANL direto,#dado

E Lgico de endereo direto com dado 3


imediato

ORL A,Rn

OU Lgico
registrador

do

Acumulador

com 1

ORL A,direto

OU Lgico do
endereo direto

Acumulador

com 2

ORL A,@Ri

OU Lgico de endereo indireto com 1


Acumulador

ORL A,#dado

OU Lgico de dado imediato com 2


Acumulador

ORL direto,A

OU Lgico do
endereo direto

com 2

ORL direto,#dado

OU Lgico de endereo direto com dado 3


imediato

XRL A,Rn

OU-Exclusivo
registrador

do

Acumulador

com 1

XRL A,direto

OU-Exclusivo do
endereo direto

Acumulador

com 2

XRL A,@Ri

OU-Exclusivo de endereo indireto com 1


Acumulador

XRL A,#dado

OU-Exclusivo de dado imediato com 2


Acumulador

XRL direto,A

OU-Exclusivo do
endereo direto

com 2

XRL direto,#dado

OU-Exclusivo de endereo direto com 3


dado imediato

CLR A

Limpa Acumulador

CPL A

Complemento lgico do Acumulador

RL A

Rotao para a esquerda

RLC A

Rotao para a esquerda com Carry

RR A

Rotao para a direita

Executar Instruo

Acumulador

Acumulador

fenix_especificao_8051_CPU.d
oc

Pg 22/97

Fnix Project

Microcontrolador 8051 - CPU

RRC A

Rotao para a direita com Carry

SWAP A

Trocar os nibbles do Acumulador

TRANSFENCIA DE DADOS
MOV A,Rn

Move registrador para Acumulador

MOV A,direto

Move endereo direto para Acumulador

MOV A,@Ri

Move
endereo
Acumulador

para 1

MOV A,#dado

Move dado imediato para Acumulador

MOV Rn,A

Move Acumulador para registrador

MOV Rn,direto

Move endereo direto para registrador

MOV Rn,#dado

Move dado imediato para registrador

MOV direto,A

Move Acumulador para endereo direto

MOV direto,Rn

Move registrador para endereo direto

MOV direto,direto

Move endereo direto para endereo 3


direto

MOV direto,@Ri

Move endereo indireto para endereo 2


direto

MOV direto,#dado

Move dado imediato para endereo 3


direto

MOV @Ri,A

Move Acumulador
indireto

endereo 1

MOV @Ri,direto

Move endereo direto para endereo 2


indireto

MOV @Ri,#dado

Move dado imediato para endereo 2


indireto

MOV DPTR,#dado16

Carrega o DPTR com uma constante de 3


16 bits

MOVC A,@A+DPTR

Move dado da memria de cdigo para 1


Acumulador usando o DPTR

MOVC A,@A+PC

Move dado da memria de cdigo para 1


Acumulador usando o PC

MOVX A,@Ri

Move dado da RAM externa para o 1


Acumulador

MOVX A,@DPTR

Move dado da RAM externa para 1


Acumulador usando DPTR

Executar Instruo

indireto

para

fenix_especificao_8051_CPU.d
oc

Pg 23/97

Fnix Project

Microcontrolador 8051 - CPU

MOVX @Ri, A

Move o Acumulador para RAM externa

MOVX @DPTR, A

Move o Acumulador para RAM externa 1


usando DPTR

PUSH direto

Armazena dado no topo da pilha

POP direto

Recupera dado do topo da pilha

XCH A,Rn

Troca Acumulador com registrador

XCH A,direto

Troca Acumulador com endereo direto

XCH A,@Ri

Troca Acumulador
indireto

endereo 1

XCHD A,@Ri

Troca nibbles inferiores do Acumulador 1


com endereo indireto

com

MANIPULAO DE VARIVEIS BOOLEANAS


CLR C

Limpa Carry

CLR bit

Limpa bit de endereo direto

SETB C

Seta o Carry

SETB bit

Seta bit endereo direto

CPL C

Complemento Lgico do Carry

CPL bit

Complemento Lgico de bit endereo 2


direto

ANL C,bit

E Lgico de bit endereo direto

ANL C,/bit

E Lgico do valor do endereo direto 2


complementado

ORL C,bit

OU Lgico de bit endereo direto

ORL C,/bit

OU Lgico do valor do endereo direto 2


complementado

MOV C,bit

Move bit endereo direto para Carry

MOV bit,C

Move Carry para endereo direto

INSTRUES DE DESVIO
JC rel

Desvia se o Carry est setado

JNC rel

Desvia se o Carry no est setado

JB bit, rel

Desvia se bit endereo direto est setado 3

JNB bit, rel

Desvia se bit endereo direto no est 3


setado

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 24/97

Fnix Project

Microcontrolador 8051 - CPU

JBC bit, rel

Desvia se bit endereo direto est setado 3


e limpa o bit

ACALL addr11

Chamada de sub-rotina com desvio 2


absoluto

LCALL addr16

Chamada de sub-rotina com 16 bits

RET

Retorno de sub-rotina

RETI

Retorno de interrupo

AJMP addr11

Desvio absoluto

LJMP addr16

Desvio com 16 bits

SJMP rel

Desvio curto considerando sinal

JMP @A+DPTR

Desvio com endereo indireto

JZ rel

Desvia se Acumulador zero

JNZ rel

Desvia se Acumulador no zero

CJNE A,direto,rel

Compara
endereo
direto
com 3
Acumulador e desvia se no forem
iguais

CJNE A,#dado,rel

Compara
dado
imediato
com 3
Acumulador e desvia se no forem
iguais

CJNE Rn,#dado,rel

Compara dado imediato com Registrador 3


e desvia se no forem iguais

CJNE @Ri,#dado,rel

Compara dado imediato com endereo 3


indireto e desvia se no forem iguais

DJNZ Rn,rel

Decrementa registrador e desvia se no 2


for zero

DJNZ direto,rel

Decrementa endereo direto e desvia se 3


no for zero

NOP

Nenhuma operao executada

Conforme visto anteriormente neste documento as instrues do Microcontrolador 8051 foram


divididas em subgrupos por semelhanas na forma de endereamento e no tipo de operao que
executam. No decorrer desta sesso ser especificado detalhadamente o comportamento de cada
instruo do 8051 e a qual subgrupo ela pertence.
Para uma melhor compreenso das instrues descritas a seguir, pode-se visualizar cada uma delas
como sendo um sub-fluxo do fluxo principal, tal sub-fluxo est contido dentro do estado de execuo
do fluxo principal.
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 25/97

Microcontrolador 8051 - CPU

Executar Instruo

Fnix Project

fenix_especificao_8051_CPU.d
oc

Pg 26/97

Fnix Project

Microcontrolador 8051 - CPU

Instrues Aritmticas
Neste grupo esto as instrues ADD (adio de dois operandos), ADDC (adio de dois operandos
com carry flag), SUBB (subtrao de dois operandos com carry flag), INC (incrementa operando),
DEC (decrementa operando), MUL (multiplicao de dois operandos) DIV (diviso de dois
operandos) e DA (ajuste decimal).

3.1.1

ADD A, operando

Funo: Operao de adio.


Descrio: Esta instruo executa a operao de adio entre o byte indicado pela instruo e o
contedo do Acumulador, armazenando o resultado no Acumulador. O carry flag e o carry flag
auxiliar, respectivamente, so alterados se existir o carry out do nibble mais significativo e do nibble
menos significativo. O OV indica a ocorrncia de overflow no byte.
Modos de Endereamento: Registrador, endereo direto, endereo indireto e dado imediato.
Fluxo:
1. Busca operando;
2. Executa a soma e coloca o resultado no Acumulador;
3. Afeta carry flag, carry flag auxiliar e OV.

Diagrama de Execuo da Instruo ADD A, operando.

Variaes:
ADD A, Rn
Bytes: 1
Executar Instruo

ADD A, direto
Bytes: 2

ADD A, @Ri
Bytes: 1
fenix_especificao_8051_CPU.d
oc

Pg 27/97

Fnix Project

Microcontrolador 8051 - CPU

Ciclos: 1
Opcode:
->x2F)

Ciclos: 1
00101rrr

(x28

Ciclos: 1

Opcode: 00100101 (x25)


Operao: (A) (A) + (direto)

Operao: (A) (A) + (Rn)

Opcode: 0010011i (x26 ->


x27)
Operao: (A) (A) + ((Ri))

ADD A, #dado
Bytes: 2
Ciclos: 1
Opcode: 00100100 (x24)
Operao: (A) (A) + #dado

3.1.2

ADDC A, operando

Funo: Operao de adio com carry flag.


Descrio: Adiciona simultaneamente o operando indicado atravs da instruo, o carry flag e o
contedo do Acumulador, armazenando o resultado no Acumulador. O carry flag e o carry flag
auxiliar, respectivamente, so alterados se existirem o carry-out do nibble mais significativo e do
nibble menos significativo. O OV indica a ocorrncia de overflow do byte.
Modos de Endereamento: Registrador, endereo direto, endereo indireto e dado imediato.
Fluxo:
1. Busca operando;
2. Executa a soma e coloca o resultado no Acumulador;
3. Afeta carry flag, carry flag auxiliar e OV.

Diagrama de Execuo da Instruo ADDC A, operando.

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 28/97

Fnix Project

Microcontrolador 8051 - CPU

Variaes:
ADDC A, Rn

ADDC A, direto

ADDC A, @Ri

Bytes: 1

Bytes: 2

Bytes: 1

Ciclos: 1

Ciclos: 1

Ciclos: 1

Opcode: 00111rrr (x38 ->


x3F)

Opcode: 00110101 (x35)

Operao: (A) (A) + (C) +


Operao: (A) (A) + (Rn) (direto)
+ (C)

Opcode: 0011011i (x36 ->


x37)
Operao: (A) (A) + (C) +
((Ri))

ADDC A, #dado
Bytes: 2
Ciclos: 1
Opcode: 00110100 (x34)
Operao: (A) (A) + (C) +
#dado

3.1.3

SUBB A, operando

Funo: Operao de subtrao com carry-flag.


Descrio: Subtrai do contedo do Acumulador, o operando indicado pela instruo e o carry flag,
armazenando o resultado no Acumulador. O carry e o carry flag auxiliar, respectivamente, so
alterados se existirem um borrow do nibble mais significativo e do nibble menos significativo. O OV
indica a ocorrncia de borrow no byte.
Modos de Endereamento: Registrador, endereo direto, endereo indireto e dado imediato.
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 29/97

Fnix Project

Microcontrolador 8051 - CPU

Fluxo:
1. Busca operando;
2. Executa a subtrao e coloca o resultado no Acumulador;
3. Afeta carry flag, carry flag auxiliar e OV.

Diagrama de Execuo da Instruo SUBB A, operando.

Variaes:
SUBB A, Rn

SUBB A, direto

SUBB A, @Ri

Bytes: 1

Bytes: 1

Bytes: 1

Ciclos: 1

Ciclos: 1

Ciclos: 1

Opcode: 01001rrr (x98 ->


x9F)

Opcode: 10010101 (x95)

Operao: (A) (A) (C)


Operao: (A) (A) - (C) - (direto)
(Rn

Opcode:
x97)

1001011i

Operao: (A) (A) - (C) ((Ri))

SUBB A, #dado
Bytes: 1

Executar Instruo

(x96->

fenix_especificao_8051_CPU.d
oc

Pg 30/97

Fnix Project

Microcontrolador 8051 - CPU

Ciclos: 1
Opcode: 10010100 (x94)
Operao: (A) (A) (Rn)

3.1.4

INC operando

Funo: Operao de incremento.


Descrio: Esta instruo incrementa o valor da varivel indicada de uma unidade. Um valor original
de 0FFH aps o incremento, ter overflow e ser 00H. Nenhum flag ser alterado. No caso do DPTR,
que possui 16 bits, o overflow no byte menos significativo incrementar o byte mais significativo e um
overflow no byte mais significativo zera o DPTR. Nenhum flag afetado.
Modo de Eendereamento: Registrador, endereo direto, endereo indireto e acumulador.
Obs.: Quando a instruo utilizada para modificar porta de sada, o valor usado como dado original
da porta ser lido do latch de sada e no dos pinos de entrada.
Fluxo:
1. Busca operando;
2. Incrementa operando e coloca o resultado no operando;
3. No afeta nenhuma flag.
Diagrama de Execuo da Instruo INC operando.

Variaes:
INC A

INC Rn

INC direto

Bytes: 1

Bytes: 1

Bytes: 2

Ciclos: 1

Ciclos: 1

Ciclos: 1

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 31/97

Fnix Project

Microcontrolador 8051 - CPU

Opcode: 00000100 (x04)


Operao: (A) (A) + 1

Opcode: 00001rrr (x08 ->


x0F)
Operao: (Rn) (Rn) + 1

INC @Ri

Operao: (direto) (direto)


+1

INC DPTR

Bytes: 1

Bytes: 1

Ciclos: 1

Ciclos: 2

Opcode: 0000011i (x06 ->


x07)
Operao: (Ri) (Ri) + 1

3.1.5

Opcode: 00000101 (x05)

Opcode: 10100011(xA3)
Operao: (DPTR) (DPTR) +
1

DEC operando

Funo: Operao de decremento.


Descrio: Esta instruo decrementa o valor da varivel indicada de uma unidade. Um valor original
00H ir para 0FFH, aps o decremento. Nenhum flag ser alterado.
Modo de Endereamento: Registrador, endereo direto, endereo indireto e acumulador.
Obs.: Quando a instruo utilizada para modificar porta de sada, o valor usado como dado original
da porta ser lido do latch de sada e no dos pinos de entrada.
Fluxo:
1. Busca operando;
2. Decrementa operando e coloca o resultado no operando;
3. No afeta nenhum flag.
Diagrama de Execuo da Instruo DEC operando.

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 32/97

Fnix Project

Microcontrolador 8051 - CPU

Variaes:
SUBB A, Rn

SUBB A, direto

SUBB A, @Ri

Bytes: 1

Bytes: 1

Bytes: 1

Ciclos: 1

Ciclos: 1

Ciclos: 1

Opcode: 01001rrr (x98 ->


x9F)

Opcode: 10010101 (x95)

Operao: (A) (A) (C)


Operao: (A) (A) - (C) - (direto)
(Rn

Opcode:
x97)

1001011i

(x96->

Operao: (A) (A) - (C) ((Ri))

SUBB A, #dado
Bytes: 1
Ciclos: 1
Opcode: 10010100 (x94)
Operao: (A) (A) (Rn)

3.1.6

MUL AB

Funo: Multiplicao.
Descrio: Esta instruo executa a operao de multiplicao dos valores dos inteiros sem sinal
armazenados no Acumulador e registrador B. O byte menos significativo do produto de 16 bits ser
armazenado no acumulador e o byte mais significativo do produto ser armazenado no registrador B.
Se o produto for maior que 255 (0FFH) o OV ser alterado. O carry-flag ser sempre zero.
Modo de Endereamento: Nenhum.
Fluxo:
1. Multiplica A por B e coloca o byte menos significativo do produto em A e o mais
significativo em B.

Diagrama de Execuo da Instruo MUL AB

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 33/97

Fnix Project

Microcontrolador 8051 - CPU

Variaes:
MUL AB
Bytes: 1
Ciclos: 4
Opcode: 10100100 (xA4)
Operao: (A)7-0 (A) x (B)
(B)15-8

3.1.7

DIV AB

Funo: Diviso.
Descrio: Esta instruo executa a operao de diviso do inteiro sem sinal de 8 bits armazenado no
Acumulador pelo inteiro sem sinal de 8 bits armazenado no registrador B. O acumulador recebe a
parte inteira do quociente e o registrador B recebe o inteiro que representa o resto. Os flags carry e OV
devem ser modificados para zero.
Exceo: Se o registrador B contm 00H, os valores retornados para o acumulador e para o registrador
B sero indefinidos e o flag Overflow ser modificado. O carry flag ser igual a zero em qualquer dos
casos.
Modo de Endereamento: Nenhum.
Fluxo:
1. Divide A por B e coloca o quociente em A e o resto em B.

Diagrama de Execuo da Instruo DIV AB.

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 34/97

Microcontrolador 8051 - CPU

Fnix Project

Variaes:
DIV AB
Bytes: 1
Ciclos: 4
Opcode: 10000100 (x84)
Operao: (A)15-8 (A)/(B)
(B)7-0

3.1.8

DA A

Funo: Ajuste decimal do Acumulador.


Descrio: Esta instruo ajusta o valor de 8 bits do acumulador, resultado de uma adio anterior
entre duas variveis (um pacote do formato BCD) produzindo dois grupos de dgitos de 4 bits. Para
executar a adio, ADD e ADDC devem ser usadas.
Se os quatro bits menos significativos (0-3) do acumulador tiverem um valor maior que nove, ou se
AC igual a 1 (um), seis ser adicionado ao acumulador, produzindo um dgito BCD no nibble menos
significativo. Essa adio interna pode alterar o carry-flag se o carry-out dos quatro bits menos
significativos se propagarem aos quatro bits mais significativos, caso isso no ocorra o carry-flag no
ser modificado para zero.
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 35/97

Fnix Project

Microcontrolador 8051 - CPU

Se o carry-flag est alterado, ou se os quatro bits mais significativos excedem o nmero nove, esses
quatro bits mais significativos sero incrementados de seis, produzindo um dgito BCD no nibble mais
significativo. O carry flag poder ser alterado se houver carry out da soma com os bits mais
significativos, caso contrrio o carry no dever ser modificado para 1 (um). O carry flag indicar se a
soma das variveis BCD maior que 100. OV no ser alterado.
Essa instruo executa a converso decimal pela adio de 00H, 06H, 60H ou 66H ao contedo do
acumulador, dependendo das condies iniciais do acumulador e do PSW.
Modo de Endereamento: Nenhum.
Fluxo:
1. Se o nibble menos significativo for maior que nove ou o carry flag auxiliar for 1, ento
some 6 ao nibble menos significativo e coloca o resultado neste nibble;
2. Se o nibble mais significativo for maior que nove ou o carry flag for 1, ento some 6 ao
nibble mais significativo e coloca o resultado neste nibble;
3. Afeta o carry flag.

Diagrama de Execuo da Instruo DA A.

Variaes:
DA A
Bytes: 1

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 36/97

Fnix Project

Microcontrolador 8051 - CPU

Ciclos: 1
Opcode: 11010100 (xD4)
Operao: IF[[(A3-0) > 9] [(AC) =
1]]
THEN(A3-0) (A3-0) +
6
AND
IF[[(A7-4) > 9] [C = 1]]
THEN(A7-4) (A7-4) +
6

3.2

Instrues Lgicas

Neste grupo esto as instrues de ANL (e lgico entre dois operandos), ORL (ou lgico de dois
operandos), XRL (ou exclusivo de dois operandos), CLR (limpa Acumulador), CPL (complemento
lgico do acumulador), RL (rotao para a esquerda), RLC (rotao para a esquerda com carry flag),
RR (rotao para a direita), RRC (rotao para a direita com carry flag) e SWAP (troca os nibbles do
acumulador).

3.2.1

ANL A, operando

Funo: Operao Lgica AND


Descrio: Esta instruo executa a operao E lgico (AND) entre o Acumulador e o operando,
armazenando o resultado no Acumulador. Nesta instruo nenhum flag alterado.
Modo de Endereamento: Registrador, endereo direto, endereo indireto e dado imediato.

Fluxo:
1. Busca operando;
2. Executa o e lgico e coloca o resultado no Acumulador;
3. No afeta nenhum flag.

Diagrama de Execuo da Instruo ANL A, operando.

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 37/97

Fnix Project

Microcontrolador 8051 - CPU

Variaes:
ANL A, Rn

ANL A, Direto

ANL A, @Ri

Bytes: 1

Bytes: 2

Bytes: 1

Ciclos: 1

Ciclos: 1

Ciclos: 1

Opcode: 01011rrr (x58 -> 5F)


Operao: (A) (A)(Rn)

Opcode: 01010101 (x55)


Operao: (A) (A)(direto)

Opcode: 0101011i (x56 ->


57)
Operao:
(A)(indireto)

(A)

ANL A, #dado
Bytes: 2
Ciclos: 1
Opcode: 01010100 (x54)
Operao: (A) (A) (#dado)

3.2.2

ANL direto, operando

Funo: Operao Lgica AND


Descrio: Esta instruo executa a operao E lgico (AND) entre o endereo direto passado na
instruo e o operando, armazenando o resultado no endereo passado. Nesta instruo nenhum flag
alterado.
Obs.: Quando esta instruo usada para modificar uma porta de sada, o valor usado como origem
deve ser lido do latch e no dos pinos de entrada.
Modo de Endereamento: Acumulador e dado imediato.
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 38/97

Fnix Project

Microcontrolador 8051 - CPU

Fluxo:
1. Busca operando;
2. Executa e lgico e coloca o resultado no endereo direto;
3. No afeta nenhum flag.

Diagrama de Execuo da Instruo ANL direto, operando.

Variaes:
ANL direto, A

ANL direto, #dado

Bytes: 2

Bytes: 3

Ciclos: 1

Ciclos: 2

Opcode: 01010010 (x52)

Opcode: 01010011 (x53)

Operao:(direto) (direto) Operao:


(A)
(#dado)

3.2.3

(direto)

(direto)

ORL A, operando

Funo: Operao Lgica OR


Descrio: Esta instruo executa a operao OU lgico (OR) entre o Acumulador e o operando,
armazenando o resultado Acumulador. Nesta instruo nenhum flag alterado.
Modo de Endereamento: Registrador, endereo direto, endereo indireto e dado imediato.
Fluxo:
1. Busca operando;
2. Executa o ou lgico e coloca o resultado no Acumulador;
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 39/97

Fnix Project

Microcontrolador 8051 - CPU

3. No afeta nenhum flag.

Diagrama de Execuo da Instruo ORL A, operando.

Variaes:
ORL A, Rn

ORL A, direto

ORL A, @Ri

Bytes: 1

Bytes: 2

Bytes: 1

Ciclos: 1

Ciclos: 1

Ciclos: 1

Opcode: 01001rrr (x48 ->


x4F)
Operao: (A) (A)(Rn)

Opcode: 01000101 (x45)


Operao: (A) (A)(direto)

Opcode: 0100011i (x46 ->


x47)
Operao:
(A)(indireto)

(A)

ORL A, #dado
Bytes: 2
Ciclos: 1
Opcode: 01000100 (x44)
Operao: (A) (A) (#dado)

3.2.4

ORL direto, operando

Funo: Operao Lgica OR


Descrio: Esta instruo executa a operao OU lgico (OR) entre o endereo direto passado na
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 40/97

Fnix Project

Microcontrolador 8051 - CPU

instruo e o operando, armazenando o resultado no endereo passado. Nesta instruo nenhum flag
alterado.
Obs.: Quando esta instruo usada para modificar uma porta de sada, o valor usado como origem
deve ser lido do latch e no dos pinos de entrada.
Modo de Endereamento: Acumulador e dado imediato.
Fluxo:
1. Busca operando;
2. Executa ou lgico e coloca o resultado no endereo direto;
3. No afeta nenhum flag.

Diagrama de Execuo da Instruo ORL direto, operando.

Variaes:
ORL direto, A

ORL direto, #dado

Bytes: 2

Bytes: 3

Ciclos: 1

Ciclos: 2

Opcode: 01000010 (x42)

Opcode: 01000011 (x43)

Operao:(direto)(direto) Operao:(direto)(direto)
(A)
(#dado)

3.2.5

XRL A, operando

Funo: Operao Lgica XOR


Descrio: Esta instruo executa a operao OU_EXCLUSIVO (XOR) entre o Acumulador e o
operando, armazenando o resultado no Acumulador. Nesta instruo nenhum flag alterado.
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 41/97

Fnix Project

Microcontrolador 8051 - CPU

Modo de Endereamento: Registrador, endereo direto, endereo indireto e dado imediato.


Fluxo:
1. Busca operando;
2. Executa o ou exclusivo lgico e coloca o resultado no Acumulador;
3. No afeta nenhum flag.

Diagrama de Execuo da Instruo XRL A, operando.

Variaes:
XRL A, Rn

XRL A, Direto

XRL A, @Ri

Bytes: 1

Bytes: 2

Bytes: 1

Ciclos: 1

Ciclos: 1

Ciclos: 1

Opcode: 01101rrr (x68 -> 6F)


Operao: (A) (A)(Rn)

Opcode: 01100101 (x65)


Operao: (A) (A)(direto)

Opcode: 0110011i (x66 ->


x67)
Operao:
(indireto)

(A)

(A)

XRL A, #dado
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 42/97

Fnix Project

Microcontrolador 8051 - CPU

Bytes: 2
Ciclos: 1
Opcode: 01100100 (x64)
Operao: (A) (A) (#dado)

3.2.6

XRL direto, operando

Funo: Operao Lgica XOR


Descrio: Esta instruo executa a operao OU_EXCLUSIVO (XOR) entre o endereo passado
na instruo e o operando, armazenando o resultado no endereo passado. Nesta instruo nenhum
flag alterado.
Obs.: Quando esta instruo usada para modificar uma porta de sada, o valor usado como
origem deve ser lido do latch e no dos pinos de entrada.
Modo de Endereamento: Acumulador e dado imediato.
Fluxo:
1. Busca operando;
2. Executa ou exclusivo lgico e coloca o resultado no endereo direto;
3. No afeta nenhum flag.

Diagrama de Execuo da Instruo XRL direto, operando.

Variaes:
XRL direto, A

XRL direto, #dado

Bytes: 2

Bytes: 3

Ciclos: 1

Ciclos: 2

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 43/97

Fnix Project

Microcontrolador 8051 - CPU

Opcode: 01100010 (x62)

Opcode: 01100011 (x63)

Operao:
(direto)(direto)(A)

3.2.7

Operao: (direto)(direto)
(#dado)

CLR A

Funo: Limpa Acumulador.


Descrio: O Acumulador limpo, todos os bits so setados para zero. Nenhum flag afetado.
Modo de Endereamento: Nenhum.
Fluxo:
1. Zera os bits do Acumulador;
2. No afeta nenhum flag.
Diagrama de Execuo da Instruo CRL A.

Variaes:
CRL A
Bytes: 1
Ciclos: 1
Opcode: 11100100 (xE4)
Operao: (A) 0

3.2.8

CPL A

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 44/97

Fnix Project

Microcontrolador 8051 - CPU

Funo: Complemento do Acumulador


Descrio: A cada bit do Acumulador aplicado o complemento lgico. Bits que contm o valor zero
so setados para um e bits que contm o valor um so setados para zero. Nenhum flag afetado.
Modo de Endereamento: Nenhum.
Fluxo:
1. Complemento lgico de cada bit do Acumulador;
2. No afeta nenhum flag.
Diagrama de Execuo da Instruo CPL A.

Variaes:
CPL A
Bytes: 1
Ciclos: 1
Opcode: 11110100 (xF4)
Operao: (A) (A)

3.2.9

RL A

Funo: Rotao a Esquerda


Descrio: Os oito bits do Acumulador so rotacionados uma posio para a esquerda. O bit 7
rotacionado para a posio 0. Nenhum flag afetado.
Modo de Endereamento: Nenhum.
Fluxo:
1. Rotaciona os bits do Acumulador e coloca o resultado no Acumulador;
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 45/97

Fnix Project

Microcontrolador 8051 - CPU

2. No afeta nenhum flag.


Diagrama de Execuo da Instruo RL A.

Variaes:
RL A
Bytes: 1
Ciclos: 1
Opcode: 00100011 (x23)
Operao: (An+1) (An),
n = 0 6,
(A0) (A7)

3.2.10 RLC A

Funo: Rotao a Esquerda com o Carry Flag


Descrio: Os oito bits do Acumulador e o carry flag so rotacionados juntos uma posio para a
esquerda. O bit 7 movido para o carry flag e o valor original do carry flag movido para posio 0
do Acumulador. Nenhum outro flag afetado.
Modo de Endereamento: Nenhum.
Fluxo:
1. Rotaciona os bits do Acumulador e coloca o resultado no Acumulador;
2. Afeta carry flag.
Diagrama de Execuo da Instruo RLC A.
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 46/97

Fnix Project

Microcontrolador 8051 - CPU

Variaes:
RLC A
Bytes: 1
Ciclos: 1
Opcode: 00110011 (x33)
Operao: (An+1) (An),
n = 0 6,
(A0) C,
C (A7)

3.2.11 RR A

Funo: Rotao a Direita


Descrio: Os oito bits do Acumulador so rotacionados uma posio para a direita. O bit 0
rotacionado para a posio 7. Nenhum flag afetado.
Modo de Endereamento: Nenhum.
Fluxo:
1. Rotaciona os bits do Acumulador e coloca o resultado no Acumulador;
2. No afeta nenhum flag.

Diagrama de Execuo da Instruo RR A.

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 47/97

Fnix Project

Microcontrolador 8051 - CPU

Variaes:
RL A
Bytes: 1
Ciclos: 1
Opcode: 00000011 (x3)
Operao: (An) (An+1),
n = 0 6,
(A7) (A0)

3.2.12 RRC A

Funo: Rotao a Direita com o Carry Flag


Descrio: Os oito bits do Acumulador e o carry flag so rotacionados juntos uma posio para a
direita. O bit 0 movido para o carry flag e o valor original do carry flag movido para posio 7 do
Acumulador. Nenhum outro flag afetado.
Modo de Endereamento: Nenhum.
Fluxo:
1. Rotaciona os bits do Acumulador e coloca o resultado no Acumulador;
2. Afeta carry flag.

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 48/97

Fnix Project

Microcontrolador 8051 - CPU

Diagrama de Execuo da Instruo RRC A.

Variaes:
RLC A
Bytes: 1
Ciclos: 1
Opcode: 00010011 (x13)
Operao: (An) (An+1),
n = 0 6,
(A7) C,
C (A0)

3.2.13 SWAP A

Funo: Troca os nibbles dentro do Acumulador


Descrio: Esta instruo troca os bits de 3-0 com os bits de 7-4 do Acumulador. Esta operao
tambm pode ser feita executando quatro rotaes seguidas Nenhum outro flag afetado.
Modo de Endereamento: Nenhum.
Fluxo:
1. Troca os nibbles do Acumulador e coloca o resultado no Acumulador.
2. No afeta nenhum flag.

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 49/97

Fnix Project

Microcontrolador 8051 - CPU

Diagrama de Execuo da Instruo SWAP A.

Variaes:
SWAP A
Bytes: 1
Ciclos: 1
Opcode: 11000100 (xC4)
Operao: (A3-0) (A7-4) e
(A7-4) (A3-0)

3.3

Instrues de transferncia de dados

As instrues de transferncia de dados so aquelas relacionadas a movimentao e copia de dados


entre a memria, registrador, acumulador. Essas instrues so descritas abaixo:

3.3.1

MOV A, operando

Funo: copia o dado do operando para o acumulador.

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 50/97

Fnix Project

Microcontrolador 8051 - CPU

Modos de Endereamento: registrador, endereamento direto, endereamento indireto, dado


imediato.
Fluxo:
1. Busca de operando;
2. Cpia o dado do operando para o acumulador, sem alterar o dado original;
3. No afeta nenhuma flag.

Diagrama de Execuo da Instruo MOV A, operando.

B usca de
O perando

Initial

C opia dado do
operando para o
A cum ulador

E1

t1

E2

t1

Final1

Variaes:
MOV A, Rn

MOV A, @Ri

MOV A, #dado

Bytes: 1

Bytes: 1

Bytes: 2

Ciclos: 1

Ciclos: 1

Ciclos: 1

Opcode: 11101rrr (xE8 ->


xEF)
Operao: (A) (Rn)

Opcode: 1110011i (xE6 ->


xE7)
Operao: (A) (Ri)

Opcode:01110100
(x74)
Operao: (A) #dado

MOV A, direto
Bytes: 2
Ciclos: 1
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 51/97

Fnix Project

Microcontrolador 8051 - CPU

Opcode: 11100101 (xE5)


Operao: (A) (direto)

3.3.2

MOV Rn, operando

Funo: copia o dado do operando para o registrador indicado.


Modos de Endereamento: acumulador, endereamento direto, dado imediato.
Fluxo:
1. Busca de operando;
2. Cpia o dado do operando para o registrador indicado, sem alterar o dado original;
3. No afeta nenhuma flag.

Diagrama de Execuo da Instruo MOV Rn, operando.

B usca de
O perando

Initial

C opia dado do
operando para o
R egistrador

E1

t1

E2

t1

Final1

Variaes:
MOV Rn, A

MOV Rn, direto

MOV Rn, #dado

Byte: 1

Bytes: 2

Byte: 1

Ciclo: 1

Ciclos: 2

Ciclo: 1

Opcode: 11111rrr (xF8 ->


xFF)
Operao: (A) (Rn)
Executar Instruo

Opcode: 10101rrr (A8 ->


AF)
Operao: (Rn) (direto)

Opcode: 1110011i (x78 ->


x7F)
Operao: (Rn) #dado

fenix_especificao_8051_CPU.d
oc

Pg 52/97

Fnix Project

Microcontrolador 8051 - CPU

3.3.3

MOV direto, operando

Funo: copia o dado do operando para o endereo de memria indicado.


Modos de Endereamento: acumulador, endereamento direto, endereamento indireto,
imediato, registrador.

dado

Fluxo:
1. Busca de operando;
2. Copia o dado do operando para o endereo de memria indicado, sem alterar o dado
original;
3. No afeta nenhuma flag.

Diagrama de Execuo da Instruo MOV direto, operando

B usca de
O perando

Initial

C opia dado do
operando para o
E ndereo de m em ria
especificado

E1

t1

E2

t1

Final1

Variaes:
MOV direto, A

MOV direto, Rn

MOV direto, direto

Bytes: 2

Bytes: 2

Bytes: 3

Ciclos: 1

Ciclos: 2

Ciclos: 2

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 53/97

Fnix Project

Microcontrolador 8051 - CPU

Opcode: 11110101 (xF5)


Operao: (direto) (A)

Opcode:10001rrr (x88 ->


x8F)

Opcode: 10000101 (x85)


Operao: (direto) (direto)

Operao: (direto) (Rn)

MOV direto, @Ri

MOV direto, #dado

Bytes: 2

Bytes: 3

Ciclos: 2

Ciclos: 2

Opcode: 1000011i (x86 ->


x87)

Opcode: 01110101 (x75)


Operao: (direto) #dado

Operao: (direto) ((Ri))

3.3.4

MOV @Ri, operando

Funo: copia o dado do operando para o endereo de memria indicado pelo registrador.
Modos de Endereamento: acumulador, endereamento direto, dado imediato.
Fluxo:
1. Busca de operando;
2. Copia o dado do operando para o endereo de memria indicado pelo registrador, sem
alterar o dado original;
3. No afeta nenhuma flag.

Diagrama de Execuo da Instruo MOV @Ri, operando

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 54/97

Fnix Project

Microcontrolador 8051 - CPU

B usca de
O perando

C opia dado do
operando para o
E ndereo de m em ria
especificado pelo
registrador

E1

Initial

E2

t1

t1

Final1

Variaes:
MOV @Ri, A

MOV @Ri, direto

MOV @Ri, #dado

Bytes: 1

Bytes: 2

Bytes: 2

Ciclos: 1

Ciclos: 2

Ciclos: 1

Opcode:1111011i (xF6 ->


xF7)
Operao: ((Ri)) (A)

3.3.5

Opcode: 1010011i (xA6


-> xA7)
Operao: ((Ri)) (direto)

Opcode: 0111011i (x76 ->


x77)
Operao: ((Ri)) (dado)

MOV DPTR, #dado16

Funo: copia o dado do operando para o DPTR.


Modos de Endereamento: dado imediato.
Fluxo:
1. Busca de operando;
2. Copia o dado do operando para o endereo de memria indicado pelo registrador, sem
alterar o dado original;
3. No afeta nenhuma flag.

Diagrama de Execuo da Instruo MOV DPTR, #dado16

B usca de
O perando

Initial

Executar Instruo

E1

C opia dado im ediato


para o D P T R

t1

E2

t1

Final1

fenix_especificao_8051_CPU.d
oc

Pg 55/97

Fnix Project

Microcontrolador 8051 - CPU

Variao:
MOV DPTR, #dado16
Bytes: 3
Ciclos: 2
Opcode: 10010000 (x90)
Operao: (DPTR) (#dado(15-0))
DPH
0)

3.3.6

DPL #dado(15-8)

#dado(7-

MOVC A, @A+operando

Funo: Move dado da memria de cdigo para o Acumulador usando um operando.


Operandos: PC, DPTR.
Fluxo:
1. Busca do operando;
2. Se o operando em questo for o PC, este deve ser incrementado antes de efetuar a
soma entre o mesmo e o Acumulador;
3. Executa a soma entre o operando e o Acumulador, esse resultado ser o endereo do
byte procurado (Na adio com 16 bits, o carry out da soma entre 8 bits menos
significativos do operando e o Acumulador ser adicionado aos 8 bits mais
significativos);
4. O valor do operando no modificado;
5. Busca o dado na memria;
6. Copia o dado no acumulador;
7. No afeta nenhuma flag.

Diagrama de Execuo da Instruo MOVC A, @A+operando

Busca de
O perando

Initial

Executar Instruo

E1

Som a o
operando com o
Acum ulador

t1

E2

Busca do byte
code,ou
contante da
m em ria

t1

E3

C opia o dado n
o acum ulador

t1

E4

t1

Final1

fenix_especificao_8051_CPU.d
oc

Pg 56/97

Fnix Project

Microcontrolador 8051 - CPU

Variaes:
MOVC A, @A + DPTR

MOVC A, @A + PC

Bytes: 1

Bytes: 1

Ciclos: 2

Ciclos: 2

Opcode: 10010011 (x93)


Operao:
(DPTR))

3.3.7

(A)

((A)

Opcode: 10000011 (x83)


+ Operao: (PC) (PC) + 1
(A) ((A) + (PC))

MOVX A, @operando

Funo: copia dado da RAM externa para o acumulador.


Modo de Endereamento: endereamento indireto, podendo ser os operandos de 8bits (Ri) ou 16bits
(DPTR).
Fluxo:
1. Busca do operando;
2. Copia dado do endereo de memria da RAM externa no Acumulador;
3. Nenhuma flag alterada.

Diagrama de Execuo da Instruo MOVX A, @operando

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 57/97

Fnix Project

Microcontrolador 8051 - CPU

B usca de
O perando

C opia dado do
endereo da R A M
externa fornecido pel
o operando no
A cum ulador

E1

Initial

E2

t1

t1

Final1

Variaes:
MOVX A, @Ri

MOVX A, @DPTR

Bytes: 1

Bytes: 1

Ciclos: 2

Ciclos: 2

Opcode: 1110001i (xE2 ->


xE3)

Opcode: 11100000 (xE0)


Operao: (A) (DPTR)

Operao: (A) ((Ri))

3.3.8

MOVX @operando, A

Funo: copia dado do acumulador para RAM externa.


Modo de Endereamento: endereamento indireto, podendo ser os operandos de 8bits (Ri) ou 16bits
(DPTR).
Fluxo:
1. Busca do operando;
2. Copia dado do Acumulador em um endereo de memria da RAM externa;
3. Nenhuma flag alterada.
Diagrama de Execuo da Instruo MOVX @operando, A

B usca de
O perando

Initial

Executar Instruo

E1

C opia dado do
A cum uladorem um
endereo da R A M
externa

t1

E2

t1

Final1

fenix_especificao_8051_CPU.d
oc

Pg 58/97

Fnix Project

Microcontrolador 8051 - CPU

Variaes:
MOVX @Ri, A

MOVX @DPTR, A

Bytes: 1

Bytes: 1

Ciclos: 2

Ciclos: 2

Opcode: 1111001i (xF2 ->


xF3)

Opcode: 11110000 (xF0)


Operao: (DPTR) (A)

Operao: ((Ri)) (A)

3.3.9

PUSH operando

Funo: armazena dado na pilha.


Endereamento: endereamento direto.
Fluxo:
1. Incrementa de 1 o Stack Pointer;
2. O dado indicado pelo operando armazenado no endereo da memria RAM interna,
especificado pelo Stack Pointer;
3. Nenhuma flag afetada.

C opia o dado do
operando para o
endereo da R A M
interna indicado
pelo S tack P ointer

Increm enta em 1
o S tack P ointer

Initial

E1

t1

E2

t1

Final1

Diagrama de Execuo da Instruo PUSH operando

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 59/97

Fnix Project

Microcontrolador 8051 - CPU

Variao:
PUSH direto
Bytes: 2
Ciclos: 2
Opcode: 11000000 (xC0)
Operao: (SP) (SP) + 1
((SP)) (direto)

3.3.10 POP operando

Funo: retira dado da pilha.


Endereamento: endereamento direto.
Fluxo:
1. Copia o dado armazenado no endereo indicado pelo Stack Pointer no endereo da
memria RAM interna indicado pelo operando;
2. Decrementa de 1 o Stack Pointer;
3. Nenhuma flag afetada.

Diagrama de Execuo da Instruo POP operando.

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 60/97

Fnix Project

Microcontrolador 8051 - CPU

C opia dado indicado


pelo S tack P ointer no
endereo indicado pelo
operando

Initial

E1

D ecrem enta m e
1 o S tack

t1

E2

t1

Final1

Variao:
POP direto
Bytes: 2
Ciclos: 2
Opcode:10001rrr (xD0)
Operao: (direto) (SP)
(SP) (SP) - 1

3.3.11 XCH A, operando

Funo: troca de dados entre o acumulador e o operando.


Endereamento: registrador, direto, indireto.
Fluxo:
1. Busca operando;
2. Copia o dado do operando no acumulador, e copia o dado do acumulador no endereo
do operando;
3. No modifica nenhuma flag.

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 61/97

Fnix Project

Microcontrolador 8051 - CPU

Diagrama de Execuo da Instruo XCH A, operando

C opia o dado do
acum uladorno endereo
do operando e o dado do
operando no acum ulador

B usca de
O perando

Initial

S1

t1

S2

t1

Final1

Variaes:
XCH A, Rn

XCH A, direto

XCH A, @Ri

Bytes: 1

Bytes: 2

Bytes: 1

Ciclos: 1

Ciclos: 1

Ciclos: 1

Opcode: 11001rrr (xC8 ->


xCF)

Opcode: 11000101 (xC5)


Operao: (A) (direto)

Operao: (A) (Rn)

Opcode: 1100011i (xC6


-> xC7)
Operao: (A) (Ri)

3.3.12 XCHD A, operando

Funo: Troca nibbles inferiores do acumulador com o operando.


Endereamento: endereamento indireto.
Fluxo:
1. Busca operando;
2. Troca nibbles menos significativos do operando e do acumulador;
3. Nenhuma flag modificada, nem os nibbles mais significativos do acumulador e do
operando.

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 62/97

Fnix Project

Microcontrolador 8051 - CPU

Diagrama de Execuo da Instruo XCHD A, operando

B usca de
O perando

Initial

S1

T roca os nibbles m enos


significativos do acum ulado
re do operando.

t1

S2

t1

Final1

Variaes:
XCHD A, @Ri
Bytes: 1
Ciclos: 1
Opcode: 1101011i (xD6 -> xD7)
Operao: (A(3-0)) (Ri(3-0))

3.4

Instrues de manipulao de bit.

Neste grupo esto as instrues CLR (Reseta bit) e CPL (Complementa bit), SETB (Seta bit),
ANL(AND lgico de bit), ORL(OR lgico de bit), MOV(Move bit Estas foram agrupadas, pois todas
manipulam bit. A seguir sero detalhados seus comportamentos e variaes.

3.4.1

CLR operando

Funo: Limpar um bit


Descrio: O bit indicado resetado (setado para 0). CLR pode operar no carry flag ou em qualquer
bit diretamente enderevel.
Obs: Quando essa instruo for usada para modificar uma porta de sada, o valor original da porta ser
lido a partir do latch de sada e no dos pinos de entrada.
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 63/97

Fnix Project

Microcontrolador 8051 - CPU

Modos de Endereamento Endereo direto de bit.


Fluxo:
1. Busca de operando;
2. O operando endereado setado para 0;
3. No afeta nenhum flag exceto o carry flag;

Diagrama de Execuo da Instruo CLR operando

Variaes:
CLR C

CLR bit

Bytes: 1

Bytes: 2

Ciclos: 1

Ciclos: 1

Opcode : 11000011

Opcode : 11000010 [endereo do bit]


Operao: (bit) 0

Operao: (C) 0

3.4.2

SETB operando

Funo: Setar bit


Descrio: SETB seta o bit indicado para 1 (um). SETB pode operar no carry flag ou em qualquer
outro bit diretamente enderevel
Modos de Endereamento: Endereo direto de bit.
Fluxo:
1. Busca de operando;
2. O operando endereado setado para um;
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 64/97

Fnix Project

Microcontrolador 8051 - CPU

3. No afeta nenhum flag, exceto o carry flag;

Diagrama de Execuo da Instruo SETB operando

Variaes:
SETB C
Bytes: 1
Ciclos: 1
Opcode : 11010011
Operao: (C) 1

3.4.3

CPL operando

Funo: Complementar bit


Descrio: O bit varivel especificado complementado. O bit o qual era um modificado para 0 e
vice-versa. CPL pode operar em qualquer bit diretamente enderevel e no carry.
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 65/97

Fnix Project

Microcontrolador 8051 - CPU

Obs: Quando essa instruo for usada para modificar uma porta de sada, o valor original da porta ser
lido a partir do latch de sada e no dos pinos de entrada.
Modos de Endereamento: Endereamento direto de bit.
Fluxo:
1. Busca de operando;
2. O operando endereado setado para o valor complementar;
3. No afeta nenhum flag alm do carry flag;

Diagrama de Execuo da Instruo CPL operando

Variaes:
CPL C

CPL bit

Bytes: 1

Bytes: 2

Ciclos: 1

Ciclos: 1

Opcode : 10110011

Opcode : 10110011 [endereo do bit]

Operao: (C) (C)

Operao: (bit) (bit)

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 66/97

Fnix Project

Microcontrolador 8051 - CPU

3.4.4

ANL C, operando

Funo: e- lgico entre variveis de bit


Descrio: Seta para 0 o carry flag se ao avaliar a instruo o valor lgico for 0; caso o valor
encontrado no seja 0, o valor do carry no modificado. Uma barra invertida (/) precedendo o
operando na linguagem assembly indica que o complemento lgico do bit endereado usado como
operando, mas o valor original do bit no afetado.
Modos de Endereamento: Endereamento direto de bit.
Fluxo:
1. Busca de operando;
2. O operao de e lgico entre o operando e o carry flag;
3. No afeta nenhum flag, exceto o carry flag;

Diagrama de Execuo da Instruo ANL C, operando

Variaes:
ANL C,bit

ANL C,/bit

Bytes: 2

Bytes: 2

Ciclos: 2

Ciclos: 2

Opcode : 10000010 [endereo do bit]

Opcode : 10110000[endereo do bit]

Operao: (C) (C) ^ (bit)

Operao: (C) (C) ^ ( (bit))

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 67/97

Fnix Project

Microcontrolador 8051 - CPU

3.4.5

ORL C, operando

Funo: ou-lgico entre variveis de bit


Descrio: Seta para 1 o carry flag se ao avaliar a instruo o valor lgico encontrado for 1; caso o
valor encontrado no seja 1, o valor do carry no modificado. Uma barra invertida (/) precedendo
o operando na linguagem assembly indica que o complemento lgico do bit endereado usado como
operando, mas o valor original do bit no afetado.
Modos de Endereamento: Endereamento direto de bit.
Fluxo:
1. Busca de operando;
2. A operao de ou lgico entre o operando e o carry flag;
3. No afeta nenhum flag, exceto o carry flag;

Diagrama de Execuo da Instruo ORL C, operando.

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 68/97

Fnix Project

Microcontrolador 8051 - CPU

Variaes:
ORL C,bit

ORL C,/bit

Bytes: 2

Bytes: 2

Ciclos: 2

Ciclos: 2

Opcode : 01110010 [endereo do bit]

Opcode : 10100000[endereo do bit]

Operao: (C) (C) v (bit)

Operao: (C) (C) v ( (bit))

3.4.6

MOV C, bit

Funo: Move dado de um bit para outro


Descrio: O booleano indicado pelo segundo operando copiado no local especificado pelo primeiro
operando. O operando destino o carry flag; o outro pode ser qualquer bit diretamente enderevel.
Nenhum outro registrador afetado.
Modos de Endereamento: Endereamento direto de bit.
Fluxo:
1. Busca de operando;
2. Operao de transferncia de dado do operando para o carry flag;
3. No afeta nenhum flag, exceto o carry flag;

Diagrama de Execuo da Instruo MOV C, bit.

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 69/97

Fnix Project

Microcontrolador 8051 - CPU

Variaes:
MOV C,bit
Bytes: 2
Ciclos: 1
Opcode : 10100010 [endereo do
bit] Operao: (C) (bit)

3.4.7

MOV bit, C

Funo: Move dado de um bit para outro


Descrio: O booleano indicado pelo segundo operando copiado no local especificado pelo primeiro
operando. O operando destino pode ser qualquer bit diretamente enderevel; O operando de origem
o carry flag. Nenhum outro registrador afetado.
Modos de Endereamento: Endereamento direto de bit.
Fluxo:
1. Busca de operando;
2. Operao de transferncia de dado do carry flag para o operando;
3. No afeta nenhum flag, exceto o carry flag;

Diagrama de Execuo da Instruo MOV bit, C.

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 70/97

Microcontrolador 8051 - CPU

Fnix Project

Variaes:
MOV bit,C
Bytes: 2
Ciclos: 1
Opcode : 10010010 [endereo do
bit] Operao: (bit) (C)

3.5

Instrues de desvio

Neste grupo esto as instrues JC, JNC, JB, JNB, JBC, ACALL, LCALL, RET, RETI, JMP, LJMP,
SJMP, JMP, JZ, JNZ, CJNE, DJNZ, NOP, que so instrues que executam desvio. A seguir sero
detalhados seus comportamentos e variaes.

3.5.1

JC rel

Funo: Desvia se o carry estiver setado.


Descrio: Se o carry flag estiver setado (igual a 1), desvia para o endereo indicado; do contrrio
procede com a prxima instruo. O destino do desvio calculado adicionando o valor do segundo
byte da instruo, levando-se em conta o sinal, ao PC, depois de ter incrementado o PC ao ponto dele
estar apontando para o primeiro byte da prxima instruo.
Modos de Endereamento: Endereamento relativo.
Fluxo:
1. Busca de operando;
2. Desvia para o endereo relativo caso a condio de desvio seja satisfeita;
3. No afeta nenhum flag;
Fluxo secundrio:

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 71/97

Fnix Project

Microcontrolador 8051 - CPU

1. No item 2 do fluxo principal, se a condio de desvio no for satisfeita, segue a busca


da prxima instruo;
Diagrama de Execuo da Instruo JC

Variaes:
JC
Bytes: 2
Ciclos: 2
Opcode:
relativo]

01000000

[endereo

Operao: (PC) (PC) + 2


IF(C) = 1
THEN
(PC) (PC) + rel

3.5.2

JNC rel

Funo: Desvia se o carry no estiver setado.


Descrio: Se o carry flag esta zerado, desvia para o endereo indicado; do contrrio continua com a
prxima instruo. O destino do desvio calculado adicionando o valor do segundo byte da instruo,
levando-se em conta o sinal, ao PC, depois de ter incrementado o PC ao ponto dele estar apontando
para o primeiro byte da prxima instruo. O carry flag no modificado.
Modos de Endereamento: Endereamento relativo.
Fluxo:
1. Busca de operando;
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 72/97

Fnix Project

Microcontrolador 8051 - CPU

2. Desvia para o endereo relativo caso a condio de desvio seja satisfeita;


3. No afeta nenhum flag;
Fluxo secundrio:
1. No item 2 do fluxo principal, se a condio de desvio no for satisfeita, segue a busca
da prxima instruo;

Diagrama de Execuo da Instruo JNC rel.

Variaes:
JNC
Bytes: 2
Ciclos: 2
Opcode: 01010000 [endereo relativo]
Operao: (PC) (PC) + 2
IF(C) = 0
THEN
(PC) (PC) + rel

3.5.3

JB bit, rel

Funo: Desvia se o bit estiver setado


Descrio: Se o bit indicado for 1, desvia para o endereo indicado; do contrrio procede para a
prxima instruo. O bit testado no ser modificado. O destino do desvio calculado adicionando o
valor do terceiro byte da instruo, levando-se em conta o sinal, ao PC, depois de ter incrementado o
PC ao ponto dele estar apontando para o primeiro byte da prxima instruo.
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 73/97

Fnix Project

Microcontrolador 8051 - CPU

Modos de Endereamento: Endereamento relativo e endereamento direto de bit.


Fluxo:
1. Busca de operando;
2. Desvia para o endereo relativo caso a condio de desvio seja satisfeita;
3. No afeta nenhum flag;
Fluxo secundrio:
1. No item 2 do fluxo principal, se a condio de desvio no for satisfeita, segue a busca
da prxima instruo;
Diagrama de Execuo da Instruo JB bit, rel

Variaes:
JB bit, rel
Bytes: 3
Ciclos: 2
Opcode: 00100000
[endereo relativo]

[endereo

do

bit]

Operao: (PC) (PC) + 3


IF(bit) = 1
THEN
(PC) (PC) + rel

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 74/97

Fnix Project

Microcontrolador 8051 - CPU

3.5.4

JNB bit, rel

Funo: Desvia se o bit no estiver setado


Descrio: Se o bit indicado for 0, desvia para o endereo indicado; do contrrio procede para a
prxima instruo. O bit testado no ser modificado. O destino do desvio calculado adicionando o
valor do terceiro byte da instruo, levando-se em conta o sinal, ao PC, depois de ter incrementado o
PC ao ponto dele estar apontando para o primeiro byte da prxima instruo. Nenhuma flag afetada.
Modos de Endereamento: Endereamento relativo e endereamento direto de bit.
Fluxo:
1. Busca de operando;
2. Desvia para o endereo relativo caso a condio de desvio seja satisfeita;
3. No afeta nenhum flag;
Fluxo secundrio:
1. No item 2 do fluxo principal, se a condio de desvio no for satisfeita, segue a busca
da prxima instruo;
Diagrama de Execuo da Instruo JNB bit, rel

Variaes:
JNB <bit>,rel
Bytes: 3
Ciclos: 2
Opcode: 00110000 [endereo do bit] [endereo
relativo]
Operao: (PC) (PC) + 3
IF(bit) = 0
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 75/97

Fnix Project

Microcontrolador 8051 - CPU

THEN
(PC) (PC) + rel

3.5.5

JBC bit,rel

Funo: Desvia se o bit estiver setado e reseta o bit


Descrio: Se o bit indicado for 1, desvia para o endereo indicado; do contrrio procede para a
prxima instruo. O bit no ser zerado se j for 0. O destino do desvio calculado adicionando o
valor do terceiro byte da instruo, levando-se em conta o sinal, ao PC, depois de ter incrementado o
PC ao ponto dele estar apontando para o primeiro byte da prxima instruo.
Modos de Endereamento: Endereamento relativo e endereamento direto de bit.
Fluxo:
1. Busca de operando;
2. Desvia para o endereo relativo caso a condio de desvio seja satisfeita e reseta o bit
verificado como condio de desvio;
3. No afeta nenhum flag;
Fluxo secundrio:
1. No item 2 do fluxo principal, se a condio de desvio no for satisfeita, segue a busca
da prxima instruo;
Diagrama de Execuo da Instruo JBC bit, rel

Variaes:
JBC <bit>,rel
Bytes: 3
Ciclos: 2
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 76/97

Fnix Project

Microcontrolador 8051 - CPU

Opcode: 00010000
[endereo relativo]

[endereo

do

bit]

Operao: (PC) (PC) + 3


IF(bit) = 1
THEN
(bit) 0
(PC) (PC) + rel

3.5.6

ACALL addr11

Funo: Chamada absoluta de sub-rotina


Descrio: ACALL incondicionalmente chama uma sub-rotina localizada no endereo indicado. A
instruo incrementa PC duas vezes para obter o endereo da prxima instruo, depois guarda os 16bits na pilha (byte menos significativo primeiro) e incrementa o Stack Pointer duas vezes. O endereo
de destino obtido sucessivamente pela concatenao dos 5 bits mais significativos do PC
incrementado, opcode bit 7-5, e o segundo byte da instruo. A sub-rotina deve comear no mesmo
bloco de 2K do espao de cdigo que sucede ACALL.
Modos de Endereamento: Endereo calculado na execuo da instruo.
Fluxo:
1. Busca de operando;
2. Sub-rotina chamada incondicionalmente;
3. No afeta nenhum flag;

Diagrama de Execuo da Instruo ACALL addr11

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 77/97

Fnix Project

Microcontrolador 8051 - CPU

Variaes:
ACALL addr11
Bytes: 2
Ciclos: 2
Opcode: a10 a9 a8 10001 a7 a6 a5 a4 a3 a2 a1 a0
Operao: (PC) (PC) + 2
(SP) (SP) + 1
(SP) (PC7-0)
(SP) (SP) + 1
(SP) (PC15-8)
(PC10-0) endereo da pgina

3.5.7

LCALL addr16

Funo: Longa Chamada de sub-rotina


Descrio: LCALL chama uma sub-rotina localizada no endereo indicado. A instruo adiciona 3 ao
PC para gerar o endereo da prxima instruo e depois guarda os 16 bits resultantes na pilha (byte
menos significativo primeiro), incrementando o Stack Pointer duas vezes. O byte mais significativo e
o menos significativo do PC so, depois, carregados respectivamente, com o segundo e terceiro bytes
da instruo LCALL. A execuo do programa continua com a instruo nesse endereo. A sub-rotina
pode comear em qualquer lugar dentro dos 64k-byte da memria de programa.
Modos de Endereamento: Endereo calculado na execuo da instruo.
Fluxo:
1. Busca de operando;
2. Sub-rotina chamada incondicionalmente;
3. No afeta nenhum flag;

Diagrama de Execuo da Instruo LCALL addr16

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 78/97

Fnix Project

Microcontrolador 8051 - CPU

Variaes:
LCALL addr16
Bytes: 3
Ciclos: 2
Opcode: 00010010 [addr15-addr8] [addr7-addr0]
Operao: (PC) (PC) + 3
(SP) (SP) + 1
(SP) (PC7-0)
(SP) (SP) + 1
(SP) (PC15-8)
(PC) addr15-0

3.5.8

RET

Funo: Retorno de sub-rotina


Descrio: Ret recupera o byte mais significativo e o menos significativo do PC, nessa ordem, os
quais estavam armazenados na pilha e decrementa o Stack Pointer duas vezes. A execuo do
programa continua no endereo resultante, geralmente esse endereo se refere a instruo
imediatamente depois de um ACALL ou LCALL.
Modos de Endereamento: Endereo calculado na execuo da instruo.
Fluxo:
1. Busca de operando;
2. Calculo do endereo de retorno e armazenamento em PC;
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 79/97

Fnix Project

Microcontrolador 8051 - CPU

3. No afeta nenhum flag;

Diagrama de Execuo da Instruo RET

Variaes:
RET
Bytes: 1
Ciclos: 2
Opcode: 00100010
Operao: (PC15-8) ((SP))
(SP) (SP) 1
(PC7-0) ((SP))
(SP) (SP) 1

3.5.9

RETI

Funo: Retorno de interrupo


Descrio: Ret recupera o byte mais significativo e o menos significativo do PC, nessa ordem, os
quais estavam armazenados na pilha, e restabelece a recepo de interrupes de mesma prioridade da
interrupo que acabou de ser processada. Decrementa o Stack Pointer duas vezes. Nenhum outro
registrador afetado; o PSW no automaticamente restaurado para seu estado pr-interrupo. A
execuo do programa continua com o endereo resultante, o qual geralmente a instruo
imediatamente depois do ponto em que foi detectada a interrupo. Se uma instruo de menor ou de

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 80/97

Fnix Project

Microcontrolador 8051 - CPU

mesma prioridade foi requisitada quando a instruo RETI estava sendo executada, essas sero
executadas depois que a interrupo pendente for executada.
Modos de Endereamento: Endereo calculado na execuo da instruo.
Fluxo:
1. Busca de operando;
2. Calculo do endereo de retorno da interrupo e armazenamento em PC;
3. No afeta nenhum flag;

Diagrama de Execuo da Instruo RETI

Variaes:
RETI
Bytes: 1
Ciclos: 2
Opcode: 00110010
Operao: (PC15-8) ((SP))
(SP) (SP) 1
(PC7-0) ((SP))
(SP) (SP) 1

3.5.10 AJMP addr11

Funo: Desvio Absoluto


Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 81/97

Fnix Project

Microcontrolador 8051 - CPU

Descrio: AJMP transfere a execuo do programa para o endereo indicado, o qual formado em
tempo de execuo pela concatenao dos 5 bits mais significativos do PC (aps ele ter sido
incrementado duas vezes), opcode bits 7-5, e o segundo byte da instruo. O endereo de destino deve
ser dentro do mesmo 2K bloco de espao de memria de programa que o primeiro byte da instruo
que sucede AJMP.
Modos de Endereamento: Endereo calculado na execuo da instruo.
Fluxo:
1. Busca de operando;
2. Calculo do endereo de desvio e armazenamento em PC;
3. No afeta nenhum flag;
Diagrama de Execuo da Instruo AJMP addr11

Variaes:
AJMP addr11
Byte: 2
Ciclos: 2
Opcode: a10 a9 a8 00001 a7 a6 a5 a4 a3 a2 a1 a0
Operao: (PC) (PC) + 2
(PC10-0) endereo da pgina

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 82/97

Fnix Project

Microcontrolador 8051 - CPU

3.5.11 LJMP addr16

Funo: Desvio Longo


Descrio: LJMP causa um desvio incondicional para o endereo indicado, carregando o byte mais
significativo e o menos significativo do PC, respectivamente com o segundo e o terceiro bytes da
instruo. O destino pode ser em qualquer espao da memria de programa de 64K.
Modos de Endereamento: Endereo calculado na execuo da instruo.
Fluxo:
1. Busca de operando;
2. Calculo do endereo de desvio e armazenamento em PC;
3. No afeta nenhum flag;
Diagrama de Execuo da Instruo LJMP add16

Variaes:
LJMP add16
Bytes: 3
Ciclos: 2
Opcode: 00000010 [add15-addr8] [addr7-addr0]
Operao: (PC) addr15-0

3.5.12 SJMP rel

Funo: Desvio Curto


Descrio: O controle do programa desvia incondicionalmente para o endereo indicado. O destino do
desvio computado adicionando o valor do segundo byte da instruo (levando-se em conta o sinal)
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 83/97

Fnix Project

Microcontrolador 8051 - CPU

ao PC j incrementado duas vezes. O alcance de desvio permitido de 128 bytes precedendo essa
instruo e 127 bytes sucedendo.
Modos de Endereamento: Endereo calculado na execuo da instruo.
Fluxo:
1. Busca de operando;
2. Calculo do endereo de desvio e armazenamento em PC;
3. No afeta nenhum flag;

Diagrama de Execuo da Instruo SJMP rel

Variaes:
SJMP rel
Bytes : 2
Ciclos: 2
Opcode: 10000000 [endereo relativo]
Operao: (PC) (PC) + 2
(PC) (PC) + rel

3.5.13 JMP @A+DPTR

Funo: Desvio indireto


Descrio: Adiciona os 8 bits contidos no acumulador (sem levar em conta sinal) aos 16 bits do data
pointer, e carrega o resultado da adio no PC. Este vai ser o endereo da prxima instruo a ser lida
da memria. Adio de 16 bits realizada (modulo 216): um carry-out do byte menos significativo
propagado para o mais significativo. Nem o acumulador nem o data pointer so alterados.
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 84/97

Fnix Project

Microcontrolador 8051 - CPU

Modos de Endereamento: Endereamento indireto.


Fluxo:
1. Busca de operando;
2. Calcula o endereo de desvio e armazena em PC;
3. No afeta nenhum flag;

Diagrama de Execuo da Instruo JMP @DPTR + A

Variaes:
JMP @A+DPTR
Bytes: 1
Ciclos: 2
Opcode: 01110011
Operao: (PC) (A) + (DPTR)

3.5.14 JZ rel

Funo: Desvia se o Acumulador for Zero


Descrio: Se todos os bits do acumulador forem zero, desvia para o endereo indicado; do contrrio
procede com a prxima instruo. O destino do desvio computado pela adio do segundo byte da
instruo (levando-se em conta o sinal) ao PC j incrementado duas vezes. O acumulador no
modificado.
Modos de Endereamento: Endereamento relativo.
Fluxo:
1. Busca de operando;
2. Desvia para o endereo relativo caso a condio de desvio seja satisfeita;
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 85/97

Fnix Project

Microcontrolador 8051 - CPU

3. No afeta nenhum flag;

Fluxo secundrio:
1. No item 2 do fluxo principal, se a condio de desvio no for satisfeita, segue a busca
da prxima instruo;

Diagrama de Execuo da Instruo JZ rel

Variaes:
JZ
Bytes: 2
Ciclos: 2
Opcode: 01100000 [endereo relativo]
Operao: (PC) (PC) + 2
IF A = 0
THEN (PC) (PC) + rel

3.5.15 JNZ rel

Funo: Desvia se o Acumulador no for Zero


Descrio: Se algum dos bits do acumulador no for zero, desvia para o endereo indicado; do
contrrio procede com a prxima instruo. O destino do desvio computado pela adio do segundo
byte da instruo (levando-se em conta o sinal) ao PC j incrementado duas vezes. O acumulador no
modificado.
Modos de Endereamento: Endereamento relativo e endereamento direto de bit.
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 86/97

Fnix Project

Microcontrolador 8051 - CPU

Fluxo:
1. Busca de operando;
2. Desvia para o endereo relativo caso a condio de desvio seja satisfeita;
3. No afeta nenhum flag;
Fluxo secundrio:
1. No item 2 do fluxo principal, se a condio de desvio no for satisfeita, segue a busca
da prxima instruo;
Diagrama de Execuo da Instruo JNZ rel

Variaes:
JNZ
Bytes: 2
Ciclos: 2
Opcode: 01110000 [endereo relativo]
Operao: (PC) (PC) + 2
IF A != 0
THEN (PC) (PC) + rel

3.5.16 CJNE A, operando, rel

Funo: Compara e Desvia se No for Igual


Descrio: CJNE compara a magnitude dos dois primeiros operandos, e desvia se o valor deles no
for igual. O desvio computado pela adio do terceiro byte da instruo (levando-se em conta o
sinal) ao PC j incrementado duas vezes. O carry flag setado se o valor do inteiro sem sinal do
acumulador for menor que o valor inteiro do operando; do contrrio, o carry resetado. Nenhum
operando afetado.
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 87/97

Fnix Project

Microcontrolador 8051 - CPU

Modos de Endereamento: Endereamento relativo e endereamento direto.


Fluxo:
1. Busca de operando;
2. Compara e desvia para o endereo calculado se os operandos forem diferentes;
3. No afeta nenhum outro flag alm do carry flag, caso o contedo de A seja menor que
o valor do operando, desconsiderando o sinal;
Fluxo secundrio:
1. No item 2 do fluxo principal, se a condio de desvio no for satisfeita, segue a busca
da prxima instruo;

Diagrama de Execuo da Instruo CJNE A, operando, rel.

Variaes:
CJNE A,direto,rel

CJNE A,#dado,rel

Bytes: 3

Bytes: 3

Ciclos: 2

Ciclos: 2

Opcode: 10110101 [endereo direto] [rel. offset]

Opcode: 10110100 [dado imediato] [rel. offset]

Operao: (PC) (PC) + 3

Operao: (PC) (PC) + 3

IF(A) != (direto)

IF(A) != dado

THEN

THEN

(PC) (PC) + relative offset

(PC) (PC) + relative offset

IF(A) < (direto)

IF(A) < dado

THEN

THEN

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 88/97

Fnix Project

Microcontrolador 8051 - CPU

(C) 1

(C) 1

ELSE

ELSE

(C) 0

(C) 0

3.5.17 CJNE Rn, dado, rel

Funo: Compara e Desvia se No for Igual


Descrio: CJNE compara a magnitude dos dois primeiros operandos, e desvia se o valor deles no
for igual. O desvio computado pela adio do terceiro byte da instruo (levando-se em conta o
sinal) ao PC j incrementado duas vezes. O carry flag setado se o valor do inteiro sem sinal do
acumulador for menor que o valor inteiro do operando; do contrrio, o carry resetado. Nenhum
operando afetado.
Modos de Endereamento: Endereamento relativo, dado direto e registrador.

Fluxo:
1. Busca de operando;
2. Compara operandos.
3. Desvia para o endereo calculado se os operandos forem diferentes;
4. No afeta nenhum outro flag alm do carry flag, caso o contedo de Rn seja menor
que o valor do operando, desconsiderando o sinal;
Fluxo secundrio:
1. No item 2 do fluxo principal, se a condio de desvio no for satisfeita, segue a busca
da prxima instruo;

Diagrama de Execuo da Instruo CJNE Rn, dado, rel.

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 89/97

Fnix Project

Microcontrolador 8051 - CPU

Variaes:
CJNE Rn, dado, rel
Bytes: 3
Ciclos: 2
Opcode: 10111rrr [dado imediato] [rel. offset]
Operao: (PC) (PC) + 3
IF(Rn) != dado
THEN
(PC) (PC) + relative offset
IF (Rn) < dado
THEN
(C) 1
ELSE
(C) 0

3.5.18 CJNE @Ri, dado, rel

Funo: Compara e Desvia se No for Igual


Descrio: CJNE compara a magnitude dos dois primeiros operandos, e desvia se o valor deles no
for igual. O desvio computado pela adio do terceiro byte da instruo (levando-se em conta o
sinal) ao PC j incrementado duas vezes. O carry flag setado se o valor do inteiro sem sinal do
acumulador for menor que o valor inteiro do operando; do contrrio, o carry resetado. Nenhum
operando afetado.
Modos de Endereamento: Endereamento relativo e endereamento indireto.
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 90/97

Fnix Project

Microcontrolador 8051 - CPU

Fluxo:
1. Busca de operando;
2. Compara operandos.
3. Desvia para o endereo calculado se os operandos forem diferentes;
4. No afeta nenhum outro flag alm do carry flag, caso o contedo de @Ri seja menor
que o valor do operando, desconsiderando o sinal;
Fluxo secundrio:
1. No item 2 do fluxo principal, se a condio de desvio no for satisfeita, segue a busca
da prxima instruo;

Diagrama de Execuo da Instruo CJNE @Ri, dado, rel.

Variaes:

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 91/97

Fnix Project

Microcontrolador 8051 - CPU

CJNE @Ri, dado, rel


Bytes: 3
Ciclos: 2
Opcode: 1011011i [dado imediato] [rel. offset]
Operao: (PC) (PC) + 3
IF(A) != dado
THEN
(PC) (PC) + relative offset
IF(@Ri) < dado
THEN
(C) 1
ELSE
(C) 0

3.5.19 DNJZ Rn, rel

Funo: Decrementa e salta se o valor no for igual a zero.


Descrio: A instruo decrementa o primeiro operando recebido e depois salta para o endereo
especificado pelo segundo operando se o valor do primeiro operando aps decrementado no for zero.
Em caso do valor especificado pelo segundo operando ser 00H, o valor aps decrementado ser FFH.
O destino do salto ser computado adicionando o valor do ltimo byte (levando-se em considerao o
sinal) da instruo ao PC j incrementado, ou seja, o PC j estar apontando para o primeiro byte da
prxima instruo.
Nota: Quando essa instruo for usada para modificar uma porta de sada, o valor original da porta
ser lido a partir do latch de sada e no dos pinos de entrada.
Modos de Endereamento: Endereamento relativo e registrador.
Fluxo:
1. Busca de operando;
2. Decrementa o operando e o compara com zero.
3. Desvia para o endereo calculado se o operando for diferente de zero;
4. No afeta nenhum outro flag;
Fluxo secundrio:

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 92/97

Fnix Project

Microcontrolador 8051 - CPU

1. No item 2 do fluxo principal, se a condio de desvio no for satisfeita, segue a busca


da prxima instruo;

Diagrama de Execuo da Instruo DNJZ Rn, rel.

Variaes:
DNJZ Rn, rel
Bytes: 2
Ciclos: 2
Opcode : 11011rrr [endereo relativo]
Operao: (PC) (PC) + 2
(Rn) (Rn) 1
IF(Rn) > 0 or (Rn) < 0
THEN
(PC) (PC) + rel

3.5.20 DNJZ direto, rel

Funo: Decrementa e salta se o valor no for igual a zero.


Descrio: A instruo decrementa o primeiro operando recebido e depois salta para o endereo
especificado pelo segundo operando se o valor do primeiro operando aps decrementado no for zero.
Em caso do valor especificado pelo segundo operando ser 00H, o valor aps decrementado ser FFH.
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 93/97

Fnix Project

Microcontrolador 8051 - CPU

O destino do salto ser computado adicionando o valor do ltimo byte (levando-se em considerao o
sinal) da instruo ao PC j incrementado, ou seja, o PC j estar apontando para o primeiro byte da
prxima instruo.
Nota: Quando essa instruo for usada para modificar uma porta de sada, o valor original da porta
ser lido a partir do latch de sada e no dos pinos de entrada.
Modos de Endereamento: Endereamento relativo e endereamento direto.

Fluxo:
1. Busca de operando;
2. Decrementa o operando e o compara com zero.
3. Desvia para o endereo calculado se o operando for diferente de zero;
4. No afeta nenhum outro flag;
Fluxo secundrio:
1. No item 2 do fluxo principal, se a condio de desvio no for satisfeita, segue a busca
da prxima instruo;

Diagrama de Execuo da Instruo DNJZ direto, rel.

Variaes:
DNJZ direto, rel
Bytes: 3
Ciclos: 2
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 94/97

Fnix Project

Microcontrolador 8051 - CPU

Opcode : 11010101 [dado imediato] [endereo


relativo]
Operao: (PC) (PC) + 2
(direto) (direto) 1
IF(direto) > 0 or (direto) < 0
THEN
(PC) (PC) + rel

3.5.21 NOP

Funo: Nenhuma Operao


Descrio: Execuo continua na prxima instruo. Nada mais afetado alm do PC, nenhuma flag
ou registrador.
Fluxo:
1. Incrementa o PC;
2. No afeta nenhum outro flag.

Diagrama de Execuo da Instruo NOP

N o Faz nada

Initial

S1

t1

Final1

Variaes:
NOP
Bytes: 1
Ciclos: 1
Opcode: 00000000
Operao: (PC) (PC) + 1
Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 95/97

Fnix Project

Microcontrolador 8051 - CPU

4. Referncias
[1] Documento de Requisitos; BrazilIP_Requisitos_8051.doc.
[2] Modelo de Casos de Uso; <Excutar_Instruo.rtmdl>;
[3] 80C51 family programmers guide and instruction set, Philips Semicondutores.

Executar Instruo

fenix_especificao_8051_CPU.d
oc

Pg 96/97

Microcontrolador 8051 - CPU

Executar Instruo

Fnix Project

fenix_especificao_8051_CPU.d
oc

Pg 97/97

Você também pode gostar