Anda di halaman 1dari 84

MICROPROCESSADORES

MICROCONTROLADOR:
um circuito eletrnico que tem em um nico chip, uma Unidade Central de Processamento ou
CPU, elementos tais como memrias ROM e RAM, temporizadores, contadores, canais de
comunicao e conversores A/D e D/A. um componente eletrnico dedicado a certas tarefas
especficas.
MICROPROCESSADOR:
um circuito igual ao microcontrolador, porem utiliza vrios componentes externos para realizar
as suas funes. Devido utilizao destes perifricos, o microprocessador realiza mais tarefas
que o microcontrolador.
A figura 1 mostra o diagrama em blocos simplificado de um sistema microprocessado, onde pode
ser analisado seu princpio de funcionamento.
Barramento de dados

Power on
reset

Interrupes

Micro
processador

Memria
ROM
de programa

Memria
RAM
de dados

Barramento
de endereos e controle
Clock

Alimentao

Circuito de seleo

Portas
de entrada
e sada

Figura 1: diagrama em blocos de um sistema simplificado, microprocessado.


A descrio das partes que constituem este diagrama a seguinte:
MICROPROCESSADOR:
o componente que possui diversos circuitos internos que faz o controle de todas as operaes do
sistema e execuo de instrues do programa gravado na memria de dados. Estas instrues
podem ser relativas a operaes lgicas, aritmticas, de acesso s portas de entrada e sada e acesso
memria de dados ou programa do usurio.
Tem-se a, o crebro do sistema. Nele esta localizada a CPU, ou seja, Central Processing Unit ou
Unidade Central de Processamento.
MEMRIA DE PROGRAMA:
uma memria no voltil que armazena o programa a ser executado pelo microprocessador,
tais como programa monitor e sub rotinas.

Osmar

MEMRIA DE DADOS:
uma memria voltil que armazena os dados a serem processados, provenientes do programa do
usurio.
CIRCUITO DE CLOCK ou RELGIO:
responsvel pelo fornecimento de um sinal de onda quadrada que habilita as portas lgicas que
compem os circuitos do microprocessador e faz com que seus circuitos internos funcionem.
POWER ON RESET:
responsvel pela gerao de um sinal chamado reset que faz com que o microprocessador ao ser
energizado comece a funcionar sempre em uma condio pr estabelecida. Isto necessrio para se
ter uma organizao interna do microprocessador, pois se assim no o fosse o microprocessador
funcionaria aleatoriamente sem executar uma tarefa.
CIRCUITO DE SELEO:
responsvel pelo fornecimento dos sinais de seleo e habilitao da memria de dados,
memria de programa, das portas de entrada e sada, sempre em conformidade com as instrues
que esto sendo executadas pela CPU.
BARRAMENTO DE DADOS:
Representam as linhas que interligam a CPU s portas de entrada e sada, e s memrias. Este
conjunto de linhas bidirecional, e a CPU as utiliza para leitura ou escrita em dispositivos de
entrada e sada ou memrias.
BARRAMENTO DE ENDEREO:
Representam as linhas que interligam a CPU s memrias e ao circuito de seleo. Este conjunto
de linhas unidirecional. a CPU que fornece os endereos em resposta as instrues recebidos.
BARRAMENTO DE CONTROLE:
Representam as linhas que interligam a CPU s memrias, perifricos e ao circuito de seleo. A
CPU sempre fornece sinais de controle, em resposta s instrues recebidas.

PRINCPIO DE FUNCIONAMENTO DE UM MICROPROCESSADOR:


Para um microprocessador funcionar, ele executa 3 tarefas, indefinidamente:

Osmar

1- BUSCA A INSTRUO:
O contedo do PC colocado no barramento de endereo.
O microprocessador fornece um sinal chamado de leitura de memria que permitir a busca do
contedo deste endereo.
O microprocessador espera o dado vindo da memria e armazena-o em um registro interno,
chamado de registro de instruo.
O contedo do PC incrementado, ou seja, aponta para a prxima instruo.
2- DECODIFICA A INSTRUO:
Uma vez que o contedo do programa constitudo de escrita em cdigo binrio, o registro de
instruo fornece este sinal a um dos diversos circuitos internos do microprocessador para
que uma tarefa seja executada. No interior do microprocessador devem existir circuitos
lgicos tantos quantos for seu nmero de instrues.
3- EXECUTA A INSTRUO:
O circuito acionado na sada do decodificador de instruo executa a instruo.
O microprocessador no sair mais deste ciclo at o fim da execuo de um programa:
BUSCA A INSTRUO.
DECODIFICA A INSTRUO.
EXECUTA A INSTRUO.
PROGRAMA:
Sequncia de instrues que permite realizar uma determinada tarefa.
A velocidade de operao do microprocessador depende da freqncia do pulso de clock. Quanto
maior esta for, mais veloz ele ser. Porem toda estrutura ou hardware associada ao
microprocessador deve ter um desenvolvimento tecnolgico e ser compatvel com o equipamento
para conseguir responder maior freqncia do pulso de clock sem causar danos ao programa que
est sendo executado.
A figura 2 mostra a pinagem e a figura 3 o diagrama interno simplificado do microprocessador
80C51.
PORTAS DE ENTRADA/SAIDA:
Porta o conjunto de pontos que podem funcionar como meio de entrada ou sada de dados para o
microprocessador. Cada porta constituda de 8 pontos, cada ponto chamado de pino.
P0-0 a P0-7; P1-0 a P1-7; P2-0 a P2-7 e P3-0 a P3-7; so portas de 8 bits, bidirecionais, que
pem ser programadas como entrada ou sada.

Osmar

P0-0 a P0-7: estes pontos sendo programados com nvel lgico 1, fazem os pinos funcionarem com
entradas de alta impedncia. Alem disto esta porta tem a funo alternativa de multiplexar dados
com o byte inferior de endereos durante o acesso memria externa de dados ou programa.
P1-0 a P1-7: porta com resistor pull-up interno. A programao com nvel lgico 1 faz a porta
funcionar como entrada. Quando levados a 0, pelo dispositivo externo o pino fornecer corrente
atravs dos resistores pull-up.
Resistor pull-up: resistor ligado a +Vcc de um lado e quando o outro lado aterrado, promove
uma circulao de corrente para o circuito a ele ligado. Pull-up: puxa para cima.
P2-0 a P2-7: igual a P1-0 a P1-7.
Alem disto, a porta 2 tem a funo alternativa de fornecer o byte superior de endereos durante o
acesso memria externa de dados ou programa.
P3-0 a P3-7: igual a P2-0 a P2-7 e P1-0 a P1-7
Alem disto, os pinos desta porta podem ter as funes ilustradas na tabela 1:
RxD
TxD
INT0
INT1
T0
T1
Wr
Rd

P3.0
P3.1
P3.2
P3.3
P3.4
P3.5
P3.6
P3.7

Entrada de dados seriais na recepo serial.


Sada de dados seriais na transmisso serial.
Entrada de interrupo externa 0.
Entrada de interrupo externa 1.
Entrada de clock do temporizador/contador 0.
Entrada de clock do temporizador/contador 1.
Sada do sinal de escrita para a memria externa.
Sada do sinal de leitura para a memria externa.

Tabela 1: outras funes dos pinos P3-0 a P3-7.


PINAGEM DO MICROPROCESSADOR 8051:
A figura 2 mostra a pinagem do microprocessador 8051.
P1.0
P1.1
P1.2
P1.4
P1.4
P1.5
P1.6
P1.7
RST
RxD P3.0
____
TxD P3.1
INT0 P3.2
____
INT1 P3.3
T0 P3.4
___
T1 P3.5
Wr
___ P3.6
Rd P3.7
XTAL1
XTAL2
GND

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

AT 80C51

40
1
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
1

+Vcc
P0.0/AD0
P0.2/AD2
P0.1/AD1
P0.3/AD3
P0.4/AD7
P0.5/AD5
P0.6//AD6
P0.7/AD7
__
EA
ALE
_____
PSEN
P2.7/A15
P2.6/A14
P2.5/A13
P2.4/A12
P2.3/A11
P2.2/A10
P2.1/A9
P2.0/A8

Figura 2: pinagem do microprocessador 8051.

Osmar

RAM

RAM ADDRESS
REGISTER

P0-0 P0-7

P2-0 P2-7

PORT 0
DRIVERS

PORT 2
DRIVERS

PORT 0
LATCH

PORT 2
LATCH

STACK
POINTER

ACC
B
REGISTER

TMP1

TMP2

ULA

EPROM
ROM

PCON SCON TMOD TCON


T2CON TH0 TL0 TH1
TL1
SUBF
IE
IP
INTERRUP, SERIAL PORT,
TIMER BLOKS

PSW

PROGRAM
ADDRESS
REGISTER

BUFER

PC
INCREMENTER

PROGRAM
COUNTER
INSTRUTION
REGISTER

DPTR
PORT 1
LATCH

PORT 3
LATCH

PORT 1
DRIVERS
P1-0 P1-7

P3-0 P3-7

TIMING
AND
CONTROL

PORT 3
DRIVERS

PSEN
ALE
EA
RST

OSCILADOR

Figura 3: diagrama interno do microprocessador 80C51.

Osmar

ORGANIZAO DAS MEMRIAS:


MAPEAMENTO DE UMA MEMRIA:
o espao de endereo ocupado pela memria. a sua localizao por software.
MEMRIA DE PROGRAMA:
Esta pode ser constituda por uma parte interna de 4KB e outra externa de 60KB, ou somente uma
ROM externa de 64KB. B = Bytes. As figuras 4 e 5 mostram o mapeamento da memria de
programa nestes dois casos:
No microprocessador 8051 existem os pinos EA e PSEN que permitem selecionar estas opes.
EA:
External Acess ou Acesso Externo: um pino do microprocessdor que se estiver conectado ao
nvel baixo, todo endereamento de programa, de 0000 a FFFF ser buscado na memria ROM
externa.
PSEN:
Program Strobe Enable ou Inibio do Programa de Gravao de dados o sinal que habilita o
acesso memria de programa.
A lgica de operao dos pinos EA e PSEN a seguinte:
EA = 0 busca os dados somente na ROM externa, quando o pino PSEN estiver com nvel lgico 0.
EA = 1 busca os dados de 0000 a 0FFF na ROM interna e de 1000 a FFFF na ROM externa quando
o pino PSEN estiver em nvel lgico 0.
FFFF ou 65535
ROM
externa
60KB
1000 ou 4096
0FFF ou 4095

ROM
interna
4KB

_____
PSEN

__
EA

0000

Figura 4: Representao do mapeamento da memria de programa com uma parte interna ao


microprocessador e a outra externa.

Osmar

FFFF ou 65535

_____
PSEN

ROM
externa
64KB
__
EA
0000

Figura 5: Representao do mapeamento da memria de programa com configurao totalmente


externa.
MEMRIA DE DADOS:
A memria de dados do 8051 constituda de uma SRAM interna, com capacidade de 128B ou
256B, e uma SRAM externa de at 64KB, quando existente.
MEMRIA DE DADOS EXTERNA:
As figuras 6 e 7 mostram o mapeamento da memria de dados nestes dois casos:

FFFF ou 65535

__
Rd

RAM
Externa
64KB
___
Wr
0000

Figura 6: Representao da configurao externa do mapeamento da memria de dados.


Os sinais Rd e Wr so gerados pelo 8051 e colocados nos pinos P3-6 e P3-7, respectivamente,
para ler ou escrever na memria.
Os acessos SRAM interna ou externa so efetuados atravs de instrues. A diferena entre as
instrues distinguem estes dois tipos de acesso.

Osmar

MEMRIA DE DADOS INTERNA


O acesso a SRAM interna do 8051 pode ter diferentes caractersticas dependendo da regio desta
que est sendo acessada. Na regio da SRAM interna compreendida entre o endereo 000 e 127 ou
000 e FE, esto a rea dos registros de uso geral e pilha, enquanto a rea de 128 a 255 ou 80 e FF
esto localizados os registros de funes especiais.
FF ou 255
Registros
de
funes
especiais
128 bytes
80 ou 128
7F ou 127

Uso geral
e pilha
128 bytes

0000

Figura 7: Representao da configurao interna do mapeamento da memria de dados.


ACESSO MEMRIA EXTERNA:
Quando o sistema microcontrolado utilizar alguma memria externa as portas P0 e P2 interligam o
microprocessador s memrias RAM e ROM acordo com a figura 8.

P1

P1- 0 a P1 - 7

P3

P3- 0 a P3 - 7

P0

+5V

D/A

GND

11,0592
MHz

XTAL

A0 a A7

ROM
ALE

XTAL

33pF

A0 a A7

A0 a A7

LATCH

RST

33pF

D0 a D7

P2
_____
PSEN
___
RD
___
WE

RAM

LE
A

A8
___a A15
OE

A8 a A15
___
OE
___
WE

Figura 8: interligao do microprocessador s memrias ROM e RAM.

Osmar

A porta P0 ser usada como barramento de dados e endereos multiplexados, fornecendo a parte
baixa dos endereos da memria que se deseja acessar e servindo como ponto de entrada e sada dos
dados provenientes da memria RAM e como ponto de entrada dos dados provenientes da memria
ROM. Isto est representado na figura 8 como D para dados, Data; e A para endereo, Addres.
ALE:
A parte baixa do endereo fica armazenada em um latch externo chamado de Addres Latch
Enable, ALE ou latch inibidor de endereo. O microprocessador gera um sinal que permite a
escrita desta parte do endereo neste latch.
A porta P2 ser usada como barramento da parte alta do endereo e este permanecer neste
barramento durante a aquisio de dados. Na figura 8 isto est representado como P2 e A8 a A15.
REGISTROS DE USO GERAL ou REGISTRADORES DE USO GERAL e PILHA:
A rea interna da RAM utilizada pelo microprocessador divida em duas outras partes sendo uma
a de registros de uso geral e a outra a pilha. Os registros de uso geral so pequenos segmentos
desta memria, de oito bits cuja funo armazenar os dados que sero utilizados pelo programa.
A pilha tem a mesma finalidade, porem seu tamanho maior que a de um registro, pois nesta,
defini-se seu fundo e colocam-se dados em uma regio maior, em seqncia, como se estivessem
empilhados. A figura 9 representa os diversos tipos de registros existentes no 8051 e seus
respectivos endereos.
127 ou 7F

48 ou 30
47 ou 2F

Regio byte
enderevel
Regio Bit e
byte enderevel

32 ou 20
31 ou 1F

Banco 3
R0 a R7
24 ou 18
23 ou 17

16 ou 10
15 ou 0F

Banco 2
R0 a R7

RS1 RS0 Banco


0
0
0
0
1
1
1
0
2
1
1
3

b
Banco 1
R0 a R7

08 ou 08
07 ou 07

Banco 0
R0 a R7
00 ou 00

Figura 9: a- Registros de uso geral e pilha. b- Tabela de seleo do banco de registros.

Osmar

Cada um dos 4 bancos de registros representados na figura 8, denominados de R0 a R7 pode ser


selecionado preenchendo os bits RS0 a RS1 do registro PSW, conforme o ilustrado na figura 8b.
A outra faixa de endereos de 20 a 7F ou 32 a 127, se caracteriza por acesso via especificao do
endereo, ou seja, sem os registros R0 a R7, sendo que o endereo na RAM diretamente colocado
na instruo. A regio de endereos, de 20 a 2F ou 32 a 47, tem ainda a caracterstica especial de
possibilitar a formao do endereo desejado utilizando um bit qualquer dentro deste espao.

REGISTROS DE FUNES ESPECIAIS


Os endereos da RAM interna do 8051 na faixa de 128 a 255, acessam os registros de funes
especiais, que so utilizados para exercer certas funes dentro do 8051 tais como: manipular dados
das portas de entrada e sada, programar contadores/temporizadores, enviar e receber dados da
interface serial, fazer controle de interrupo, etc. A tabela 2 mostra os registros de funo especial
com seus respectivos endereos.
Endereo
F0
E0
D0
B8
B0
A8
A0
90
99
98
8D
8C
8B
8
89
88
87
83
82
81
80

Registro de funo especial


Registro B
Acumulador - Acc
Program Status Word - PSW
Interrupt Priority - IP
Porta 3 de E/S - P3
Interrupt Enable IE
Porta 2 de E/S - P2
Porta 1 de E/S - P1
Serial Buffer - SBUF
Serial Control - SCON
Timer High 1 - TH1
Timer High 0 - TH0
Timer Low 1 - TL1
Timer High 0 - TL0
Timer Mode - TMOD
Timer Control - TCON
Power Control - PCON
Data Pointer High - DPH
Data Pointer Low - DPL
Stack Pointer - SP
Porta 0 de E/S - P0

Tabela 2: Registros especiais e seus endereos.

Osmar

10

REGISTRO APONTADOR DE PILHA, SP:


um registro utilizado para guardar o endereo de memria da pilha onde ser armazenado o
prximo dado a ser colocado na pilha, ou seja, este registro aponta para a uma posio de memria
logo aps a ultima posio que possui um dado.
REGISTRADOR DE INSTRUES, IR:
Quando o microprocessador, ou a CPU, vai executar as instrues contidas na memria, este
transfere as instrues desta, para o registro de instruo, IR. O registro de instruo
automaticamente usado pelo microprocessador durante cada ciclo de instruo, portanto ele no
precisa ser considerado durante os passos da programao.
CONTADOR DE PROGRAMA, PC:
O contador de programa, PC, contem o endereo da memria da prxima instruo a ser
executado pela CPU. O microprocessador incrementa automaticamente o PC durante a execuo de
cada instruo, sendo que toda vez que necessrio mudar o endereo de execuo basta buscar o
que est contido no PC. Este um registro de 16 bits.
ACUMULADOR, A ou ACC:
um registro de uso geral, muito utilizado tanto pelo microprocessador em instrues aritmticas,
lgicas, acesso s portas de E/S, acesso a memria externa e controle de perifricos, quanto pelo
prprio usurio do microprocessador. A sua utilizao constante e sua importncia to grande
que ele recebeu o nome de acumulador. Ele; assim como os outros registros guardam dados
temporariamente.
REGISTRO DE ESTADO ou REGISTRO DE STATUS, PSW:
Este registro de 8 bits indica o status ou estado do processador, ou seja, indica a ocorrncia de
certas condies especiais associadas ao processamento. O formato do registro o apresentado na
figura 10.
CY AC F0 RS1 RS0 OV P
Figura 10: Representao do registro PSW.
CY: setado indica a ocorrncia de um carry, vai um.
AC: setado indica a ocorrncia de um carry auxiliar em operao BCD.
F0: bit disponvel para uso geral.
RS1: juntamente com RS0 permite codificar o banco de registros no qual os registros R0 a R7
sero alocados.
RS0: juntamente com RS1 permite codificar o banco de registros no qual os registros R0 a R7
sero alocados.
OV: setado indica a ocorrncia de um overflow em operaes com nmeros sinalizados.
P: indica a paridade do acumulador.
- : no utilizado.

Osmar

11

REGISTRO B:
O registro B utilizado durante as operaes de multiplicao e diviso. Para outras instrues
este registro poder ser usado para fazer armazenagem temporria de dados.
REGISTRO APONTADOR DE DADOS, DPTR:
O registro apontador de dados formado por um byte alto, DPH, e por um byte baixo, DPL.
A sua funo de manter um endereo de 16 bits, usado para acessar memrias externas.
Portanto, este registro pode ser utilizado como um registro de 16 bits ou 2 registros
independentes de 8 bits.
REGISTROS DAS PORTAS 0 a 3, P0-P3:
Os registros P0, P1, P2 e P3 so latchs das portas 0, 1, 2 e 3, respectivamente, com a finalidade de
armazenar os dados que sero acessados pela porta.
REGISTRO DE BUFFER DE DADOS SERIAL, SBUF:
O registro de dado serial composto de 2 registros separados, sendo um registro buffer
transmissor e outro buffer receptor. nestes registros que ficam os dados a serem transmitidos ou
recebidos.
REGISTROS TEMPORIZADORES, TH:
So registros utilizados para fazer contadores/temporizadores no microprocessador.
O par de registros TH0,TL0 e TH1,TL1 , formam o registro contador para o temporizador/contador
do microprocessador, 0 e 1 respectivamente.
REGISTROS DE CONTROLE, IP, IE, TMOD, TCON, SCON e PCON:
Os registros de controle, IE, TMOD, TCON, SCON e PCON armazenam bits que permitem fazer
controle e verificar o status do sistema de interrupo, dos temporizadores/contadores e da porta
serial.

Osmar

12

INTERRUPES
As interrupes param a seqncia normal da execuo de um programa para atendimento imediato a eventos
internos ou externos de maior prioridade.
Para que uma interrupo seja atendida, a mesma dever estar devidamente habilitada pelo software e na
possibilidade de ocorrncia de mais de uma interrupo simultaneamente, existe uma hierarquia de prioridade
de atendimento.
Quando uma interrupo atendida, o valor do registro PC salvo na pilha, de forma a possibilitar o posterior
retorno do programa ao ponto em que havia parado.
Ao termino da execuo do evento que originou a interrupo encontra-se uma instruo de retorno que por sua
vez busca o dado apontado pela pilha e o coloca no PC.
As interrupes podem ser internas ou externas ao microprocessador.
No 8031, h 5 interrupes:
Interrupo INT0. Externa.
Interrupo INT1. Externa.
Temporizador/contador de eventos T0. Interna.
Temporizador/contador de eventos T1. Interna.
Interface serial. Interna.

PORT ou PORTA
So pontos de entrada do exterior para o interior do microprocessador ou de sada deste para o seu exterior.
Estas portas podem ser acessadas durante uma interrupo.
ESQUEMA SIMPLIFICADO DE UM BIT DE UMA PORTA DE ENTRADA/SADA:
Este esquema pode ser visto na figura 11:
leitura do latch
+Vcc
barramento de dados interno

escrita

CK

_
Q

pino

leitura do pino

Figura 11: esquema simplificado de um bit de uma porta.

Osmar

13

Para se ter no pino de sada de uma porta, nvel lgico 1 ou 0, as instrues executam uma escrita no latch, que
controla o FET do driver de sada atravs do sinal de sada Q complementado. Quando o FET de sada conduz, o
pino estar em nvel lgico 0.
Observa-se que a leitura de um bit de uma porta de E/S apresenta 2 sinais:
Um para comandar a leitura do estado do pino que ser o sinal de entrada, para dentro do microprocessador.
Outro comanda a leitura do latch cujo contedo ser o sinal que se deseja enviar para fora do microprocessador.
H ento, instrues que lem, modificam e escrevem a sada do latch, tais como:
ANL:
ORL:
XRL:
JBC:
CPL:
INC:

ANL P1,A
ORL P1,A
XRL P1,A
JBC P1,0
CPL P1,0
INC P1

SETB Pn.i:
CLR Pn.i:
MOV Pn.i,C
DJNZ
DEC:

SETB P2,3
CLR P3,0
MOV P2.0,C
DJNZ P3,rtulo
DEC P2

Cada uma das portas est mapeada na regio dos registros de funes especiais da memria SRAM interna, com
endereos especficos, portanto quando se deseja acessar uma porta, pode-se referir ao endereo desta, porem
mais conveniente se referir ao nome da porta associada a uma instruo:
A instruo MOV A, P1 por exemplo, l o contedo da porta P1 e guarda o valor desta no acumulador.
Da mesma forma cada um dos bits da porta tem endereo especfico, uma vez que esto em regio de memria
de bit enderevel. Portanto quando se deseja acessar um bit de uma porta, pode-se, referir ao endereo deste ou
usar a notao porta.bit, como por exemplo:
MOV C, P1.O. Esta instruo faz com que o flag C receba o estado do pino 0 da porta 1.
Todas as 4 portas de 8 bits do 8051, P0, P1, P2 e P3, podem ter seus pinos individualmente usados como entrada
ou sada, conectados, por exemplo, a dispositivos simples como chaves e leds, como tambm podem ser usadas
como barramentos de 8 bits e interfacear dispositivos perifricos como displays, conversores A/D e D/A.
Verifique nas figuras 2 e 3 por exemplo que as portas P0 e P2 ficam destinadas gerao de endereos A0 a A7
em P0 e A8 a A15 em P2, quando acessando memria externa, e a porta P3 apresenta seus pinos dotados de
funes alternativas.
Uma particularidade que a porta P0 apresenta a sua sada configurada como dreno aberto, ao contrrio das
demais portas que apresentam o resistor de pull-up interno. A porta P0 pode drenar at 8 cargas TTL, ao
contrrio das demais que podem drenar no mximo 4.
No port 3, ou porta 3 de entrada e sada, existem 4 terminais de interrupo:
P3.0
P3.1
P3.2
P3.3

recepo serial. RxD.


transmisso serial TxD.
entrada da interrupo externa. INT0.
entrada da interrupo externa. INT1.

Se forem usadas quaisquer das funes especiais do port 3, o mesmo dever ser acessado apenas atravs dos
seus bits individuais.
No 8051, pode-se habilitar individualmente cada interrupo, cada uma com dois nveis de prioridade definidos
por software. Existe um mecanismo interno de prioridade que define a seguinte ordem de atendimento, na
remota possibilidade de ocorrncia simultnea:

Osmar

14

Interrupo externa INT0


Temporizador/contador de eventos T0
Interrupo externa INT1
Temporizador/contador de eventos T1
Interface serial

maior prioridade.

menor prioridade.

ENDEREOS DAS INTERRUPES:


Estes endereos podem ser vistos na tabela 3:
Interrupo.
Endereo.
Bit de interrupo. Bit de habilitao.
Interrupo externa 0 0003 4230
EX0
1
Timer 0
000B 4240
ET0
1
Interrupo externa 1 0013 4250
EX1
1
Timer 1
001B 4260
ET1
1
Canal serial.
0023 4270
ES
1
Tabela 3: pontos de interrupo do microprocessador 8031.

Ao aplicar nvel lgico 1 nos bit de interrupo, habilita-se a interrupo que ter acesso ao endereo
indicado.
O processo de atendimento de uma interrupo feito por endereos vetoriais, ou seja, quando h uma
solicitao de interrupo vai-se sempre para um endereo vetorial que est na memria ROM onde h uma
instruo do tipo LJMP onde se coloca o endereo do incio da sub rotina da interrupo. Na tabela 1 onde se
tem endereo o primeiro de entrada, o segundo para onde o primeiro o conduz e onde deve ser colocado o
endereo da sub rotina a ser executada.
Portanto ao se utilizar uma destas interrupes, no endereo correspondente deve-se colocar uma instruo
LJMP para a posio inicial de servio de interrupo.

CIRCUITO DE INTERRUPO
O circuito equivalente de interrupo pode ser visto na figura 11. Neste circuito tem-se:
IE0 e IE1 sinalizam internamente os pedidos de interrupo externa.
1: h pedido.
0: no h pedido ou houve e j foi atendido.
ITO e IT1 determinam se o pedido de interrupo ser por nvel ou transio.
1: o pedido ser por transio, 1 para 0.
0: o pedido ser por nvel, 0.
No registro IP os bits que estiverem com nvel lgico 1 tero o pedido de interrupo atendido de acordo com as
seguintes regras:
Uma interrupo de nvel mais alto de prioridade ter preferncia sobre outra de nvel mais baixo. Uma
interrupo de nvel alto no poder ser interrompida por outra fonte de interrupo.
Se 2 requisies de diferentes nveis de prioridade forem recebidas simultaneamente, a de maior nvel ser
atendida primeiro.

Osmar

15

Registro IE
____
INT0

Registro IP

Interrupo de alta
prioridade

IT0

IE0

1
Seqncia
do nvel de
interrupo

T0
____
INT1

IT1

IE1

1
T1
R1
T1

Desabilitao individual.

Desabilitao geral.

Interrupo de baixa
Prioridade.

Figura 11: circuito eltrico equivalente para fazer interrupes.

Se as requisies tiverem o mesmo nvel de prioridade, uma seleo interna determina qual requisio ser
atendido primeiro.
As chaves das requisies que aparecem no esquema da figura 11 so simblicas. Na verdade, estas so
eletrnicas e acionadas de acordo com os bits contidos nos seus respectivos registros.
No circuito da figura 11, estando as chaves do registro IP na posio indicada, os pedidos sero atendidos na
seqncia apontada pela seta. Se uma das chaves do registro IP for acionada para cima, a entrada a que ela
pertence passa a ter prioridade sobre as outras entradas de acordo com as regras estabelecidas. Isto feito por 3
bits mais significativos do registro IP, internamente, pelo microprocessador.

REGISTRO HABILITADOR DE INTERRUPO - IE - BIT ENDEREAVEL:


IE: Interrupt Enable.
Endereo: A8.
Usado para habilitar ou desabilitar as interrupes, preenche-se os bits EX0, ET0, EX1, ET1 e ES e sero
aceitos se o bit EA estiver com nvel lgico 1.
EA
x
x
ES ET1 EX1 ET0 EX0
IE.7 IE.6 IE.5 IE.4 IE.3 IE.2 IE.1 IE.0
Representao do registro IE.

Osmar

16

A tabela 4 mostra a posio e a funo de cada bit do registro habilitador de interrupo, IE


Smbolo Posio
EA

IE.7

x
x
ES

IE.6
IE.5
IE.4

ET1

IE.3

EX1

IE.2

ET0

IE.1

EX0

IE.0

Funo.
Se EA = 0 desabilita toda e qualquer interrupo de ser gerada.
Se EA=1 permite habilitar as fontes de interrupo que forem individualmente
selecionadas atravs dos bits ES, ET1, EX1, ET0 e EX0.
No esta sendo utilizado.
No est sendo utilizado.
Habilita ou desabilita a interrupo da porta serial.
ES = 0 desabilita.
ES = 1 habilita.
Habilita ou desabilita a interrupo do temporizador/contador 1.
ET1 = 0 desabilita.
ET1 = 1 habilita.
Habilita ou desabilita a interrupo externa 1.
EX1 = 0 desabilita.
EX1 = 1 habilita.
Habilita ou desabilita a interrupo do temporizador/contador 0.
ET0 = 0 desabilita.
ET0 = 1 habilita.
Habilita ou desabilita a interrupo externa 0.
EX0 = 0 desabilita.
EX0 = 1 habilita.
Tabela 4: posio e funo de cada bit do registro IE.

Como exemplo, se fosse necessrio habilitar as duas interrupes externas, o registro IE deveria ter os bits EA,
EX1 e EX0 preenchidos com nvel lgico 1, os bits ES, ET1 e ET0 preenchidos com nvel lgico 0 e oestados
dos bits IE.6 e IE.5, irrelevantes, podendo ser 0. Assim ter-se-ia:
MOV IE, #10000101

ou seja: MOV IE,#85

cujos cdigos so: 75 A8 85.


onde:
75 o cdigo de MOV
A8 o endereo do registro IE
85 o valor em hexadecimal de 10000101

REGISTRO HABILITADOR DE PRIORIDADE DE INTERRUPO - IP - BIT ENDEREAVEL:


IP: Interrupt Priority.
Endereo: 98.
Usado para selecioncar as prioridades de atendimento das interrupes. O formato deste registro apresentado a
seguir:

x
x
x
PS PT1 PX1 PT0 PX0
IP.7 IP.6 IP.5 IP.4 IP.3 IP.2 IP.1 IP.0
Timer1
Timer0
Canal serial

INT1

INT0

Representao do registro IP.


A tabela 5 mostra a posio e a funo de cada bit do registro de interrupo IP:

Osmar

17

Smbolo. Posio.
Funo.
x
IP.7
No esta sendo utilizado.
x
IP.6
No esta sendo utilizado.
x
IP.5
No esta sendo utilizado.
PS = 1 permite que a interrupo do canal serial tenha a mais alta prioridade de
PS
IP.4
atendimento.
PS = 0 mantem a ordem de prioridade de atendimento da interrupo do canal serial
inalterada.
PT1 = 1 permite que a interrupo temporizador/contador 1 tenha a mais alta prioridade
PT1
IP.3
de atendimento.
PT1 = 0 mantem a ordem de prioridade de atendimento da interrupo
temporizador/contador 1 inalterada.
PX1 = 1 permite que a interrupo externa 1 tenha a mais alta prioridade de atendimento.
PX1
IP.2
PX1 = 0 mantem a ordem de prioridade de atendimento da interrupo externa 1
inalterada.
PT0 = 1 permite que a interrupo temporizador/contador 0 tenha a mais alta prioridade
PT0
IP.1
de atendimento.
PT0 = 0 mantem a ordem de prioridade de atendimento da interrupo do canal serial
inalterada.
PX0 = 1 permite que a interrupo externa 0 tenha a mais alta prioridade de atendimento.
PX0
IP.0
PX0 = 0 mantem a ordem de prioridade de atendimento da interrupo externa 0
inalterada.
Tabela 5: posio e funo de cada bit do registro IP.
Como exemplo, se fosse priorizar a interrupo externa 1 o registro IP poderia ter os bits IP7, IP6 e IP5
preenchidos com nveis lgicos irrelevantes, podendo ser 0, os bits PS, PT1, PT0 e PX0 devem ser preenchidos
com nvel lgico 0 e o bit PX1 ser preenchido com nvel lgico 1. Assim ter-se-ia:
MOV IP, #00000100

ou seja: MOV IE,#04

cujos cdigos so: 75 B8 04.


onde:
75 o cdigo de MOV
B8 o endereo do registro IP
04 o valor em hexadecimal de 00000100

REGISTRO TIMER CONTROL - TCON - BIT ENDEREAVEL:


TCON: Timer Control.
Endereo: 88.
Usado para ativar as interrupes externas por borda ou nvel.
As interrupes externas INT0 e INT1 podem ser ativadas tanto por nvel quanto por borda de descida, e esta
seleo pode ser feita atravs de 4 dos 8 bits do registro TCON.
O formato deste registro com os bits utilizados para estas funes apresentado a seguir:

Osmar

18

x
x
x
x
IE1 IT1 IE0 IT0
TCON.7 TCON.5
TCON.3 TCON.1
TCON.6

TCON.4

TCON.2 TCON.0

Representao do registro TCON.

A tabela 6 mostra a posio e a funo dos bits 3, 2, 1 e 0 do registro de controle TCON:


Smbolo.
x
x
x
x
IE1
IT1
IE0
IT0

Posio.
TCON.7
TCON.6
TCON.5
TCON.4

Funo.
No esta sendo utilizado para esta funo
No esta sendo utilizado para esta funo
No esta sendo utilizado para esta funo
No esta sendo utilizado para esta funo
Bit de interrupo externa 1. ativado por circuito externo, quando ocorre uma
TCON.3
____
transio de nvel alto para baixo for detectada no pino INT1. zerado por circuito,
quando, ao termino da interrupo.
TCON..2 Bit de controle do tipo de interrupo 1. ativado por programao para especificar
transio de descida do pulso ou nvel baixo para o sinal de interrupo externa.
Bit de interrupo externa 0. ativado por circuito externo, quando ocorre uma
TCON.1
_____
transio de nvel alto para baixo for detectada no pino INT0. zerado por circuito,
quando, ao termino da interrupo.
TCON.0 Bit de controle do tipo de interrupo 0. ativado por programao para especificar
transio de descida do pulso ou nvel baixo para o sinal de interrupo externa.
Tabela 6: posio e funo dos bits 3, 2, 1 e 0 do registro de controle TCON.

MNEMNICO
Exemplo: MOV IE, #81
MOV TCON, #01

DESCRIO NARRATIVA
habilita a interrupo interna.
ativa a interrupo INT0 ou INT1 por borda.

CDIGOS
75 A8 81
75 88 01

REGISTRO TEMPORIZADOR/CONTADOR:

Osmar

19

O par de registros TH0, TL0 e TH1, TL1 formam o registro contador para temporizador/contador 0 e 1
respectivamente. Estes registros podem ser configurados para operar como temporizador ou como contador.
Na funo de temporizador, o registro ser incrementado a cada ciclo de mquina. Desde que um ciclo de
mquina corresponde a 12 perodos do oscilador, a taxa de contagem ser de 1/12 de freqncia do oscilador.
Na funo contador, o registro ser incrementado em resposta a transio de 1 para 0 do seu correspondente
pino de entrada externa, T0 ou T1 da porta 3. Nesta funo os pinos externos sero amostrados durante o estado
5 da fase 2 de todos os ciclos de mquina. Assim, quando uma amostragem indicar um nvel alto em um ciclo e
um nvel baixo no prximo ciclo, o contador ser incrementado.
A mxima taxa de contagem ser de 1/24 da freqncia do oscilador, visto que so necessrios 2 ciclos de
mquinas para o reconhecimento de uma transio de 1 para 0.
No h nenhuma restrio quanto ao ciclo de trabalho do sinal externo, mas para garantir que o nvel lgico
amostrado seja correto, o mesmo dever ter uma durao de pelo menos um ciclo de mquina completo.
A operao como temporizador tem 4 modos possveis.
A seleo de temporizador ou contador, realizada atravs do registro de funo especial TMOD. Este registro
dividido em 2 partes iguais que controlam o temporizador 1 e o temporizador 0.
A figura 12 ilustra a arquitetura dos temporizadores/contadores, T/C, do microprocessador 8051, evidenciando
seus registros internos:
oscilador

12
Controle

C/T = 0
C/T = 1

TL0/1
5 bits

TH0/1
8 bits

TF0/1
do registro TCON

interrupo

Pino T1 da porta 3
Bit TR0/1 do registro TCON
Bit GATE do
registro TMOD
1
____
Pino INT1 da porta 1

&

Figura 12: diagrama em blocos do circuito dos T/Cs, do microprocessador 8051.

REGISTRO DE CARGA DO VALOR INICIAL DE CONTAGEM - TH0, TL0 e TH1, TL1


Estes dois registros de 8 bits, TH0, TL0 ou TH1, TL1, so usados para fazer a carga inicial do valor de
contagem dos T/Cs, sendo sempre de forma crescente at o valor mximo, que pode ser de 8 ou 16 bits,
conforme THn e TLn sejam usados separados como contadores de 8 bits ou aos pares como contadores de 16
bits. Aps este valor mximo de contagem ter sido atingido o sinalizador TF0 ou TF1 setado indicando esta
ocorrncia e caso a ocorrncia associada ao T/C em questo esteja habilitada, uma interrupo gerada.
REGISTRO DE CONTROLE DOS TEMPORIZADORES/CONTADORES

Osmar

20

TCON - BIT ENDEREAVEL:


TCON: Timer Control.
Endereo: 88.
Este registro de 8 bits usado para controlar a operao do T/Cs e para isto somente os 4 bits mais significativos
so usados para esta funo uma vez que os 4 bits menos significativos j foram usados para fazer o controle do
modo de interrupo por borda.
O formato deste registro com os bits utilizados para estas funes apresentado a seguir:
TF1 TR1 TF0 TR0 x
x
x
x
TCON.7 TCON.5
TCON.3 TCON.1
TCON.6

TCON.4

TCON.2 TCON.0

Representao do registro TCON.


A tabela 7 mostra a posio e a funo de cada bit do registro TCON.
Smbolo.
TF1
TR1
TF0
TR0
x
x
x
x

Posio.

Funo.
Bit de overflow do temporizador 1. Vai a 1 por hardware sempre que o T/C1 atingiu o
TCON.7 valor mximo de contagem e ocorreu um timer overflow. Vai a zero por software
sempre que se deseja reiniciar o T/C.
Bit de controle de operao do temporizador 1. preenchido por programao para
TCON.6 ligar ou desligar, a operao do temporizador/contador 1. Nvel lgico 1 inicia a
contagem. Nvel lgico 0 para a contagem.
Bit de overflow do temporizador 0. Vai a 1 por hardware sempre que o T/C0 atingiu o
TCON.5 valor mximo de contagem e ocorreu um timer overflow. Vai a zero por software
sempre que se deseja reiniciar o T/C.
Bit de controle de operao do temporizador 0. preenchido por programao para
TCON.4 ligar ou desligar, a operao do temporizador/contador 0. Nvel lgico 1 inicia a
contagem. Nvel lgico 0 para a contagem.
TCON.3 No esta sendo utilizado para esta funo
TCON..2 No esta sendo utilizado para esta funo
TCON.1 No esta sendo utilizado para esta funo
TCON.0 No esta sendo utilizado para esta funo
Tabela 7: posio e funo de cada bit do registro TCON.

REGISTRO DE CONTROLE DE MODO DE OPERAO DOS T/Cs


ENDEREAVEL:

TCON

BIT

TMOD: Timer Mod.


Endereo: 89.
Este registro de 8 bits, usado para selecionar os modos de operao do temporizador/contador.
O formato deste registro com os seus respectivos bits esta representado a seguir:
G1
TM.7

T/C1 M11 M01


TM.6 TM.5 TM.4

G0
TM.3

T/C0 M10 M00


TM.2 TM.1 TM.0

Representao do registro TMOD.


A tabela 8 mostra a posio e a funo de cada bit do registro TMOD.

Osmar

21

Smbolo
G1
G0

Posio
TM.7
TM3

Funo
Usado para selecionar o tipo de controle de disparo do T/C.
Se Gn = 0 o T/C controlado apenas atravs do bit TRn.
Se Gn = 1 o T/C controlado atravs do bit TRn e do pino INTn.
T/C1
TM.6
Usado para selecionar a operao do T/C como temporizador ou contador.
T/C0
TM2
Se T/C = 1 contador. Se T/C = 0 temporizador.
M00/M10 TM.0/TM.1 Estes 2 bits tem com funo selecionar um dentre 4 modos de operao dos
M01/M11 TM.4/TM.5 T/Cs, de acordo com o mostrado na tabela 9.
Tabela 8: posio e funo de cada bit do registro TMOD.

A tabela 9 mostra os 4 modos de operao dos T/Cs:


M1
0
0
1
1

M0
0
1
0
1

MODO DE OPERAO - CARACTERSTICAS


0 - T/C de 8 bits com prescaler de at 32x.
1 - T/C de 16 bits.
2 - T/C de 8 bits com recarga automtica.
3 Contador de 8 bits + temporizador de 8 bits.

Tabela 9: modo de operao do Temporizador/contador.


T/C no modo 0 - contagem com 8 bits com prescaler de 32x:
Neste modo o T/C0 ou T/C1 funciona com 8 bits, sendo que esta contagem ocorre no registro TL0 ou TL1,
tendo portanto, um mximo valor de contagem igual a 255. O registro TH0 ou TH1, neste caso fornece uma pr
diviso, prescaler, do sinal de clock do contador de at 32x, utilizando para isto 5 bits deste registro.
T/C no modo 1 - contagem com 16 bits:
Neste modo o T/C0 ou T/C1 funciona com 16 bits, ou seja, os 2 registros TH0 ou TL0, ou TH1 e TL1 so vistos
como um nico registro de 16 bits, sendo a contagem implementada neste par de registros e o valor mximo de
contagem igual a 65.535 ou FFFF.
T/C no modo 2 - contagem com 8 bits com recarga automtica:
Neste modo o T/C0 ou T/C1 funciona com 8 bits, sendo TL0 ou TL1 o registro onde ocorre a contagem e TH0 e
TH1 o registro onde o valor inicial de contagem, ou neste caso o valor de recarga est especificado. Sempre que
o valor mximo de contagem ocorre, 255 ou FF, o valor de recarga automaticamente carregado quando TF0 ou
TF1 resetado.
T/C no modo 3 - contagem com 8 bits em TH0 e temporizador com 8 bits em TL0:
Neste modo o T/C0, e somente este, pode funcionar como temporizador ou contador de 8 bits, usando o registro
TH0, e ativando caso seja necessrio a interrupo T/C1. O outro registro do T/C0, TL0 poder funcionar como
um temporizador adicional de 8 bits usando a interrupo do T/C0.

CANAL SERIAL:

Osmar

22

A interface serial do microprocessador 8051 pode ser usada de 4 modos diferentes: com operaes tipo
sncrona, assncrona, com taxas de transmisso fixa ou varivel..
Os registros utilizados para programar os canais seriais so os seguintes:
SBUF ou Buffer de Canal Serial e SCON ou Controle de Canal Serial.
Uma transmisso serial sempre se inicia quando um byte escrito no registro SBUF, sendo este byte
serializado e enviado para o pino TxD da porta P3 de onde pode ser transmitido.
Para habilitar a recepo o bit REN, Recepo Habilitada, do registro de controle SCON, dever ser setado e
os bits quando recebidos pelo pino RxD da porta P3 sero paralelizados e enviados para o registro SUBF para
ser lido.
REGISTRO DE CONTROLE DO CANAL SERIAL - SCON - BIT ENDEREAVEL:
SCON: Serial Control.
Endereo: 89.
Este registro de 8 bits, usado para selecionar os modos de operao do canal serial
O formato deste registro com os seus respectivos bits esta representado a seguir:
SM0
SM.7

SM1 SM2
SM.6 SM.5

REN
SM.4

TB8
SM.3

RB8
T1
SM.2 SM.1

R1
SM.0

Representao do registro SCON.

A tabela 10 mostra a posio e a funo de cada bit do registro SCON.


Smbolo.
SM0 e SM1
SM2
REN
RB8
TB8
T1
R1

Posio.
Funo.
SM.6 e SM.7 Seleciona 1 dentre 4 modos de operao do canal serial, de acordo com a tabela
11.
Habilita a comunicao entre vrios processadores nos modos 2 e 3. Nos modos
SM.5
2 ou 3, se SM2=1 R1 no pode ser ativado se no 9 bit RB8=0. No modo 1, se
SM2=1, ento R1 no pode ser ativado se um bit de parada valido no for
recebido. No modo 0, SM2 deve ser 0.
SM.4
Colocado em 1 ou 0 por software habilita ou desabilita a recepo,
respectivamente.
SM.2
Nos modos 2 e 3, o nono bit a ser recebido. No modo 1, se SM2=0, RB8 o
bit de parada. No modo 0, RB8 no usado.
SM3
o nono bit a ser transmitido nos modos 2 e 3. zerado ou no por software.
Flag de interrupo da transmisso serial. Vai a 1 por hardware ao fim do 8 bit
SM1
no modo 0, ou pela chegada dos bits de parada nos outros modos. Deve ser
zerado por software.
Flag de interrupo da recepo serial. Vai a 1 por hardware ao fim do 8 bit no
SM.0
modo 0, ou na metade do bit de parada nos outros modos, exceto comSM2.
deve ser zerado por software.

Tabela 10: posio e funo de cada bit do registro SCON.


Modos de operao do canal serial:

Osmar

23

A tabela 11 seleciona 1 dentre 4 modos de operao do canal serial:


SM1
0
1
0

SM0
0
0
1

Modo de operao do canal serial


0: Registrador de deslocamento usa taxa fixa = freqncia de clock /12.
1: UART de 8 bits e taxa varivel.
2: UART de 9 bits - usa taxa fixa = freqncia de clock / 32 ou
freqncia de clock = 64.
3: UART de 9 bits usa taxa varivel
Tabela 11: 1 dentre 4 modos de operao do canal serial.

Modo 0 do canal serial registrador de deslocamento:


Neste modo o canal serial colocado no modo registrador de deslocamento no qual entram e saem serialmente
atravs do pino RxD, e no pino TxD o clock enviado. Neste caso, os termos RxD e TxD no tem mais o
significado original, uma vez que o pino RxD transmite e recebe dados seriais, e o pino TxD nada tem a ver com
transmisso de dados. A transmisso iniciada sempre que se escreve no registro SBUF. E a recepo quando o
bit REN do registro SCON setado, e o flag de recepo RI resetado.
A freqncia de transmisso do canal serial obtida de acordo com o ilustrado no diagrama em blocos da figura
13.
Oscilador
interno

Divisor
por 12

Taxa de
transmisso

Figura 13: obteno da freqncia de transmisso no modo 0


Modo 1 do canal serial Uart de 8 bits e taxa varivel
Neste modo o canal serial no modo receptor/transmissor universal assncrono, UART, onde o dado com 8 bits
seriais so precedidos por um bit de inicio de transmisso, chamado start com nvel lgico baixo e no fim da
trasmisso um bit que sinaliza o fim desta, chamado de stop com nvel lgico alto. O bit de stop escrito na
posio RB8 do registro SCON na recepo que tem inicio quando o bit de start recebido no pino RxD do
mesmo registro, sendo sensvel borda de descida. A taxa de transmisso programada atravs do registro timer
1 overflow conforme ilustra a figura 14.
Divisor
por 32

SMOD = 0

Timer
overflow

Taxa de
transmisso
Divisor
por 16

SMOD = 1

Figura 14: representao do canal serial no modo 1.


Modo 2 do canal serial Uart de 9 bits e taxa fixa

Osmar

24

Neste modo o canal o canal serial colocado no modo UART de 9 bits seriais, que como no modo 1 so
precedidos por um bit de start em nvel lgico baixo, s seguido por um bit de stop em nvel lgico alto. Quando
da recepo, o bit RB8 do SCON reservado para receber o nono bit da palavra de dado, ao invs de receber o
stop como no modo 1. Na transmisso o bit TB8 recebe o nono bit que pode ser um bit de paridade, por
exemplo. O diagrama em blocos da representado na figura 15 representa o canal serial no modo 2.
Divisor
por 32

SMOD = 0

Timer
overflow

Taxa de
transmisso
Divisor
por 64

SMOD = 1

Figura 15: representao do canal serial no modo 2

Modo 3 do canal serial Uart de 9 bits e taxa varivel:


Neste modo o canal serial colocado no modo UART de 9 bits seriais exatamente como no modo 2, exceto que
a taxa de transmisso programada pelo timer 1, como no modo 1.

FORMATO DAS INSTRUES

Osmar

25

LINGUAGEM DE ALTO NVEL e LINGUAGEM DE MQUINA:


Nos meios de comunicao quem tem uma maneira de se comunicar melhor e com maior qualidade
o homem porque este possui o poder da fala. Esta linguagem a mais desenvolvida. a que maior
fora de expresso. Por isto chama de linguagem de alto nvel. A partir da, todo tipo de
comunicao que se afasta deste processo tende a ser mais rudimentar, tornando-se uma linguagem
de baixo nvel. Quanto mais se afasta da linguagem do homem mais baixo se torna o nvel de
comunicao.
Como internamente o microprocessador, opera com circuitos lgicos, a linguagem mais acessvel
para que ele opere a linguagem de mquina binria, que utiliza nveis lgicos 0 e 1. Esta
chamada de linguagem de mquina, pois esta se afasta da linguagem de alto nvel e se aproxima da
linguagem da mquina.
Assim sendo qualquer meio de comunicao que se utilizar para se comunicar com o
microprocessador, mesmo que seja de alto nvel, para que ele funcione corretamente esta deve ser
transformada em linguagem de mquina. A facilidade de se utilizar linguagem de alto nvel facilita
o trabalho do homem, porem mais circuitos intermedirios entre este e a mquina deve existir para
que esta chegue ao seu nvel de entendimento.
Na linguagem de mquina a representao das instrues atravs de cdigos numricos
extremamente cansativa e, alem disso a lgica do programa fica difcil de ser compreendida. Assim
representa-se na linguagem assembly as instrues atravs de 3 ou 4 letras. Estas abreviaturas ou
mnemnicos, facilita o entendimento e a criao dos programas.
Suponha o seguinte exemplo:
Escreve-se um programa em linguagem assembly e neste tem-se a seguinte instruo:
MOV R0, A que para ser digitado utiliza-se seguinte cdigo hexadecimal:
F8, que ao ser transformado em cdigo binrio pelo microprocessador tem a seguinte seqncia:
F = 1111 8 = 1000
o cdigo binrio 11111000 que acionar os circuitos lgicos internos do microrpocessador para
que ele opere, sendo interpretado da seguinte forma:
11: a ordem de transferncia de contedo de um dado de um lugar para outro.
111: designa o registro A e mostra para onde o contedo vai, ou seja o destino.
000: designa o registro R0 e mostra de onde o contedo vem, ou seja a fonte.
Aps a execuo desta instruo o contedo do registro A foi transferido para o registro R0.
O formato da instruo MOV que a de movimento de dados entre registros, tem ento o seguinte
formato:
1

Sendo:
11

o cdigo de transferncia de dados de um lugar para outro. Toda instruo de


transferncia dever inciar com este nmero.
DDD: designa o destino para onde o dado ser transferido. Este cdigo dever mudar de
acordo com o destino do dado.
SSS: designa a fonte, source, de onde o dado vem. Este cdigo dever mudar de acordo
com o local de onde o dado vai sair.

Osmar

26

Para cada tipo de instruo existe um formato sempre construdo neste princpio.
Como uma especificao binria igual do exemplo se tornaria muito trabalhosa e muito sujeita a
erros por parte do digitador, esta feita em hexadecimal e a que ser digitada no teclado do
microrpocessador e este se encarrega de transformar o nmero dado em hexadecimal, em binrio.
Para no se ter o trabalho de fazer transformao de binrio para hexadecimal, tem-se tabelas que
ao serem consultadas fornecem o cdigo hexadecimal de acordo com a instruo desejada.
As instrues so montadas de acordo com o seguinte:
1- MNEMONICO EM ASSEMBLY:
a abreviatura de uma instruo:
2- NOME DA INSTRUO:
a designao da instruo:

exemplo: MOV R0,A

exemplo: mover registros.

3- DESCRIO SIMBLICA:
mostra a operao que ser realizada utilizando smbolos: exemplo: (r0) (A)
4- DESCRIO NARRATIVA:
descreve a operao que ser realizada:

exemplo: o contedo do registro A movido para o


registro r1.

5- CDIGO BINRIO:
apresenta a instruo em binrio de acordo com o modo que o microprocessador ir operar.
Exemplo: 11111000.
6- INFORMAES COMPLEMENTARES:
Adicionam mais contedos instruo que possam ajudar o entendimento da instruo ou
auxiliar a elaborao de programas.
Estados.

Um estado de mquina corresponde a 2 perodos do oscilador.


Um ciclo de mquina corresponde a 6 estados ou 12 perodos do oscilador.
Esta informao indica quantos estados tem uma instruo.

Endereamanto.

a maneira de fornecer o endereo do operando.

Flags.

o contedo do registro PSW onde cada bit representa certas condies que
acontecem aps as operaes realizadas no microprocessador.

As instrues do 8051 podem ser de 1, 2 ou 3 bytes.


O 1 byte sempre o cdigo de operao que mostra o que deve ser feito. H instrues que
somente com este byte ela toda executada. Porem h instrues que precisam mais informaes
complementares, contidas no 2 e/ou 3 byte.

CONJUNTO DE INSTRUES DO MICROPROCESSADOR 8051

Osmar

27

MODOS DE ENDEREAMENTO DE DADOS:


Rn
direto
@Ri
#dado
#dado16
Bit
A ou Acc

registros de uso geral, R0 a R7.


RAM interna, portas de E/S ou registros especiais.
RAM interna ou externa endereada indiretamente por R0 ou R1.
constante de 8 bits includa na instruo de 1 byte.
constante de 16 bits includa na instruo de 2 bytes.
flags ou bits de sinalizao, bits de portas de E/S ou de registros especiais.
acumulador.

MODOS DE ENDEREAMENTO DE PROGRAMA:


end16
end11
rel

endereo de destino para LCALL e LJMP com espao de 16KB.


endereo de destino para ACALL e AJMP para pgina de 2KB.
deslocamento de 8 bits de -128 a +127 relativo prxima instruo para SJMP e todos os
saltos condicionais.

CONJUNTO DE INSTRUES DO MICRORPOCESSADOR 8051:


O conjunto de instrues do 8051 pode ser dividido em 5 grupos:
Transferncia de dados.
Operaes lgicas.
Operaes aritmticas.
Manipulao de variveis booleanas.
Controle de programa.

OPERAES DE TRANSFERNCIA DE DADOS:


Fazem parte do grupo de transferncia de dados as instrues MOV, MOVC, MOVX, PUSH, POP,
XCH e XCHD.
Instruo MOV:
A instruo MOV copia o contedo de um endereo da memria de dados interna, ou uma
constante, para outro endereo da memria de dados interna, utilizando a seguinte sintaxe:
MOV <destino>, <fonte>

MOV A, Rn

Osmar

28

Carrega no acumulador o contedo do registro R0, R1, R2, R3, R4, R5, R6 ou R7, do banco de
registros especificado no registro PSW.
R0 E8
Se no especificar, este banco ser o zero.
R1 E9
Bytes: 1
R2 EA
Ciclos: 1
R3 EB
Cdigo:
R4 EC
1 1 1 0 1 r r r
R5 ED
R6 EE
Operao:
R7 EF
(A) (Rn)
Exemplo: MOV A, R0
MOV PSW 10
MOV R1, 47

transfere para o acumulador o contedo do registro R0, do banco


de registros 0.
seleciona o banco de registros 2.
coloca 47 no registro 1 do banco de registros 2.

MOV A, direto
Carrega no acumulador o contedo do endereo da memria de dados interna, especificado no 2
byte da instruo.
Bytes: 2
Ciclos: 1
Cdigo:
1 1 1 0 0 1 0 1
E5 endereo
endereo direto
Operao:
(A) (endereo direto)
Exemplo: MOV A, 12

o contedo da memria interna, cujo endereo 12, ser


carregado no acumulador.

MOV A, @Ri

Osmar

29

Carrega no acumulador o contedo do endereo da memria de dados interna cujo endereo se


encontra no registro R0 ou R1.
Bytes: 1
Ciclos: 1
Cdigo:
1 1 1 0 0 1 1 i
R0 E6
R1 E7
Operao:
(A) ((Ri))
Exemplo: MOV A, @R0

o contedo da memria interna, cujo endereo est contido em


R0 transferido para o acumulador.

MOV A, #dado
Carrega no acumulador o valor da constante de 8 bits, especificado no 2 byte da instruo.
Bytes: 2
Ciclos: 1
Cdigo:
0 1 1 1 0 1 0 0
74 dado
dado imediato
Operao:
(A) #dado
Exemplo: MOV A, #19

a constante 19, ser carregada no acumulador.

MOV Rn, A
Carrega no registro R0, R1, R2, R3, R4, R5, R6 ou R7, do banco de registros em uso o contedo do
acumulador.
R0 F8
Bytes: 1
R1 F9
Ciclos: 1
R2 FA
Cdigo:
R3 FB
1 1 1 1 1 r r r
R4 FC
R5 FD
Operao:
R6 FE
(Rn) (A)
R7 FF
Exemplo: MOV R0, A

transfere para o registro R0, do banco de registros em uso o


contedo do acumulador.

MOV Rn, direto

Osmar

30

O dado contido no endereo especificado no 2 byte da instruo movido para o registro R1, R2,
R3, R4 ,R5, R6 ou R7 do banco de dados selecionado.
R0 A8
Bytes: 2
R1 A9
Ciclos: 2
R2 AA
Cdigo:
R3 AB
1 0 1 0 1 r r r
R4 AC
endereo direto
R5 AD
Operao:
(Rn) (direto)
R6 AE
R7 AF
Exemplo: MOV R0, 32

transfere o contedo do endereo 32 para o registro R0, do


banco de registros em uso.

MOV Rn, #dado


O dado especificado no 2 byte da instruo movido para o registro R1, R2, R3, R4 ,R5, R6 ou R7
do banco de dados selecionado.
R0 78
Bytes: 2
R1 79
Ciclos: 1
R2 7A
Cdigo:
R3 7B
0 1 1 1 1 r r r
R4 7C
dado
R5 7D
Operao:
R6 7E
(Rn) (#dado)
R7 7F
Exemplo: MOV R0, #32

transfere a constante 32 para o registro R0, do banco de registros


em uso.

MOV direto, A
Carrega no endereo indicado no segundo byte da instruo o contedo do acumulador.
Bytes: 2
Ciclos: 1
Cdigo:
1 1 1 1 0 1 0 1
F5 endereo
endereo direto
Operao:
(direto) (A)
Exemplo: MOV 12, A

o contedo do acumulado transferido para o endereo 12 da


RAM interna.

MOV direto, Rn

Osmar

31

O dado contido no registro R1, R2, R3, R4 ,R5, R6 ou R7 do banco de dados selecionado movido
para o endereo da memria interna especificado no 2 byte da instruo.
R0 88
Bytes: 2
R1 89
Ciclos: 2
R2 8A
Cdigo:
R3 8B
1 0 0 0 1 r r r
R4 8C
endereo direto
R5 8D
Operao:
(direto) (Rn)
R6 8E
R7 8F
Exemplo: MOV 32, R1

transfere o contedo do registro R1 para o endereo 32 da


memria RAM interna.

MOV direto, direto


Transfere o contedo do endereo contido no 2 byte da instruo para o endereo contido no 3
byte.
Bytes: 3
Ciclos: 2
Cdigo:
1 0 0 0 0 1 0 1
endereo direto da fonte
85 endereo endereo
endereo direto do destino

Operao:
(endereo destino direto) (endereo fonte direto)
Exemplo: MOV 12, 27

o contedo do endereo 27 da memria RAM, interna ser


transferido para o endereo 12 da RAM interna.

MOV direto, @Ri


Transfere o contedo do endereo formado pelo contedo do registro R0 ou R1 para o endereo
contido no 2 byte da instruo.
Bytes: 2
Ciclos: 1
Cdigo:
1 0 0 0 0 1 1 i
R0 87
endereo direto
R1 86
Operao:
(direto) ((Ri))
Exemplo: MOV 12, @87

Osmar

o contedo do endereo indicado pelo registro R1 ser


transferido para o endereo 12 da RAM interna.

32

MOV direto, #dado


O dado especificado no 3 byte da instruo transferido para o endereo especificado no 2 byte da
instruo.
Bytes: 3
Ciclos: 2
Cdigo:
0 1 1 1 0 1 0 1
endereo direto
76 endereo dado
dado imediato
Operao:
(direto) #dado
Exemplo: MOV 47, #39

o numero 39 ser armazenado no endereo 47 da RAM interna.

MOV @Ri, A
O contedo do acumulador transferido para a RAM interna no endereo contido no registro R0 ou
R1.
Bytes: 1
Ciclos: 1
Cdigo:
R0 F6
1 1 1 1 0 1 1 i
R1 F7
Operao:
((Ri)) (A)
Exemplo: MOV R1, A

o contedo do acumulador transferido para a RAM interna,


para o endereo contido no registro R1.

MOV @Ri, direto


O contedo do endereo contido no 2 byte da instruo transferido para o endereo contido no
registro R0 ou R1 da RAM interna.
Bytes: 2
Ciclos: 2
Cdigo:
1 0 1 0 0 1 1 i
R0 A6
endereo direto
R1 A7
Operao:
((Ri)) (direto)

Osmar

33

Exemplo: MOV @R1, 37

o contedo do endereo 37 da RAM interna, transferido


para o endereo contido no registro R1.

MOV @Ri, #dado


O dado contido no 2 byte da instruo transferido para o endereo contido no registro R0 ou R1.
Bytes: 2
Ciclos: 1
Cdigo:
0 1 1 1 0 1 1 i
R0 76
dado imediato
R1 77
Operao:
((Ri)) #dado
Exemplo: MOV@ 12, A

o contedo do acumulado transferido para o endereo 12 da


RAM interna.

MOV DPTR, #dado16


Carrega no registro DPTR o valor da constante de 16 bits, especificado.
Bytes: 3
Ciclos: 2
Cdigo:
1 0 0 1 0 0 0 0
dado imediato, bits de 8 a 15
dado imediato, bits de 0 a 7

90 dado dado

Operao:
(DPTR) (#dado de 0 a 15)
Exemplo: MOV DPTR, #1234

carrega no DPTR a constante 1234.

Instruo MOVC:
A instruo MOVC copia o contedo da memria de programa, interna ou externa, para o
acumulador, utilizando a seguinte sintaxe:
MOVC A, <fonte>

Osmar

34

O operando <fonte> sempre ir empregar o modo de endereamento atravs de ponteiros.

MOVC A, @A+DPTR
Adiciona o valor contido no acumulador ao valor contido no registro DPTR. O resultado formar
um endereo da memria de programa, cujo contedo ser carregado no acumulador.
Bytes: 1
Ciclos: 2
Cdigo:
1 0 0 1 0 0 1 1
93
Operao:
(A) ((A) + (DPTR) )
Exemplo: MOV A, #03
MOV DPTR, #1234
MOVC A, @A+DPTR

aps estas instrues, no acumulador tem-se o


contedo do endereo de memria 1237.

MOVC A, @A+PC
Adiciona o valor contido no acumulador ao valor contido no registro PC. O resultado formar um
endereo da memria de programa, cujo contedo ser carregado no acumulador.
Bytes: 1
Ciclos: 2
Cdigo:
1 0 0 0 0 0 1 1
83
Operao:
(A) ((A) + (PC) )
Exemplo: MOV A, #03
MOVC A, @A+PC

aps estas instrues, no acumulador tem-se o contedo do


endereo de memria formado pelo contedo do PC + 03.

Instruo MOVX:
A instruo MOVX copia o contedo de uma posio da memria de dados, externa para o
acumulador ou vice versa, utilizando as seguintes sintaxes:
MOVX A, <fonte>
MOVX <destino>, A

Osmar

35

Os operandos <fonte> e <destino>, sempre iro utilizar o modo de endereamento indireto atravs
de ponteiros. Trata-se da nica forma de leitura ou escrita na memria de dados externa e de
perifricos externos mapeados em memria.
MOVX A, @Ri
Transfere o contedo do endereo formado pelo contedo do registro R0 ou R1 da memria externa
para o acumulador.
Bytes: 1
Ciclos: 2
Cdigo:
1 1 1 0 0 0 1 i
R0 E2
R1 E3
Operao:
(A) ((Ri))
Exemplo: MOVX A, @R1

transfere para o acumulador o contedo do endereo


formado pelo registro R1.

MOVX A, @DPTR
Carrega o acumulador com o contedo da posio de memria de dados externa cujo endereo o
contedo do DPTR.
Bytes: 1
Ciclos: 2
Cdigo:
1 1 1 0 0 0 0 0
E0
Operao:
(A) ((DPTR))
Exemplo: MOVX A, @DPTR

no acumulador tem-se o contedo do endereo contido no


registro DPTR.

MOVX @Ri, A
Carrega no endereo indicado por R0 ou R1, da memria RAM externa, o contedo do acumulador.
Bytes: 1
Ciclos: 2
Cdigo:
1 1 1 1 0 0 1 i
R0 F2
R1 F3
Operao:

Osmar

36

((Ri)) (A)
Exemplo: MOVX @R1, A

carrega no endereo indicado por R1, o contedo do


acumulador.

MOVX @DPTR, A
Coloca no endereo de memria indicado pelo registro DPTR o contedo do acumulador.
Bytes: 1
Ciclos: 2
Cdigo:
1 1 1 1 0 0 0 0
F0
Operao:
((DPTR)) (A)
Exemplo: MOVX @DPTR, A

coloca no endereo indicado pelo registro DPTR o contedo


do acumulador.

Instrues PUSH e POP:


As instrues PUSH e POP promovem o armazenamento temporrio de dados, para colocar e retirar
dados, respectivamente na pilha e utilizam a seguinte sintaxe:
PUSH <fonte>
POP <destino>

PUSH direto
Empurra para a pilha. O registro SP incrementado de 1. Em seguida o contedo do endereo da
memria de dados interna carregado no topo da pilha.
Bytes: 2
C0 endereo
Ciclos: 2
Cdigo:
1 1 0 0 0 0 0 0
endereo direto
Operao:
(SP) (SP) + 1
((SP)) (direto)
Exemplo: MOV SP 2F
PUSH ACC

Osmar

define o fundo da pilha.


o contedo do acumulador movido para o topo a pilha.

37

POP direto
Puxa da pilha. O topo da pilha carregado no endereo da memria de dados interna. Em seguida o
registro SP decrementado.
Bytes: 2
D0 endereo
Ciclos: 2
Cdigo:
1 1 0 1 0 0 0 0
endereo direto
Operao:
(direto) ((SP))
(SP) (SP) - 1
Exemplo: POP ACC

o contedo do topo da pilha movido para o acumulador.

Instruo XCH:
A instruo XCH efetua a troca de contedos entre o acumulador e um segundo operando,
utilizando a seguinte sintaxe:
XCH A, <operando>
possvel utilizar todos os modos de endereamento: imediato, direto, indireto e registro.

XCH A, Rn
Troca o contedo do acumulador com o contedo do registro R0, R1, R2, R3, R4, R5, R6 ou R7.
Bytes: 1
Ciclos: 1
R0 C8
Cdigo:
R1 C9
1 1 0 0 1 r r r
R2 CA
R3 CB
Operao:
R4 CC
(A) (Rn)
R5 CD
R6 CE
R7 CF
Exemplo: XCH A, R2

Osmar

o contedo do acumulador vai para o registro R2 e o contedo do


registro R2 vai para o acumulador.

38

XCH A, direto
Troca o contedo do acumulador com o contedo do endereo especificado no 2 byte da instruo.
Bytes: 2
Ciclos: 1
C5 endereo
Cdigo:
1 1 0 0 0 1 0 1
endereo direto
Operao:
(A) (direto)
Exemplo: XCH A, FD

o contedo do acumulador vai para o endereo FD e o contedo


do endereo FD vai para o acumulador.

XCH A, @Ri
Troca o contedo do acumulador com o contedo do endereo especificado nos registros R0 ou R1.
Bytes: 1
Ciclos: 1
R0 C6
Cdigo:
R1 C7
1 1 0 0 0 1 1 i
Operao:
(A) ((Ri))
Exemplo: XCH A, R0

o contedo do acumulador vai para o endereo contido no registro


R0 e o contedo do endereo contido no registro R0 vai para o
acumulador.

Instruo XCHD:
A instruo XCHD efetua a troca dos nibbles menos significativos entre o acumulador e um
segundo operando, utilizando a seguinte sintaxe:
XCHD A, <operando>
possvel utilizar apenas o modo de endereamento indireto com os ponteiros R0 e R1.

Osmar

39

XCHD A, @Ri
Permuta os 4 dgitos de baixa ordem do acumulador, que pode representar um dgito hexadecimal
ou BCD, com os 4 bits de alta ordem da posio de memria RAM interna endereada de forma
indireta pelo registro R0 ou R1. Os 4 bits de alta ordem no so afetados.
Bytes: 1
Ciclos: 1
R0 C6
Cdigo:
R1 C7
1 1 0 1 0 1 1 i
Operao:
(A3-0) ((Ri3-0))
Exemplo: XCHD A, @R0

Os 4 bits de baixa ordem do acumulador vo ocupar as posies


dos 4 bits de alta ordem da memria RAM. Os 4 bits de alta
ordem da memria RAM vo ocupar as posies dos 4 bits de
baixa ordem do acumulador. A RAM ser a interna. O endereo
da memria RAM considerado o contedo do registro R0.

OPERAES LGICAS E ARITMTICAS:


Fazem parte do grupo de operaes lgicas as instrues CLR, CPL, ANL, ORL, XRL, RL, RLC,
RR, RRC, e SWAP.

Instruo CLR:
A instruo CLR zera o contedo do acumulador.

CLR A
Limpa o acumulador, ou seja, todos os bits do acumulador so zerados
Bytes: 1
Ciclos: 1
Cdigo:
1 1 1 0 0 1 0 0
E4

Osmar

40

Operao:
(A) (00)
Exemplo: CLR A
Instruo CPL:

todos os bits do acumulador so zerados.

A instruo CPL complementa o contedo do acumulador, bit a bit.

CPL A
Complementa o acumulador, ou seja, cada bit do acumulador invertido.
Bytes: 1
Ciclos: 1
Cdigo:
1 1 1 1 0 1 0 0
F4
Operao:
(A) (A)
Exemplo: CPL A

todo contedo do acumulador invertido.

Instrues ANL, ORL e XRL:


As instrues ANL, ORL e XRL, realizam as instrues E, OU e OU-EXCLUSIVO,
respectivamente, utilizando a seguinte sintaxe:
ANL, <operando1>, <operando2>
ORL, <operando1>, <operando2>
XRL, <operando1>, <operando2>
O resultado da operao armazenado no <operando1>, que pode ser o acumulador ou uma posio
de memria de dados interna endereada diretamente. O <operando2> pode utilizar todos os modos
de endereamento, imediato, direto, indireto e registro.

ANL A, Rn
Realiza a operao E, bit a bit, entre o contedo do acumulador e o contedo do registro R0, R1,
R2, R3, R4, R5, R6 ou R7. O resultado colocado no acumulador.
R0 58
Se no especificar, este banco ser o zero.
R1 59
Bytes: 1
R2 5A
Ciclos: 1
R3 5B
Cdigo:
R4 5C
0 1 0 1 1 r r r
R5 5D
Operao:
R6 5E
R7 5F

Osmar

41

(A) (A) ^ (Rn)


Exemplo: ANL A, R1

faz a funo lgica E, bit a bit, entre o contedo do acumulador e


o contedo do registro R1 e coloca o resultado no acumulador.

ANL A, direto
Faz a operao E, bit a bit, entre o contedo do acumulador e o contedo do endereo especificado
no segundo byte da instruo, e coloca o resultado no acumulador.
Bytes: 2
Ciclos: 1
55 endereo direto
Cdigo:
0 1 0 1 0 1 0 1
endereo direto
Operao:
(A) (A) ^ (endereo direto)
Exemplo: ANL A F0

faz a funo lgica E, bit a bit, entre o contedo do acumulador e o


contedo do endereo F0.

ANL A, @Ri
Faz a operao E, bit a bit, entre o contedo do acumulador e o contedo do endereo especificado
no registro R0 ou R1, e coloca o resultado no acumulador.
Bytes: 1
Ciclos: 1
R0 56
Cdigo:
R1 57
0 1 0 1 0 1 1 i
Operao:
(A) (A) ^ ((Ri))
Exemplo: ANL @, R0

faz a funo lgica E, bit a bit, entre o contedo do acumulador e


o contedo do endereo contido no endereo R0.

ANL A, # dado imediato


Faz a operao E, bit a bit, entre o contedo do acumulador e o dado especificado no segundo byte
da instruo, e coloca o resultado no acumulador.
Bytes: 2
Ciclos: 1
54 dado imediato
Cdigo:
0 1 0 1 0 1 0 0
dado imediato
Operao:
(A) (A) ^ (dado imediato)

Osmar

42

Exemplo: ANL A, #F0

faz a funo lgica E, bit a bit, entre o contedo do acumulador e


F0.

ANL direto, A
Faz a operao lgica E, entre o contedo do endereo contido no segundo byte da instruo e o
contedo do acumulador e coloca o resultado no endereo especificado no segundo byte desta
mesma instruo.
Bytes: 2
Ciclos: 1
Cdigo:
0 1 0 1 0 0 1 0
53 endereo direto
endereo direto
Operao:
(endereo direto) (endereo direto) ^ (A)
Exemplo: ANL F0, A

faz a funo lgica E, bit a bit, entre o contedo do endereo F0 e


o contedo do acumulador e coloca o resultado no endereo F0.

ANL direto, #dado


Faz a funo lgica E, entre o contedo do endereo indicado no segundo byte da instruo e o
dado contido no terceiro byte da instruo e coloca o resultado no endereo especificado no
segundo byte desta mesma instruo.
Bytes: 3
Ciclos: 2
Cdigo:
0 1 0 1 0 0 1 1
endereo direto
53 endereo dado
dado imediato

Operao:
(endereo direto) (endereo direto) ^ (dado imediato)
Exemplo: ANL 12, #34

Osmar

faz a funo E entre o contedo contido no endereo 12 e a


constante 34 e coloca o resultado no endereo 12.

43

ORL A, Rn
Realiza a funo OU, bit a bit, entre o contedo do acumulador e o contedo do registro R0, R1,
R2, R3, R4, R5, R6 ou R7. O resultado colocado no acumulador.
R0 48
Se no especificar, este banco ser o zero.
R1 49
Bytes: 1
R2 4A
Ciclos: 1
R3 4B
Cdigo:
R4 4C
0 1 0 0 1 r r r
R5 4D
Operao:
R6 4E
(A) (A) v (Rn)
R7 4F
Exemplo: ORL A, R3

faz a operao lgica OU, bit a bit, entre o contedo do acumulador


e o contedo do registro R3 e coloca o resultado no acumulador.

ORL A, direto
Faz a funo OU, bit a bit, entre o contedo do acumulador e o contedo do endereo especificado
no segundo byte da instruo, e coloca o resultado no acumulador.
Bytes: 2
Ciclos: 1
45 endereo direto
Cdigo:
0 1 0 0 0 1 0 1
endereo direto
Operao:
(A) (A) v (endereo direto)
Exemplo: ORL A, F0

faz a funo lgica OU, bit a bit, entre o contedo do acumulador


e o contedo do endereo F0.

ORL A, @Ri
Faz a operao OU, bit a bit, entre o contedo do acumulador e o contedo do endereo
especificado no registro R0 ou R1, e coloca o resultado no acumulador.
Bytes: 1
Ciclos: 1
R0 46
Cdigo:
R1 47

Osmar

44

Operao:
(A) (A) v ((Ri))
Exemplo: ORL @, R0

faz a funo lgica OU, bit a bit, entre o contedo do acumulador


e o contedo do endereo contido no endereo R0.

ORL A, # dado imediato


Faz a funo OU, bit a bit, entre o contedo do acumulador e o dado especificado no segundo byte
da instruo, e coloca o resultado no acumulador.
Bytes: 2
Ciclos: 1
44 dado imediato
Cdigo:
0 1 0 0 0 1 0 0
dado imediato
Operao:
(A) (A) v (dado imediato)
Exemplo: ORL A, #F0

faz a funo lgica OU, bit a bit, entre o contedo do acumulador


e F0.

ORL direto, A
Faz a funo lgica OU, entre o contedo do endereo indicado no segundo byte da instruo e
coloca o resultado no endereo especificado no segundo byte desta mesma instruo.
Bytes: 2
Ciclos: 1
Cdigo:
0 1 0 0 0 0 1 0
42 Endereo direto
endereo direto
Operao:
(endereo direto) (endereo direto) v (A)
Exemplo: ORL F0, A

Osmar

faz a funo lgica OU, bit a bit, entre o contedo do endereo F0


e o contedo do acumulador e coloca o resultado no endereo F0.

45

ORL direto, #dado


Faz a funo lgica OU, entre o contedo do endereo indicado no segundo byte da instruo e o
dado contido no terceiro byte da instruo e coloca o resultado no endereo especificado no
segundo byte desta mesma instruo.
Bytes: 3
Ciclos: 2
Cdigo:
0 1 0 0 0 0 1 1
endereo direto
43 endereo dado
dado imediato

Operao:
(endereo direto) (endereo direto) v (dado imediato)
Exemplo: ORL 12, #34

faz a funo OU entre o contedo contido no endereo 12 e a


constante 34 e coloca o resultado no endereo 12.

XRL A, Rn
Realiza a funo OU exclusivo, bit a bit, entre o contedo do acumulador e o contedo do registro
R0, R1, R2, R3, R4, R5, R6 ou R7. O resultado colocado no acumulador.
R0 68
Se no especificar, este banco ser o zero.
R1 69
Bytes: 1
R2 6A
Ciclos: 1
R3 6B
R4 6C
R5 6D
Osmar
46
R6 6E
R7 6F

Cdigo:
0

Operao:
(A) (A) (Rn)
Exemplo: XRL A, R3

faz a operao lgica OU exclusivo, bit a bit, entre o contedo do


acumulador e o contedo do registro R3 e coloca o resultado no
acumulador.

XRL A, direto
Faz a funo OU exclusivo, bit a bit, entre o contedo do acumulador e o contedo do endereo
especificado no segundo byte da instruo, e coloca o resultado no acumulador.
Bytes: 2
Ciclos: 1
65 endereo direto
Cdigo:
0 1 1 0 0 1 0 1
endereo direto
Operao:
(A) (A) (endereo direto)
Exemplo: XRL A F0

faz a funo lgica OU exclusivo, bit a bit, entre o contedo do


acumulador e o contedo do endereo F0.

XRL A, @Ri
Faz a operao OU exclusivo, bit a bit, entre o contedo do acumulador e o contedo do endereo
especificado no registro R0 ou R1, e coloca o resultado no acumulador.
Bytes: 1
Ciclos: 1
R0 66
Cdigo:
R1 67
0 1 1 0 0 1 1 i
Operao:
(A) (A) ((Ri))
Exemplo: XRL @, R0

faz a funo lgica OU exclusivo, bit a bit, entre o contedo do


acumulador e o contedo do endereo contido no endereo R0 e
coloca o resultado no acumulador.

XRL A, # dado imediato


Faz a operao OU exclusivo, bit a bit, entre o contedo do acumulador e o dado especificado no
segundo byte da instruo, e coloca o resultado no acumulador.
Bytes: 2
Ciclos: 1
64 dado imediato
Cdigo:

Osmar

47

1 0 0 1 0
dado imediato

Operao:
(A) (A) (dado imediato)
Exemplo: XRL A, #F0

faz a funo lgica OU exclusivo, bit a bit, entre o contedo do


acumulador e F0 e coloca o resultado no acumulador.

XRL direto, A
Faz a operao OU exclusivo, bit a bit, entre o contedo do acumulador e o contedo do endereo
especificado no segundo byte da instruo, e coloca o resultado no endereo especificado no
segundo byte da instruo.
Bytes: 2
Ciclos: 1
62 endereo direto
Cdigo:
0 1 1 0 0 0 1 0
endereo direto
Operao:
(endereo direto) (endereo direto) (A)
Exemplo: XRL F0, A

faz a funo lgica OU exclusivo, bit a bit, entre o contedo do


endereo F0 e o contedo do acumulador e coloca o resultado no
endereo F0.

XRL direto, #dado


Faz a funo lgica OU exclusivo, entre o contedo do endereo indicado no segundo byte da
instruo e o dado contido no terceiro byte da instruo e coloca o resultado no endereo
especificado no segundo byte desta mesma instruo.
Bytes: 3
Ciclos: 2
Cdigo:
0 1 1 0 0 0 1 1
endereo direto
63 endereo dado
dado imediato

(endereo direto) (endereo direto) #dado imediato


Exemplo: XRL 12, #34

Osmar

faz a funo OU exclusivo entre o contedo contido no endereo


12 e a constante 34 e coloca o resultado no endereo 12.

48

Instrues RL A, RLC A, RR A, e RRC A:


As instrues, RL A, RLC A, RR A, , e RRC A deslocam o contedo do acumulador um bit
esquerda, ou direita, passando ou no pelo flag de carry, respectivamente, utilizando a seguinte
sintaxe:
RL A
RLC A
RR A
RRC A
RL A
Os 8 bits do acumulador so rolados um bit esquerda. O valor do bit 0 vai para o bit 1, o valor do
bit 1 vai para o bit 2 e assim sucessivamente. O valor do bit 7 vai para o bit 0.
Bytes: 1
Ciclos: 1
Cdigo:
0 0 1 0 0 0 1 1
23
Operao:
(A +1) (An), n = 0-6
(A0) (A7)
Exemplo: RL A

todo contedo do acumulador girado para a esquerda, bit a bit. Cada


instruo causa somente um giro. Se desejar mais de um giro, esta deve
ser repetida tantas vezes quantas forem os giros desejados.

Representao:
7

RLC A
Os 8 bits do acumulador so rolados um bit esquerda, juntamente com o contedo do flag de
carry. O valor do bit 0 vai para o bit 1, o valor do bit 1 vai para o bit 2 e assim sucessivamente. O
valor do bit 7 vai para o flag de carry e o valor do flag de carry vai para o bit 0.
Bytes: 1
Ciclos: 1
Cdigo:
0 0 1 1 0 0 1 1
33
Operao:
(A +1) (An), n = 0-6
(A0) (C)
(C) (A7)

Osmar

49

Exemplo: RL A

todo contedo do acumulador girado para a esquerda, bit a bit. O valor


do bit 7 vai para o flag de carry e o valor do flag de carry vai para o bit 0.
Cada instruo causa somente um giro. Se desejar mais de um giro, esta
deve ser repetida tantas vezes quantas forem os giros desejados.

Representao:
Cy

RR A
Os 8 bits do acumulador so rolados um bit direita. O valor do bit 7 vai para o bit 6, o valor do bit
6 vai para o bit 5 e assim sucessivamente. O valor do bit 0 vai para o bit 7.
Bytes: 1
Ciclos: 1
Cdigo:
0 0 0 0 0 0 1 1
03
Operao:
(An) (Na + 1), n = 0-6
(A7) (A0)
Exemplo: RR A

todo contedo do acumulador girado para a direita, bit a bit. Cada


instruo causa somente um giro. Se desejar mais de um giro, esta deve
ser repetida tantas vezes quantas forem os giros desejados.

Representao:
7

RRC A
Os 8 bits do acumulador so rolados um bit direita, juntamente com o contedo do flag de carry.
O valor do bit 7 vai para o bit 6, o valor do bit 6 vai para o bit 5 e assim sucessivamente. O valor do
bit 0 vai para o flag de carry e o valor do flag de carry vai para o bit 7.
Bytes: 1
Ciclos: 1
Cdigo:
0 0 0 1 0 0 1 1
13
Operao:
(An) (An + 1), n = 0-6
(A7) (C)
(C) (A0)

Osmar

50

Exemplo: RRC A

todo contedo do acumulador girado para a direita, bit a bit. O valor do


bit 0 vai para o flag de carry e o valor do flag de carry vai para o bit 7.
Cada instruo causa somente um giro. Se desejar mais de um giro, esta
deve ser repetida tantas vezes quantas forem os giros desejados.

Representao:
Cy

Instruo SWAP:
A instruo, SWAP troca o nibble mais significativo pelo nible menos significativo doacumulador,
utilizando a seguinte sintaxe:
SWAP A
SWAP A
Os 4 bits de ordem baixa do acumulador vo para o lugar dos 4 bits de ordem alta e os 4 de ordem
alta vo para o lugar dos de ordem baixa.
Bytes: 1
Ciclos: 1
Cdigo:
1 1 0 0 0 1 0 0
C4
Operao:
(A0 a 3) (A4 a 7)
Exemplo: SWAP A

permuta os bits de baixo nvel do acumulador com os bits de alto nvel.

Instrues aritmticas:
Fazem parte do grupo de operaes aritmticas as instrues ADD, ADDC, SUBB, INC, DEC,
MUL, DIV e DA.
Instrues ADD e ADDC:
As instrues ADD e ADDC realizam a adio entre o contedo do acumulador e o contedo de um
endereo da memria de dados interna, ou uma constante, mais o contedo do flag de carry,
respectivamente, utilizando a seguinte sintaxe:

Osmar

51

ADD A, <operando>
ADDC A, <operando>
O resultado da operao armazenado no acumulador sendo possvel utilizar para o <operando>
todos os modos de endereamento, imediato, direto, indireto e registro. O flag de carry afetado
conforme o resultado da operao.

ADD A, Rn
Adiciona o contedo do acumulador ao contedo do registro R0, R1, R2, R3, R4, R5, R6 ou R7. O
resultado colocado no acumulador.
R0 28
O flag de carry vai a 1, se houver vai 1.
R1 29
O flag de carry vai a 0, se no houver vai 1.
R2 2A
Se no especificar, este banco ser o zero.
R3 2B
Bytes: 1
R4 2C
Ciclos: 1
R5 2D
Cdigo:
R6 2E
0 0 1 0 1 r r r
R7 2F
Operao:
(A) (A) + (Rn)
Exemplo: ADD A, R1

soma o contedo do acumulador ao contedo do registro R1, e


armazena o resultado no acumulador.

ADD A, direto:
Soma o contedo do acumulador ao contedo do endereo indicado no segundo byte da instruo e
coloca o resultado no acumulador.
Bytes: 2
Ciclos: 1
25 endereo
Cdigo:
0 0 1 0 0 1 0 1
endereo direto
Operao:
(A) (A) + (endereo direto)
Exemplo: ADD A, F0

Osmar

soma o contedo do acumulador ao contedo do endereo F0 e


coloca o resultado no acumulador.

52

ADD A, @Ri
Adiciona o contedo do acumulador ao contedo do endereo contido no registro R0 ou R1 e
coloca o resultado no acumulador.
Bytes: 1
Ciclos: 1
R0 26
Cdigo:
R1 27
0 0 1 0 0 1 1 i
Operao:
(A) (A) + ((Ri))
Exemplo: ADD A, @R0

soma o contedo do acumulador ao contedo do endereo


contido no registro R0, e armazena o resultado no acumulador.

ADD A, #dado
Soma o contedo do acumulador ao dado contido no 2 byte da instruo e coloca o resultado no
acumulador.
Bytes: 2
Ciclos: 1
Cdigo:
0 0 1 0 0 1 0 0
24 dado
dado direto
Operao:
(A) (A) + #dado
Exemplos: ADD A, #27

soma 27 ao contedo do acumulador e coloca o resultado no


acumulador.

ADDC
Esta instruo soma simultaneamente um dado indicado, o carry e o contedo do acumulador.
Os flags de carry e carry auxiliar so afetados. Estes vo a 1, se houver vai 1 no fim ou no meio
destas operaes, respectivamente.

ADDC A, Rn
Adiciona o contedo do acumulador ao contedo do registro R0, R1,
R5, R6 ou R7 e ao contedo do flag de carry. O resultado colocado

Osmar

R0
R1
R2
R3
R4
R5
R6
R7

38
R2, R3, R4,
39
no acumulador.
3A
3B
3C
53
3D
3E
3F

Se no especificar, este banco ser o zero.


Bytes: 1
Ciclos: 1
Cdigo:
0 0
Operao:
(A) (A) + (Rn) + (C)
Exemplo: ADDC A, R1

soma o contedo do acumulador ao contedo do registro R1,


mais o contedo do flag carry e armazena o resultado no
acumulador.

ADDC A, direto
Soma o contedo do acumulador ao contedo do endereo indicado no segundo byte da instruo
ao contedo do flag de carry e coloca o resultado no acumulador.
Bytes: 2
Ciclos: 1
35 endereo
Cdigo:
0 0 1 1 0 1 0 1
endereo direto
Operao:
(A) (A) + (C) + (endereo direto)
Exemplo: ADDC A, F0

soma o contedo do acumulador ao contedo do endereo F0 ao


contedo do flag de carry e coloca o resultado no acumulador.

ADDC A, @Ri
Adiciona o contedo do acumulador ao contedo do endereo contido no registro R0 ou R1 ao
contedo do flag de carry e coloca o resultado no acumulador.
Bytes: 1
Ciclos: 1
R0 36
Cdigo:
R1 37
0 0 1 1 0 1 1 i
Operao:
(A) (A) + ((Ri)) + (C)
Exemplo: ADDC A, @R0

soma o contedo do acumulador ao contedo do endereo


contido no registro R0, ao contedo do flag de carry e armazena
o resultado no acumulador.

ADDC A, #dado
Soma o contedo do acumulador ao contedo do dado indicado no segundo byte da instruo, ao
contedo do flag de carry e coloca o resultado no acumulador.

Osmar

54

Bytes: 2
Ciclos: 1
Cdigo:

34
0

1 1 0 1
dado direto

dado

Operao:
(A) (A) + (C) + (dado direto)
Exemplo: ADDC A, #F0

soma o contedo do acumulador ao dado F0, ao contedo do


flag de carry e coloca o resultado no acumulador.

DA A
Ajuste Decimal do Acumulador.
Faz o ajuste decimal de uma varivel de 8 bits no acumulador resultante da soma de dois nmeros
em BCD, gerando o resultado na forma de 2 nmeros de 4 bits.
Numa soma de nmeros BCD, se o valor dos 4 bits menos significativos do acumulador maior do
que 9 ou se o flag AC sofreu set, soma-se 6 ao acumulador.
Sempre aps a soma em BCD, coloca-se DA A. Se no precisar deste ajuste, o microprocessador
no o considera. Esta operao s se realiza no acumulador.
DA A s funciona depois de uma soma de dois nmeros em BCD, de dois dgitos cada.
Bytes: 1
Ciclos: 1
D4
1 1 0 1 0 1 0 0
Cdigo:
Operao:
Se [[(A0-3) > 9] + [(AC) = 1]]
Ento (A0-3) (A0-3) + 6
E
Se [[(A4-7) > 9] + [(C) = 1]]
Ento (A4-7) (A4-7) + 6
Exemplo: DA A

na soma realizada, se o valor dos 4 bits menos significativos do


acumulador maior do que 9 ou se o flag AC sofreu set, soma-se 6
ao acumulador.

Instruo SUBB:
A instruo SUB realiza a subtrao entre o contedo do acumulador o contedo de uma posio da
memria de dados interna, ou uma constante, e o flag de carry, utilizando a seguinte sintaxe:
SUBB A, <operando>
O resultado da subtrao armazenado no acumulador sendo possvel utilizar para o <operando>
todos os modos de endereamento, imediato, direto, indireto e registro. O flag de carry afetado

Osmar

55

conforme o resultado da operao. Esta operao permite que subtraes com mais de 8 bits posam
ser implementadas graas ao aproveitamento do flag de carry da operao anterior.
Subtrao:
Subtrai o valor da varivel indicada juntamente com o carry do valor do acumulador, levando o
resultado ao acumulador. O flag AC vai a um se o vem um necessrio para o bit 3 e zerado se no
houver o vem um. O flag OV vai a um se houver vem um no bit 6, mas no no 7, ou no 7 mas no
no 6. Utiliza a seguinte sintxe:
SUBB A, <operando>

SUBB A, Rn
Subtrai do contedo do acumulador o valor contido no flag carry e no registro R0, R1, R2, R3, R4,
R5, R6 ou R7. O resultado colocado no acumulador.
R0 98
Se no especificar, este banco ser o zero.
R1 99
Bytes: 1
R2 9A
Ciclos: 1
R3 9B
Cdigo:
R4 9C
1 0 0 1 1 r r r
R5 9D
Operao:
R6 9E
(A) (A) - (C) - (Rn)
R7 9F
Exemplo: SUBB A, R1

subtrai do contedo do acumulador o valor do contedo do


registro R1 e do flag cy, e armazena o resultado no acumulador.

SUBB A, direto
Subtrai do valor contido no acumulador o contedo do flag carry e o valor contido no endereo
indicado no segundo byte da instruo e coloca o resultado no acumulador.
Bytes: 2
Ciclos: 1
95 endereo
Cdigo:
1 0 0 1 0 1 0 1
endereo direto
Operao:
(A) (A) - (C) - (endereo direto)
Exemplo: SUBB A, F0

Osmar

subtrai do contedo do acumulador o contedo do flag carry e o


contedo do endereo F0 e coloca o resultado no acumulador.

56

SUBB A, @Ri
Subtrai do valor contido no acumulador o contedo do flag carry e o valor contido no endereo
indicado pelo registro R0 ou R1 e coloca o resultado no acumulador.
Bytes: 1
Ciclos: 1
R0 96
Cdigo:
R1 97
1 0 0 1 0 1 1 i
Operao:
(A) (A) - (C) - ((Ri))
Exemplo: SUBB A, @R0

subtrai do contedo do acumulador o contedo do falg carry e o


contedo do endereo indicado pelo registro R0, e armazena o
resultado no acumulador.

SUBB A, #dado
Subtrai do contedo do acumulador o valor do flag cy e o valor do dado contido no 2 byte da
instruo e coloca o resultado no acumulador.
Bytes: 2
Ciclos: 1
Cdigo:
1 0 0 1 0 1 0 0
94 dado
dado direto
Operao:
(A) (A) - (C) - #dado
Exemplos: SUBB A, #27

subtrai do valor do acumulador o valor do flag de carry e o


valor 27 e coloca o resultado no acumulador.

Instrues INC e DEC:


As instrues INC e DEC incrementam e decrementam o operando de uma unidade, utilizando a
seguinte sintaxe:
INC, <operando>
DEC A, <operando>
possvel utilizar todos os modos de endereamento, imediato, direto, indireto e registro.

INC A
Incrementa o contedo do acumulador, de 1.
Bytes: 1
Ciclos: 1

Osmar

57

Cdigo:
0

0
04

Operao:
(A) (A) + 1
Exemplo: INC A

o contedo do acumulador ser incrementado de 1.

INC Rn
O registro R0, R1, R2, R3, R4, R5, R6 ou R7 incrementado de 1.
Se no especificar, este banco ser o zero.
Bytes: 1
Ciclos: 1
Cdigo:
0 0 0 0 1 r r r
Operao:
(Rn) (Rn) + 1
Exemplo: INC R1

o registro R1 incrementado de 1.

R0
R1
R2
R3
R4
R5
R6
R7

08
09
0A
0B
0C
0D
0E
0F

INC direto
O contedo do endereo especificado no segundo byte da instruo, incrementado de 1.
Bytes: 2
Ciclos: 1
05 endereo
Cdigo:
0 0 0 0 0 1 0 1
endereo direto
Operao:
(endereo) (endereo) + 1
Exemplo: INC F0

o contedo do endereo F0 incrementado de 1.

INC, @Ri
O contedo do endereo contido no registro R0 ou R1 incrementado de 1.

Osmar

58

Bytes: 1
Ciclos: 1
Cdigo:
0

R0 06
R1 07

Operao:
((Ri)) ((Ri)) + 1
Exemplo: INC @, R0

o contedo do endereo contido no registro R0, incrementado de 1.

INC DPTR
Incrementa o contedo do registro DPTR, de 1.
Bytes: 1
Ciclos: 2
Cdigo:
1 0 1 0

1
A3

Operao:
(DPTR) (RPTR) + 1
Exemplo: INC DPTR

o contedo do registro DPTR incrementado de 1.

DEC A
Decrementa o contedo do acumulador, de 1.
Bytes: 1
Ciclos: 1
Cdigo:
0 0 0

0
14

Operao:
(A) (A) - 1
Exemplo: DEC A

o contedo do acumulador ser decrementado de 1.

DEC Rn
O registro R0, R1, R2, R3, R4, R5, R6 ou R7 decrementado de 1.
Se no especificar, este banco ser o zero.
Bytes: 1

Osmar

R0
R1
R2
R3
R4
R5
R6
R7

18
19
1A
1B
1C
1D
1E
1F

59

Ciclos: 1
Cdigo:
0

Operao:
(Rn) (Rn) - 1
Exemplo: DEC R4

o registro R4 decrementado de 1.

DEC direto
O contedo do endereo especificado no segundo byte da instruo, decrementado de 1.
Bytes: 2
Ciclos: 1
15 endereo
Cdigo:
0 0 0 1 0 1 0 1
endereo direto
Operao:
(endereo) (endereo) - 1
Exemplo: DEC F0

O contedo do endereo F0 decrementado de 1.

DEC, @Ri
O contedo do endereo contido no registro R0 ou R1 decrementado de 1.
Bytes: 1
Ciclos: 1
R0 16
Cdigo:
R1 17
0 0 0 1 0 1 1 i
Operao:
((Ri)) ((Ri)) - 1
Exemplo: DEC @, R0

O contedo do endereo contido no registro R0, decrementado


de 1.

Instrues MUL e DIV:

Osmar

60

As instrues MUL e DIV realizam a multiplicao e diviso, respectivamente entre o acumulador e


o registro B, utilizando a seguinte sintaxe:
MUL AB
DIV AB

MUL AB
Multiplica o valor de um nmero inteiro contido no acumulador por outro numero de valor inteiro
contido no registro B.
Se der um resultado de 16bits, a parte baixa deste nmero ir para o acumulador e a parte alta ir
para o registro B. Se o produto gerado for maior que 0FF, o flag OV ir a 1. O flag cy fica sempre
em 0.
Bytes: 1
Ciclos: 4
Cdigo:
1 0 1 0 0 1 0 0
A4
Operao:
(A) (A).(B)
(A) (0 a 7)
(B) (8 a 15)
Exemplo: MUL AB

o contedo do acumulador multiplicado pelo contedo do registro B.

DIV AB
Divide o valor de um nmero inteiro contido no acumulador por outro numero de valor inteiro
contido no registro B.
O acumulador recebe a parte inteira do cociente e o registro B o resto.
Bytes: 1
Ciclos: 4
Cdigo:
1 0 0 0 0 1 0 0

Osmar

61

84
Operao:
(A) (A)/(B)
(B) (resto)
Exemplo: DIV AB

o contedo do acumulador dividido pelo contedo do registro B.

MANIPULAO DE VARIVEIS BOOLEANAS: Bits;


Fazem parte do grupo de manipulao de variveis booleanas as seguintes instrues: CLR, SETB,
CPL, ANL, ORL C e MOV C utilizando a seguinte sintaxe:
CLR, <operando>
SETB <operando>
CPL, <operando>
ANL C, <operando>
ORL C, <operando>
MOV C, <fonte>
MOV C <destino>, C
Nas operaes : CLR, SETB e CPL o <operando> corresponde ao endereo do bit que se deseja
zerar, setar ou complementar, respectivamente.
Nas operaes ANL e ORL, o resultado da operao armazenado no flag carry e o <operando>
pode ser o endereo individual do bit da regio de memria de dados enderevel bit a bit ou um
registro de funo especial, enderevel bit a bit ou seu complemento.
Nas operaes MOV os operandos <fonte> e <destino> deve ser o endereo individual do bit que
dever fazer parte da regio da memria interna de dados enderevel bit a bit ou de um registro de
funo especial enderevel bit a bit.

CLR endereo bit


Limpa o bit indicado pelo segundo byte da instruo, ou seja, o bit indicado pelo segundo byte da
instruo zerado. Esta instruo pode atuar em qualquer bit enderevel.
Bytes: 2
Ciclos: 1
Cdigo:
1 1 0 0 0 0 1 0
C2 endereo do bit
endereo do bit
Operao:
(bit) (0)
Exemplo: CLR P1.2

Osmar

zera o bit 2 da porta 1.

62

CLR C
Limpa o bit de carry, ou seja, o bit de carry zerado.
Bytes: 1
Ciclos: 1
Cdigo:
1 1 0 0 0

1
C3

Operao:
(C) (0)
Exemplo: CLR C
o bit de carry zerado.
SETB endereo bit
Coloca 1 no bit indicado pelo segundo byte da instruo. Esta instruo pode atuar em qualquer bit
enderevel.
Bytes: 2
Ciclos: 1
Cdigo:
1 1 0 1 0 0 1 0
D2 endereo do bit
endereo do bit
Operao:
(bit) (1)
Exemplo: CPL P1.2

coloca 1 no bit 2 da porta 1.

SETB C
Coloca 1 no flag de carry.
Bytes: 1
Ciclos: 1
Cdigo:
1

1
D3

Operao:
(C) (1)
Exemplo: SETB C

coloca 1 no flag de carry.

CPL endereo bit


Complementa o bit indicado pelo segundo byte da instruo, ou seja, o bit indicado pelo segundo
byte da instruo invertido. Esta instruo pode atuar em qualquer bit enderevel.

Osmar

63

Bytes: 2
Ciclos: 1
Cdigo:
1

1 1 0 0 1
endereo do bit

B2

endereo do bit

Operao:
(bit) (bit)
Exemplo: CPL P1.2

inverte o bit 2 da porta 1.

CPL C
Complementa o contedo do flag de carry, ou seja, o contedo do flag de carry invertido.
Bytes: 1
Ciclos: 1
Cdigo:
1 0 1 1 0 0 1 1
B3
Operao:
(C) (C)
Exemplo: CPL C

o contedo do flag de carry invertido.

ANL C, bit
Faz a operao lgica E, entre dois bits sendo que um deles o carry e coloca o resultado no flag de
carry.
Bytes: 2
Ciclos: 1
Cdigo:
1 0 0 0 0 0 1 0
82 endereo do bit
endereo do bit
Operao:
(C) (C) ^ (bit)
Exemplo: ANL C, P1.0
ANL C, A.7

faz a operao lgica E, entre o bit 0 da porta 1 e o flag de carry.


faz a operao lgica E, entre o bit 7 do acumulador e o flag de
carry.

ANL C, /bit
Faz a operao lgica E, entre bit de carry e o complemento de um outro bit e coloca o resultado no
flag de carry.

Osmar

64

Bytes: 2
Ciclos: 1
Cdigo:
1

1 1 0 0 0
endereo do bit

B0 endereo do bit

Operao:
(C) (C) ^ /(bit)
Exemplo: ANL C, /P1.0
ANL C, /A.7

faz a operao lgica E, entre o complemento do bit 0 da porta


1 e o flag de carry.
faz a operao lgica E, entre o complemento do bit 7 do
acumulador e o flag de carry.

ORL C, bit
Faz a operao lgica OU, entre dois bits sendo que um deles o carry e coloca o resultado no flag
de carry.
Bytes: 2
Ciclos: 1
Cdigo:
0 1 1 1 0 0 1 0
72 endereo do bit
endereo do bit
Operao:
(C) (C) v (bit)
Exemplo: ORL C, P1.0
ORL C, A.7

faz a operao lgica OU, entre o bit 0 da porta 1 e o flag de carry.


faz a operao lgica OU, entre o bit 7 do acumulador e o flag de carry.

ORL C, /bit
Faz a operao lgica OU, entre bit de carry e o complemento de um outro bit e coloca o resultado
no flag de carry.
Bytes: 2
Ciclos: 1
Cdigo:
1 0 1 0 0 0 0 0
D0 endereo do bit
endereo do bit
Operao:
(C) (C) v /(bit)
Exemplo: ORL C, /P1.0

Osmar

faz a operao lgica OU, entre o complemento do bit 0 da porta


1 e o flag de carry.

65

ORL C, /A.7

faz a operao lgica OU, entre o complemento do bit 7 do


acumulador e o flag de carry.

MOV C, <fonte> ou MOV C, <destino>:


um tipo de instruo booleana que copia o estado de uma varivel para o flag de carry ou viceversa:
Os operandos <fonte> e <destino> devem ser o endereo individual do bit, ou seja, dever fazer
parte da regio da memria interna de dados enderevel bit a bit ou de um registro de funo
especial enderevel bit a bit.
MOV C, bit
O bit indicado pelo endereo do 2 byte da instruo copiado para o endereo indicado pelo 1
operando, sendo que um dos operandos tem que ser o carry e o outro qualquer bit enderevel.
Bytes: 2
Ciclos: 1
Cdigo:
1 0 1 0 0 0 1 0
A2 endereo
endereo do bit
Operao:
(C) (bit)
Exemplos: MOV C, P1.0
MOV A, P1

l o estado do bit 0 da porta P1 e guarda este valor no flag de carry.


l os estados da porta P1 e guarda o valor lido no acumulador.

MOV bit, C
O bit contido no endereo indicado pelo 2 byte da instruo copiado para o endereo indicado
pelo 1 operando.
Bytes: 2
Ciclos: 2
Cdigo:
1 0 0 1 0 0 1 1
92 endereo
endereo do bit
Operao:
(bit) (C)
Exemplos: MOV P1.0, C
MOV P1, A

o bit que estiver no flag de carry transferido para o pino 0 da


porta P1.
todo contedo do acumulador transferido para a porta P1.

Controle de programa:

Osmar

66

Fazem parte do grupo de controle de programa as instrues LJMP, AJMP, SJMP, JMP,
LCALL, ACALL, RET, RETI, JNZ, JZ, JNC, JC, JNB, JB, JBC, CJNE, DJNZ e NOP.
Este grupo de instrues atua em endereos da memria de programa, causando desvios na
seqncia natural de execuo do programa.
Instrues LJMP, AJMP, SJMP, JMP:
As instrues LJMP, AJMP, SJMP, JMP so instrues de desvio incondicional e possuem as
seguintes sintaxes:
LJMP <endereo>
AJMP <endereo>
SJMP <endereo>
JMP @A+DPTR

LJMP endereo
Salto, incondicional, longo.
Causa um salto incondicional para o endereo indicado formado pela composio dos bytes 2 e 3 da
instruo. No byte 2 coloca-se a parte alta do endereo, ou seja, bits de 8 a 15 e no byte 3 a parte
baixa, ou seja, bits de 0 a 7. O endereo de destino pode ser em qualquer lugar dentro dos 64KBytes
da memria de programa.
Bytes: 3
Ciclos: 2
Cdigo:
0 0 0 0 0 0 1 0
bits do endereo de 8 a 15
02 endereo endereo
bits do endereo de 0 a 7

Operao:
(PC) endereo de 0 a 15
Exemplo: LJMP, 3264

o PC carregado com o contedo 3264 e o programa continua a


sua execuo neste novo endereo.

AJMP endereo11
Transfere a execuo do programa para o endereo indicado, formado pela combinao dos 5 bits
de ordem mais alta do PC, incrementado 2x com os bits 5 a 7 do OC do segundo byte da instruo.
Efetua um desvio incondicional na execuo do programa na mesma pgina 01 endereo
de
2Kb da memria de dados.
21 endereo
Bytes: 2
41 endereo
61 endereo
81 endereo
Osmar
67
A1 endereo
C1 endereo
E1 endereo

Ciclos: 2
Cdigo:
a10 a9 a8 0 0 0 0 1
a7 a6 a5 a4 a3 a2 a1 a0
Operao:
(PC) (PC) + 2
(PC 10-0) endereo

Exemplo: AJMP F2:

desvia a seqncia normal do programa para o endereo F2.

SJMP relativo
Salto, incondicional, curto.
Causa um salto incondicional para o endereo formado pela adio do contedo do PC com
contedo especificado no segundo byte da instruo. O endereo de destino pode estar em qualquer
lugar num alcance de -128 a +127 da instruo seguinte a SJMP. O endereo aquele cujo valor
igual ao contedo do PC incrementado de 2 o valor do salto. + se o salto for para frente e se o
salto for para traz. Para traz o valor do salto deve ser em SC2.
Bytes: 3
Ciclos: 2
Cdigo:
1 0 0 0 0 0 0 0
80 endereo relativo
endereo relativo
Operao:
(PC) (PC) + 2
(PC) (PC) + endereo relativo
Exemplo: SJMP 64

o PC carregado com o contedo dele + 2 + 64 e o programa


continua a sua execuo neste novo endereo.

JMP @A+DPTR
Adiciona os 8 bits contidos no acumulador aos 16 bits contidos no registro DPTR e os carrega no
PC. A execuo deste programa continua neste novo endereo. Esta instruo se realiza
incondicionalmente.
Bytes: 1
Ciclos: 2
Cdigo:
0 1 1 1 0 0 1 1

Osmar

68

73
Operao:
(PC) (PC) + (DPTR)
Exemplo: JMP @ A + DPTR

suponha: A = 03, DPTR = 5490


aps a execuo desta instruo o contedo do PC ser =
5493 e a execuo programa saltar para este novo
endereo.

Instrues JNZ, JZ, JNC, JC, JNB, JB, e JBC:


As instrues JNZ, JZ, JNC, JC, JNB, JB, e JBC so instrues de desvio condicional e possuem as
seguintes sintaxes:
JNZ <endereo>
JZ <endereo>
JNC <endereo>
JC <endereo>
JNB <operando>,<endereo>
JB <operando>,<endereo>
JBC <operando>,<endereo>
Neste tipo de instruo um desvio s realizado se certas condies forem satisfeitas, ou seja, h
uma condio para que o desvio se realiza.

JNZ relativo
Salta se o contedo do acumulador no for igual a 0.
Se qualquer um dos bits do acumulador for igual a 1 ocorre um salto para o endereo indicado pela
soma do contedo do PC e o contedo do segundo byte da instruo; caso contrrio o programa
continua sua execuo na prxima instruo. O endereo aquele cujo valor igual ao contedo do
PC incrementado de 2 o valor do salto. + se o salto for para frente e se o salto for para traz. Para
traz o valor do salto deve ser em SC2.
Bytes: 2
Ciclos: 2
Cdigo:
0 1 1 1 0 0 0 0
endereo relativo

Osmar

69

70

endereo relativo

Operao:
(PC) (PC) + 2
se (A) <> 0
ento
(PC) (PC) + endereo relativo
Exemplo: JNZ 32

se um dos bits do acumulador for igual a 1, o programa salta para o


endereo igual ao contedo do PC mais 32.

DJNZ Rn, relativo


Decrementa o contedo do endereo indicado pelo registro R0, R1, R2, R3, R4, R5, R6 ou R7 do
banco de registros em uso, ocorrendo um desvio no programa caso o resultado seja diferente de
zero. Se o resultado for igual a zero o programa prossegue para a prxima instruo. Caso ocorre
um desvio, o endereo de desvio calculado pela CPU somando-se o valor relativo ao contedo do
PC.
Bytes: 2
Ciclos: 2
R0 D8
endereo
Cdigo:
R1 D9
endereo
1 1 0 1 1 r r r
R2 DA endereo
endereo relativo
R3 DB endereo
Operao:
R4 DC endereo
(PC) (PC) + 2
R5 DD endereo
(Rn) (Rn) 1
R6 DE endereo
Se (Rn) > 0 ou (Rn) < 0
R7 DF
endereo
Ento
(PC) (PC) + (endereo relativo)
Exemplo: DJNZ R3, F2:

decrementa o contedo do endereo indicado por R3. Se este


decremento for igual a zero, desvia a seqncia normal do
programa para o endereo igual ao contedo do PC + F2.

DJNZ direto, relativo


Decrementa o contedo do dado contido no segundo byte da instruo, ocorrendo um desvio no
programa caso o resultado seja diferente de zero. Se o resultado aps o decremento for zero o
programa prossegue para a prxima instruo. Caso ocorra um desvio, o endereo de desvio
calculado pela CPU somando-se o valor relativo ao contedo do PC.
Bytes: 3
Ciclos: 2
Cdigo:
1 1 0 1 0 1 0 1
dado direto

Osmar

70

endereo relativo

D5 dado direto

endereo relativo

Operao:
(PC) (PC) + 3
(direto) (direto) - 1
se (direto) > 0 ou (direto) < 0
ento
(PC) (PC) + endereo relativo
DJNZ 60, E1

decrementa o nmero 60. Se este resultado no for igual a zero o programa


salta para o endereo cujo valor igual ao contedo do PC incrementado
de 3 E1. + se o salto for para frente e se o salto for para traz. Para traz
o valor do salto deve ser em SC2.

JZ relativo
Salta se o contedo do acumulador for igual a 0.
Se todos os bits do acumulador forem 0, ocorre um salto para o endereo indicado pela soma do
contedo do PC e o contedo do segundo byte da instruo; caso contrrio o programa continua sua
execuo na prxima instruo. O endereo aquele cujo valor igual ao contedo do PC
incrementado de 3 ovalor do salto. + se o salto for para frente e se o salto for para traz. Para traz
o valor do salto deve ser em SC2.
Bytes: 2
Ciclos: 2
Cdigo:
0 1 1 0 0 0 0 0
60 endereo relativo
endereo relativo
Operao:
(PC) (PC) + 2
se (A) = 0
ento
(PC) (PC) + endereo relativo
Exemplo: JZ F2:

se todos os bits do acumulador forem igual a 0, ocorre um salto para o


endereo indicado pela soma do contedo do PC + 2 + F2.

JNC relativo
Salta se o carry no for 1.
Se o contedo do flag de carry for igual a zero ocorre um salto para o endereo indicado pela soma
do contedo do PC e o contedo do segundo byte da instruo; caso contrrio o programa continua
sua execuo na prxima instruo. O endereo aquele cujo valor igual ao contedo do PC
incrementado de 3 ovalor do salto. + se o salto for para frente e se o salto for para traz. Para traz
o valor do salto deve ser em SC2.
Bytes: 2

Osmar

71

Ciclos: 2
Cdigo:
0

0 1 0 0 0
endereo relativo

50

endereo relativo

Operao:
(PC) (PC) + 2
se (C) = 0
ento
(PC) (PC) + endereo relativo
JNC 32

se o contedo do bit C for igual a 0, o programa salta para o endereo igual


ao contedo do PC mais 32.

JC relativo
Se o contedo do flag de carry for igual a um ocorre um salto para o endereo indicado pela soma
do contedo do PC e o contedo do segundo byte da instruo; caso contrrio o programa continua
sua execuo na prxima instruo. O endereo aquele cujo valor igual ao contedo do PC
incrementado de 3 ovalor do salto. + se o salto for para frente e se o salto for para traz. Para traz
o valor do salto deve ser em SC2.
Bytes: 2
Ciclos: 2
Cdigo:
0 1 0 0 0 0 0 0
40 endereo relativo
endereo relativo
Operao:
(PC) (PC) + 2
se (C) = 1
ento
(PC) (PC) + endereo relativo
JC 32

se o contedo do bit C for igual a 1, o programa salta para o endereo igual


ao contedo do PC mais 32.

JNB bit, relativo


Se o bit indicado pelo endereo do segundo byte for igual a zero, ocorre um salto para o endereo
indicado no terceiro byte; caso contrrio o programa continua sua execuo na prxima instruo. A
destinao calculada pela soma do endereo relativo ao PC, aps este ter sido incrementado para
executar a prxima instruo seguinte ao salto.
Bytes: 3
Ciclos: 2
Cdigo:
0 0 1 1 0 0 0 0
endereo do bit

Osmar

72

endereo relativo

30

endereo do bit

endereo relativo

Operao:
(PC) (PC) + 3
se (bit) = 0
ento
(PC) (PC) + endereo relativo
JNB 32, E1

se o contedo do bit contido no endereo 32 for igual a 0, o programa salta


para o endereo cujo valor igual ao contedo do PC incrementado de 3
E1 e zera o bit contido no endereo 32. + se o salto for para frente e se o
salto for para traz. Para traz o valor do salto deve ser em SC2.

JB bit, relativo
Se o bit indicado pelo endereo do segundo byte for igual a um, ocorre um salto para o endereo
indicado no terceiro byte; caso contrrio o programa continua sua execuo na prxima instruo a
esta. A destinao calculada pela soma do endereo relativo ao PC, aps este ter sido
incrementado para executar a prxima instruo seguinte ao salto.
Bytes: 3
Ciclos: 2
Cdigo:
0 0 1 0 0 0 0 0
endereo do bit
20 endereo do bit endereo relativo
endereo relativo

Operao:
(PC) (PC) + 3
se (bit) = 1
ento
(PC) (PC) + endereo relativo
JB 32, E1

se o contedo do bit contido no endereo 32 for igual a 1, o programa salta


para o endereo cujo valor igual ao contedo do PC incrementado de 3
E1. + se o salto for para frente e se o salto for para traz. Para traz o valor
do salto deve ser em SC2.

JBC bit, relativo


Se o bit indicado pelo endereo do segundo byte for igual a um, este zerado, e ocorre um salto
para o endereo indicado no terceiro byte; caso contrrio o programa continua sua execuo na
prxima instruo. A destinao calculada pela soma do endereo relativo ao PC, aps este ter
sido incrementado para executar a prxima instruo seguinte ao salto.
Bytes: 3

Osmar

73

Ciclos: 2
Cdigo:
0

0 1 0 0 0
endereo do bit
endereo relativo

0
10

endereo do bit

endereo relativo

Operao:
(PC) (PC) + 3
se (bit) = 1
ento
(bit) 0
(PC) (PC) + endereo relativo
JBC 32, E1

se o contedo do bit contido no endereo 32 for igual a 1, o programa salta


para o endereo cujo valor igual ao contedo do PC incrementado de 3
E1 e zera o bit contido no endereo 32. + se o salto for para frente e se o
salto for para traz. Para traz o valor do salto deve ser em SC2.
CJNE A, direto, relativo
Compara o contedo do acumulador com o contedo da posio de memria de dados interna. Se os
valores forem iguais, o programa prossegue normalmente para a prxima instruo. Caso contrrio,
um desvio realizado pela CPU para um endereo que se obtm somando-se o valor relativo do
salto ao endereo contido no registro de funo especial PC aps este ser incrementado de 3.
Bytes: 3
Ciclos: 2
Cdigo:
0 1 0 0 0 0 1 1
endereo direto
43 endereo direto endereo relativo
endereo relativo

Operao:
(PC) (PC) + 3
se (A) <> (direto)
ento
(PC) (PC) valor do salto
se (A) < (direto)
ento
(C) 1
caso contrrio
(C) 0
Exemplo:

Osmar

CJNE A, 60, E1

se o contedo do acumulador no for igual ao contedo do


endereo 60 o programa salta para o endereo cujo valor
igual ao contedo do PC incrementado de 3 E1. + se o
salto for para frente e se o salto for para traz. Para traz o
valor do salto deve ser em SC2.

74

CJNE A, #direto, relativo


Compara o contedo do acumulador com o dado contido no segundo byte da instruo. Se os
valores forem iguais, o programa prossegue normalmente para a prxima instruo. Caso contrrio,
um desvio realizado pela CPU para um endereo que se obtm somando-se o valor relativo do
salto ao endereo contido no registro de funo especial PC aps este ser incrementado de 3.
Bytes: 3
Ciclos: 2
Cdigo:
1 0 1 1 0 1 0 0
dado imediato
B4 dado imediato endereo relativo
endereo relativo

Operao:
(PC) (PC) + 3
se (A) <> (direto)
ento
(PC) (PC) valor do salto
se (A) < (direto)
ento
(C) 1
caso contrrio
(C) 0
Exemplo:

Osmar

CJNE A, # 60, E1

se o contedo do acumulador no for igual a 60 o programa


salta para o endereo cujo valor igual ao contedo do PC
incrementado de 3 E1. + se o salto for para frente e se o
salto for para traz. Para traz o valor do salto deve ser em
SC2.

75

CJNE Rn, #dado, relativo


Compara o contedo de um dos registros R0, R1, R2, R3, R4, R5, R6, ou R7, do banco de registros
especificado com o dado contido no segundo byte da instruo. Se os valores forem iguais, o
programa prossegue normalmente para a prxima instruo. Caso contrrio, um desvio realizado
pela CPU para um endereo que se obtm somando-se o valor relativo do salto ao endereo contido
no registro de funo especial PC aps este ser incrementado de 3.
Bytes: 2
Ciclos: 2
Cdigo:
1 0 1 1 1 r r r
dado imediato
endereo relativo

Operao:
(PC) (PC) + 3
se (A) <> (direto)
ento
(PC) (PC) + valor do salto
se (A) < (direto)
ento
(C) 1
caso contrrio

Osmar

R0
R1
R2
R3
R4
R5
R6
R7

B8
B9
BA
BB
BC
BD
BE
BF

dado imediato
dado imediato
dado imediato
dado imediato
dado imediato
dado imediato
dado imediato
dado imediato

endereo relativo
endereo relativo
endereo relativo
endereo relativo
endereo relativo
endereo relativo
endereo relativo
endereo relativo

76

(C) 0
Exemplo:

CJNE R2, #F0, E1

se o contedo do registro 2 do banco de registros zero no for


igual a F0 o programa salta o para o endereo cujo valor
igual ao contedo do PC incrementado de 3 E1. + se o
salto for para frente e se o salto for para traz. Para traz o
valor do salto deve ser em SC2.

CJNE @Ri, #direto, relativo


Compara o contedo do endereo indicado com o dado contido no segundo byte da instruo. Se os
valores forem iguais, o programa prossegue normalmente para a prxima instruo. Caso contrrio,
um desvio realizado pela CPU para um endereo que se obtm somando-se o valor relativo do
salto ao endereo contido no registro de funo especial PC aps este ser incrementado de 3.
Bytes: 3
Ciclos: 2
Cdigo:
1 0 1 1 0 1 1 r
dado imediato
endereo relativo
R0 B6 dado imediato endereo relativo
R1 B7 dado imediato endereo relativo
Operao:
(PC) (PC) + 3
se (A) <> (direto)
ento
(PC) (PC) valor do salto
se (A) < (direto)
ento
(C) 1

Osmar

77

caso contrrio
(C) 0
Exemplo:

CJNE @R1, # 60, E1

se o contedo do registro R1 no for igual a 60 o programa


salta para o endereo cujo valor igual ao contedo do PC
incrementado de 3 E1. + se o salto for para frente e se o
salto for para traz. Para traz o valor do salto deve ser em
SC2.

Instrues LCALL, e ACALL:


As instrues LCALL, e ACALL so instrues de chamadas de sub rotinas e possuem as seguintes
sintaxes:
LCALL <endereo>
ACALL <endereo>

LCALL endereo16
Efetua a chamada de uma sub rotina contida no endereo indicado pelo segundo e terceiro byte da
instruo. A execuo do programa continua com a instruo endereada que pode estar em
qualquer lugar dentro dos 64KB da memria de programa. A instruo soma 3 ao contedo do PC
para gerar o endereo da prxima instruo e coloca o resultado na pilha, garantindo assim,o seu
retorno ao PC ao chegar no trmino da sub rotina.
Bytes: 3
Ciclos: 2
Cdigo:
0 0 0 1 0 0 1 0
bits do endereo de 8 a 15
12 endereo endereo
Bits do endereo de 0 a 7

Operao:
(PC) (PC) + 3
(SP) (SP) + 1
(SP) (PC7 - 0)
(SP) (SP) + 1

Osmar

78

(SP) (PC15 - 8)
(PC) endereo 0 a 15
Exemplo: LCALL 110F:

armazena o contedo do PC + 3 do programa corrente na pilha este


assume o endereo 110F executando o programa a contido.

ACALL endereo11
Efetua uma chamada do programa para uma sub rotina no endereo indicado no segundo byte da
instruo. A sub rotina deve ficar num bloco de 2KB de distancia da instruo seguinte a ACALL.
O endereo de 16 bits; formado pela ligao dos 5 bits de ordem mais alta do PC incrementado 2x
com os bits 7 a 5 do opcode e o segundo byte da instruo.
Bytes: 2
Ciclos: 2
11 endereo
Cdigo:
31 endereo
a10 a9 a8 0 0 0 0 1
51 endereo
a7 a6 a5 a4 a3 A2 a1 a0
71 endereo
Operao:
91 endereo
(PC) (PC) + 2
B1 endereo
(SP) (SP) + 1
D1 endereo
(SP) (PC7 - 0)
F1 endereo
(SP) (SP) + 1
(SP) (PC15 - 8)
(PC10 - 0) endereo da pgina.
Exemplo: ACALL 2015:

armazena o contedo do PC + 2 do programa corrente na pilha este


assume o endereo 110F executando o programa a contido.

Instruo de retorno:
Instrues RET e RETI
As instrues RET e RETI so instrues que realizam o retorno de chamadas de sub rotinas e
interrupes, respectivamente, possuindo a seguinte sintaxe:
RET
RETI
Estas instrues recuperam o endereo original contido no PC no momento da chamada da sub
rotina ou interrupo.

Osmar

79

RET
Retorno de uma sub rotina. Restaura o PCH e PCL sucessivamente da pilha, derementando o
apontador de pilha de 2. O programa continua sendo executado a partir do endereo resultante que,
geralmente, ser o da instruo imediatamente aps a localizao de uma instruo ACALL ou
LCALL.
Bytes: 1
Ciclos: 1
Cdigo:
0 0 1 0 0 0 1 0
22
Operao:
(PC 8-15) (SP)
(SP) (SP) - 1
(PC 0-7) (SP)
(SP) (SP) - 1
Exemplo: RET

ao termino de uma sub rotina o PC assume um valor igual a duas posies


de uma instruo e volta ao programa a partir deste ponto.

RETI
Retorno de uma interrupo. O endereo de retorno recuperado da pilha e transferido para o PC. A
diferena em relao instruo que a instruo RETI habilita novamente interrupes de menor
ou maior prioridade, anteriormente desabilitadas na ocorrncia de uma interrupo
Bytes: 1
Ciclos: 1
Cdigo:
0 0 1 1 0 0 1 0
32
Operao:
(PC 8-15) (SP)
(SP) (SP) - 1
(PC 0-7) (SP)
(SP) (SP) - 1
Exemplo: RET

Osmar

ao termino de uma sub rotina o PC assume um valor igual a duas posies


de uma instruo e volta ao programa a partir deste ponto e habilita

80

novamente interrupes de menor ou maior prioridade, anteriormente


desabilitadas na ocorrncia de uma interrupo.

Instruo NOP:
A instruo NOP aguarda o tempo de um ciclo de mquina da CPU sem efetuar nenhuma operao.
Possuindo a seguinte sintaxe:
NOP
NOP
Sem operao. A execuo do programa continua na prxima instruo, realizando nada. O PC
incrementado de 1 para realizar a prxima instruo. Um NOP s salta uma instruo. Se desejar
saltos maiores, deve-se utilizar tantos NOPs quantos forem as instrues que se deseja saltar, porem
se este salto for muito grande melhor utilizar uma sub rotina que o faa.
Bytes: 1
Ciclos: 1
Cdigo:
0 0 0 0 0 0 0 0
00
Operao:
(PC) (PC) + 1
Exemplo: NOP

no programa no realiza uma instruo e salta para a prxima.

Bits endereveis.
Operaes com bits ou operaes booleanas.
A RAM interna contem 128 bits endereveis separadamente alem de um espao reservado para
registros especiais que tambm ocupam 128 bits e podem ser operados utilizando um bit de cada
vez.
As instrues utilizadas para operar estes bits so as de: movimento, complemento, and, or, clear e
set.
Veja a representao a seguir mostra a estrutura interna da RAM do microporcessador 8031.
De 00 a 7F encontra-se os endereos dos bits endereveis.
De 80 a FF encontram-se a rea dos registros especiais, que so os registros das portas,
temporizadores/contadores, controle, da porta de comunicao serial, de interrupo, SP, PSW, A,
B, DPH e DPL.
H tambm um espao reservado para 4 bancos de registros de uso geral tendo-se 8 registros em
cada banco.

Osmar

81

REGISTROS DE FUNES ESPECIAIS

ESTRUTURA DA RAM INTERNA DO 8031


BYTE

FF

FF

REA DE DADOS
(Endereamento Indireto)
REGISTROS DE
FUNES ESPECIAIS
(Endereamento
Direto)

Ex.: MOV R0,#90


MOV@R0,#A5

80

Ex.: MOV 90h, #A5


80
7F

STACK
30
2F
2E
2D

78
70
68

Osmar

79
71
69

7A
72
6A

7B
73
6B

7C
74
6C

7D
75
6D

7E
76
6E

7F
77
6F

82

2C
2B
2A
29
28
27
26
25
24
23
22
21
20

60
58
50
48
40
38
30
28
20
18
10
08
00

61
59
51
49
41
39
31
29
21
19
11
09
01

62
5A
52
4A
42
3A
32
2A
22
1A
12
0A
02

63
5B
53
4B
43
3B
33
2B
23
1B
13
0B
03

64
5C
54
4C
44
3C
34
2C
24
1C
14
0C
04

65
5D
55
4D
45
3D
35
2D
25
1D
15
0D
05

66
5E
56
4E
46
3E
36
2E
26
1E
16
0E
06

67
5F
57
4F
47
3F
37
2F
27
1F
17
0F
07

1F

REA
BIT
ENDEREVEL

R7
BANCO 3 (11b)

18

R0

17

R7
BANCO 2 (10b)

10

R0

0F

R7

BANCO

BANCO 1 (01b)
08

R0

DE

07
06
05
04
03
02
01
00

R7
R6
R5

REGISTRADORES

BIT

R4

BANCO 0 (00b)

R3
R2
R1
R0
0

MODOS DE ENDEREAMENTO.
Endereamento Direto
A instruo especifica o endereo do operando que deve ser um nmero de 8 bits.
Somente dados dos primeiros 128 bytes da memria RAM interna e dos registros de funes
especiais so endereados neste modo.
Exemplo: MOV A, 25
Endereamento Indireto

move para o acumulador o contedo do endereo 25 da memria.


@

A instruo especifica um registrador, cujo contedo o endereo do operando.


Pode ser utilizado para enderear tanto a memria interna quanto a externa.
Se o endereo for de 8 bits, os registradores utilizados podem ser R0, R1 ou SP. Caso o endereo
seja de 16 bits, o registrador tem que ser o DPTR.

Osmar

83

Exemplo: MOV @R1,15


MOV @DPTR, A

coloca a constante 15 no byte endereado por R1.


copia o valor do acumulador para byte indicado pelo registro DPTR.

Endereamento via Registro


Os opcodes das instrues de acesso aos registradores R0 a R7 utilizam os seus 3 bits de maior
peso para especificar o registrador endereado.
O banco de registros utilizado ser aquele especificado nos bits RS0 RS1 do registro PSW.
Exemplo: MOV A, R3

copia o contedo do registrador R3 para o acumulador.

Endereamento Imediato ou Constante Imediata

O valor do operando faz parte da instruo ou seja, imediatamente especificado na instruo.


Exemplo:

MOV A,#25

move para o acumulador o contedo do endereo de memria 25.

Endereamento Indexado
O dado acessado na posio de memria especificada pela soma de um endereo de 16 bits
contido no registro PC ou DPTR, com o valor do registro A.
MOVC A,@A+DPTR
MOVC A,@A+PC

move para o acumulador o contedo de memria indicado pelo contedo


do DPTR mais o contedo do acumulador para o acumulador.
move para o acumulador o contedo de memria indicado pelo contedo
do PC mais o contedo do acumulador para o acumulador.

Osmar

84

Anda mungkin juga menyukai