Sunteți pe pagina 1din 18

RESUMO DAS PRINCIPAIS REGISTROS DO 8051

COM A LISTA DE INSTRUÇÕES

Disciplina de Microcontroladores
Prof. Valdir Noll

Adaptado da Apostila
“Microcontroladores - O 80C51BH da Família MCS51”
por, John Oersted Wisbeck, UFRGS, 2001.
REGISTRADORES ESPECIAIS DO 80C51BH

High 128 bytes of Internal RAM (SFR)


Low 128 bytes da RAM interna
F8h
7Fh
F0h B
E8h
E0h ACC
30h D8h
2Fh D0h PSW
Bank Bit-Addressable C8h
Select Space C0h
Bits in B8h IP
PSW 20h B0h P3
11 1Fh A8h IE
18h 4 Banks of A0h P2
10 17h
10h 8 registers 98h SCON
01 0Fh R0 - R7 90h P1 SBUF
08h
07h Valor do Reset 88h TCON TMOD TL0 TL1 TH0 TH1
00
00h Stack Pointer 80h P0 SP DPL DPH PCON
0 1 2 3 4 5 6 7
Acessivel por endereço direto e indiretp Special Function Registers SFR acessivelpor endereço direto

PSW - PROGRAM STATUS WORD - Registros no MCS-51- Endereçável por Bit


7 6 5 4 3 2 1 0

CY AC F0 RS1 RS0 0V X P D0H


Paridade do Acumulador
Flag Carry recebe o transporte
Do bit 1 da ALU Setado por hardware para1 se ele
contains
Tem um número ímpar de 1s,
Flag de Carry Auxiliar recebe
Senão é resetado a zero
O transporte de saída 1
De operações de adição Flag definido pelo ususário

Flag de uso geral Overflow flag, setado por


Operações aritméticas
Seleção de banco de registradores bit Seleção de banco de registradores bit 2
1

2
Registro de Controle do TMOD Timer/Counter Mode – Sem acesso a bits
MSB LSB

GATE C/T M1 M0 GATE C/T M1 M0 89H

TIMER 1 TIMER 0

GATE - Quando TRx é setado e Gate=1, Timer/Counter funcionará somente o pino INTx é alto.

Quando Gate=0, Timer/Counter funcionará somente enquanto TRx=1.

C/T – Seleciona Timer ou Counter. Se 0 então conta o clock interno .


Se 1 então a entrada de sinal será Tx (pinos P3.4 ou P3.5).
M1 - Mode Selector Bit.
M0 - Mode Selector Bit.

M1 M0
0 0 13 bit Timer/Counter.
0 1 16 bit Timer/Counter.
1 0 8 bit Auto Reload Timer/Counter.
1 1 Timer 0 é um Timer/Counter de 8 bits controlado pelo Timer 0.
Timer/Counter 1 não funciona

Registro TCON - Timer / Counter. Endereçável por Bit

MSB LSB

TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 88H

TFx - flag Timer x overflow. 1 por hardware quando ocorre um overflow.


0 por hardware quando o processador está executando uma rotina de interrupção.

TRx – Bit de ativação do Timer. 1/0 por softwatr para ON/OFF o Timer/Counter x

IEx – Interrupção Externa e flag de borda. 1 po hardware quando Interrupção Externa é detectada.
0 por hardware quando a interrupção é processada.
ITx – Bi tde contorle da Interrupção x tipo de interrupção. 1 / 0 por software para definir se a
interrupção será atendida por borba/nível

Registro IE - Interrupt Enable – Acesso por Bit


7 6 5 4 3 2 1 0

EA ES ET1 EX1 ET0 EX0 A8H

Habilita a interrupção externa 0


Desabilita todas as interrupções
Habilita a int Timer 0

Habilita a interrupção externa 1

Habilita a interface Serial Habilita a interrupção T1

3
Registrador IP - Interrupt Priority – Endereçável por Bit
7 6 5 4 3 2 1 0

PS PT1 PX1 PT0 PX0 B8H

Prioridade INT0

Prioridade Timer0

Prioridade INT1

Serial interface interrupt priority bit Prioridade Timer1

SCON - Serial Port Control Register - Bit Addressable


7 6 5 4 3 2 1 0

SM0 SM1 SM2 REN TB8 RB8 TI RI 98H

Mode Select Flag de interrupção na recepção


00 mode 0 Deve ser limpo por software
01 mode 1 Set by hardware when reception finish
10 mode 2 Exceto se SM2 =1
11 mode 3
Flag de interrupção na transimissão
Habilita comunicação entre multiprocessador Deve ser limpo por software
Nos modos 2 e 3 Mode 2 e 3 é o 9 bit.
No modo 1 se SM2=1 o flag RI não
No Modo 1 é o stop bit se SM2=0
Será 1 se um stop bit válido for recebido
No modo 0, RB8 não é usado
No modo 0, SM2 = 0
No mode 2 e 3 é o 9 bit
Habilita recepção do sinal
Que será transmitido

PCON - Power Control Register


7 6 5 4 3 2 1 0

SMOD GF1 GF2 PD IDL 87H


Baud Rate duplo bit de modo Idle. 1 para ativar o modo Idle
bit de modo Power Down. 1 para ativar o modo.
Flag de Uso geral
Flag de Uso geral

P0 date INSTR
P1
74HC373 EPROM
80C51BH Latch
ALE LE
ADDR
P2
P3

PSEN OE
EA

4
Fonte Endereço da rotina de atendimento

IE0 0003h

TF0 000Bh

IE1 0013h

TF1 001Bh

RI + TI 0023h

TABELA 0.1 Endereços do início das rotinas de atendimento de interrupção.

5
CONJUNTO DE INSTRUÇÕES DA FAMÍLIA MCS51

0.1. Revisão da Organização de Memória

O espaço de endereçamento de memória do 80C51BH é organizado em memória


de programa e de dados como apresentado na Figura Erro! Indicador não
definido..Erro! Indicador não definido..
A memória de programa pode ser interna ou externa (EPROM externa) ou ainda
uma composição das duas. No 80C51BH existe um espaço para 4 Kbytes de memória
de programa interna em ROM ou em EPROM na versão 87C51BH, o restante da
memória de programa precisa ser necessariamente externa. Caso se deseje ascessar os
primeiros 4Kbytes de memória de programa em uma memória externa é necessário
ligar-se o pino EA/ em GND.
A memória de dados está organizada em memória de dados interna (128 bytes +
registradores especiais) e memória de dados externa. Esses dois espaços de
endereçamento de memória acessam memórias fisicamente independentes, portanto os
primeiros 128 bytes da memória de dados externa não coincidem com os 128 bytes de
memória de dados interna. Instruções com menemônicos diferentes são utilizadas para
ascessar cada tipo de memória.
Os 128 bytes de memória de dados (RAM) interna estão organizados em 3 tipos
diferentes conforme mostra a Figura Erro! Indicador não definido..Erro! Indicador
não definido., sendo que algumas instruções foram projetadas para tratar mais
facilmente cada uma dessas regiões. Os 3 blocos são: um conjunto de 4 grupos de 8
registradores utilizados como operandos de várias instruções, um conjunto de 32
registradores cujos bits podem ser manipulados separadamente sem a necessidade de
mascaramento e o terceiro conjunto pode ser visto como memória RAM convencional.

0.2. Registradores de Funções Especiais

Os registradores especiais fazem parte da memória de dados interna contudo


seus conteúdos tem significado específico, ou seja, tais registradores são os
latches/buffers das portas de entrada e saída, os registradores de controle dos periféricos
como interface serial e contadores, ou ainda acumulador, registrador da máscara de
interrupção, palavra de status, etc. Dentre esses registradores, aqueles cujos endereços
terminam em 0h ou 8h também podem ter seus bits acessados independentemente,
facilitando as operações que os envolvem. Os endereços dos registradores especiais
podem ser vistos na Figura Erro! Indicador não definido..Erro! Indicador não
definido. e o significado de seu conteúdo é explicado nas seções que compõe o Capítulo
1. No Anexo A são apresentados todos os registradores especiais e seus endereços para
facilitar a consulta rápida da função de algum bit em especial.

0.3. Modos de Endereçamento

Todos os menbros da família MCS 51 executam o mesmo conjunto de


instruções, as quais são otimizadas para aplicações de controle em 8 bits. Esse conjunto
de instruções provê uma variedade de modos de endereçamento rápido para acessar a

6
memória RAM interna e para facilitar as operações com bytes em pequenas estruturas
de dados. Adicionalmente existem instruções que permitem tratar bits como um tipo
separado de dado, isso implica na manipulação direta de bits em uma parte da RAM
interna.
Os modos de endereçamento no conjunto de intruções da família MCS51 são:
Endereçamento Direto: no endereçamento direto o operando é o conteúdo de
uma posição de memória cujo endereço é de 8 bits e faz parte do corpo da instrução.
Somente dados na memória RAM interna e SFR podem ser diretamente endereçados.
Endereçamento Indireto: no endereçamento indireto a instrução especifica um
registrador cujo conteúdo é o endereço do operando. Tanto a memória interna ou
externa podem ser endereçadas indiretamente. Se o endereço do operando for de 8 bits
os registradores que podem ser especificados no corpo da instrução são R0, R1 ou o
Stack Pointer. Caso o endereço seja de 16 bits o registrador a ser utilizado é DPTR.
Instruções para Registradores R0 a R7: o banco de registradores R0 a R7
podem ser acessados por certas instruções as quais especificam o registrador com base
em 3 bits que fazem parte do opcode (código da instrução). Essas instruções são mais
eficientes visto que eliminam um byte de endereço. Quando a instrução é executada um
dos 8 registradores do banco ativo é endereçado. A seleção do banco pode ser feita
através dos bits de seleção de banco em PSW.
Instruções para Registradores Específicos: Algumas instruções trabalham
especificamente com certos registradores. Por exemplo algumas instruções operam
sempre com o Acumulador A, ou com o DPTR, etc, portanto nenhum byte é necessário
para endereçar o operando.
Endereçamento Imediato: O operando faz parte do corpo da instrução. O valor
do operando segue o opcode na memória de programa por exemplo.
Endereçamento Indexado: apenas a memória de programa pode ser acessada
com endereçamento indexado e portanto pode somente ser lida. Nesse tipo de acesso a
memória o endereço do operando é dado pela soma do conteúdo ou de DPTR ou PC
com o conteúdo do Acumulador. Dessa forma DPTR ou PC apontam para a base de
uma tabela de dados enquanto o Acumulador (8 bits) aponta para o elemento dentro da
tabela.

0.4. Simbologia Utilizada nas Instruções

No intuito de facilitar a apresentação do conjunto de instruções a simbologia


para o endereçamento é apresentada a seguir:

Rn registrador R0 a R7 do banco correntemente selecionado.


@Ri endereçamento indireto a uma posição de memória RAM interna Ri=R0
ou R1
#data endereçamento imediato, onde data é uma constante de 8 bits incluida no
corpo da instrução.
#data16 endereçamento imediato, onde data é uma constante de 16 bits incluida
no corpo da instrução.
direct endereçamento direto, ou seja, direct é o endereço de uma posição de
memória RAM interna.
bit endereçamento direto a bit na memória RAM interna ou SFR.
Exemplo: P3.2 ou 21h.3.
addr16 endereço com tamanho de 16 bits. Usado nas instruções LJMP e LCALL.

7
addr11 endereço com tamanho de 11 bits. A faixa de endereçamento é 1024
bytes para trás ou 1023 bytes para frente da posição atual do PC.
rel deslocamento de 128 bytes para trás ou 127 bytes para frente da posição
atual de PC. Usado por SJMP e todos os demais JMPs condicionais.

0.5. Instruções para Movimentação de Dados

Mnemonico Descrição Operação / Flags


Exemplo
MOV A, Rn Acumulador recebe o conteúdo do (A)← (Rn)
registrador
MOV A,R3

MOV A, direct Acumulador recebe um byte da (A)← (direct)


memória RAM interna cujo MOV A,40h
endereço é direct
MOV A, @Ri Acumulador recebe um dado da (A)←((Ri))
memória RAM interna endereçado
pelo conteúdo de R0 ou R1 MOV A,@R1

MOV A,#data Acumulador recebe data (A)←data


MOV A,#04h
MOV Rn,A Registrador recebe o conteúdo de (Rn)← (A)
A
MOV R5,A

MOV Rn, direct Registrador recebe um byte da (Rn)←(direct)


memória RAM interna cujo MOV R5,40h
endereço é direct

MOV Rn,#data Registrador recebe data (Rn)←data

MOV R6,#40h

MOV direct,A O conteúdo de A é copiado numa (direct)←(A)


posição da memória RAM interna MOV 45h, A
cujo endereço é direct

MOV direct,Rn O conteúdo de Rn é copiado numa (direct)←(Rn)


posição de memória RAM interna
cujo endereço é direct MOV 55h, R4

MOV direct1,direct2 O conteúdo da posição de (direct1)←(direct2)


memória RAM interna com MOV 45h,40h
endereço direct2 é copiado para
outra posição da memória interna
cujo endereço é direct1
MOV direct,@Ri Uma posição de memória RAM (direct)←((Ri))
interna, cujo endereço é direct, MOV 45h,@R1
recebe um dado endereçado pelo
conteúdo de R0 ou R1

8
MOV direct,#data Uma posição de memória RAM (direct)←#30h
interna, cujo endereço é direct,
recebe data. MOV 45h,40h

MOV @Ri,A O conteúdo do acumulador é ((Ri))←A


copiado para uma posição de MOV @R0, A
memória RAM interna cujo
endereço é o conteúdo de R0 ou
R1
MOV @Ri,#data data é copiado para uma posição ((Ri))←data
de memória RAM interna cujo MOV @R1,#40h
endereço é o conteúdo de R0 ou
R1
MOV DPTR,#data16 Carrega o registrador DPTR com o (DPTR)←data16
valor data16
MOV DPTR,#4010h

MOVC A,@A+DPTR O conteúdo do acumulador é (A)←((A)+(DPTR))


somado ao de DPTR formando o MOV A, @A+DPTR
endereço de um dado na memória
de programa sendo que tal dado é
carregado no acumulador
MOVC A,@A+PC O conteúdo do acumulador é (A)←((A)+(PC))
somado ao do PC formando o MOV A, @A+PC
endereço de um dado na memória
de programa sendo que tal dado é
carregado no acumulador
MOVX A,@DPTR O conteúdo de DPTR é o endereço (A)←((DPTR))
de um dado da RAM externa que é MOV A, @DPTR
carregado no acumulador

MOVX @Ri,A O conteúdo do acumulador é ((Ri))←(A)


copiado na posição de memória da
RAM externa cujo endereço é MOV @R1,A
dado pelo conteúdo de Ri

MOVX @DPTR,A O conteúdo do acumulador é ((DPTR))←(A)


copiado na posição de memória MOV @DPTR,A
RAM externa cujo endereço é
dado pelo conteúdo de DPTR
PUSH direct Coloca na pilha o conteúdo da (SP)←(SP)+1
posição de memória RAM interna ((SP))←(direct)
cujo endereço é direct. PUSH 40h

POP direct retira da pilha um dado e armazena (direct)←((SP))


na posição de memória RAM
interna cujo endereço é direct (SP)←(SP)-1

POP 40h

XCH A,Rn Troca o conteúdo do acumulador (A) (Rn)


com o conteúdo do registrador XCH A, R7
XCH A,direct Troca o conteúdo do acumulador (A) (direct)
com o conteúdo de uma posição XCH A, 50h
de memória RAM interna cujo
endereço é direct

9
XCH A,@Ri Troca o conteúdo do acumulador (A) ((Ri))
com o conteúdo de uma posição
de memória cujo endereço é o XCH A, @R1
conteúdo de Ri.

XCHD A, @Ri Troca os 4 bits menos (A)0-3 ((Ri))0-3


significativos do conteúdo de A XCH A, R7
com os 4 bits menos sginificativos
do conteúdo da posição de
memória cujo endereço é o
conteúdo de Ri.
Os outros bits ficam inalterados.

10
0.6. Instruções para Operações Aritméticas

Mnemonico Descrição Operação / Flags


Exemplo
ADD A, Rn Ao conteúdo do acumulador é (A)←(A)+(Rn) C, OV,
somado o conteúdo do registrador. AC
ADD A, R7
ADD A, direct Ao conteúdo do acumulador é (A)←(A)+(direct) C, OV,
somado o conteúdo de uma AC
posição de memória RAM interna ADD A, 40h
cujo endereço é direct

ADD A,@Ri Ao conteúdo de A é somado o (A)←(A)+((Ri)) C, OV,


conteúdo de uma posição de ADD A, @R1 AC
memória RAM interna cujo
endereço é o conteúdo de Ri
ADD A,#data Ao conteúdo de A é somado o (A)←(A)+data C, OV,
valor data AC
ADD A, #30h

ADDC A,Rn Ao conteúdo do acumulador são (A)←(A)+(Rn)+(C) C, OV,


somados o conteúdo do registrador AC
e o conteúdo do flag carry C. ADDC A, R7

ADDC A,direct Ao conteúdo do acumulador são (A)←(A)+(direct)+(C) C, OV,


somados o conteúdo de uma ADDC A, 40h AC
posição de memória RAM interna
cujo endereço é direct, e o
conteúdo do flag carry C
ADDC A,@Ri Ao conteúdo de A são somados o (A)←(A)+((Ri))+(C) C, OV,
conteúdo de uma posição de ADDC A, @R1 AC
memória RAM interna cujo
endereço é o conteúdo de Ri, e o
conteúdo do flag carry C
ADDCA,#data Ao conteúdo de A são somados o (A)←(A)+data C, OV,
valor data e o conteúdo do flag AC
carry ADD A, #30h

SUBB A, Rn Do conteúdo do acumulador são (A)←(A)-(Rn)-(C) C, OV,


subtraídos o conteúdo do AC
registrador e do flag carry SUBB A, R7
(borrow) C.

SUBB A, direct Do conteúdo do acumulador são (A)←(A)-(direct)-(C) C, OV,


subtraídos o conteúdo de uma SUBB A, 40h AC
posição de memória RAM interna
cujo endereço é direct e o flag
carry
SUBB A,@Ri Do conteúdo de A são subtraídos o (A)←(A)-((Ri))-(C) C, OV,
conteúdo de uma posição de SUBB A, @R1 AC
memória RAM interna cujo
endereço é o conteúdo de Ri e o
carry flag.

11
SUBB A,#data Do conteúdo de A são subtraídos o (A)←(A)-data-(C) C, OV,
valor data e o carry flag. AC
SUBB A, #30h

INC A Ao conteúdo do acumulador é (A)←(A)+1


somado 1. INC A
INC Rn Ao conteúdo do registrador é (Rn)←(Rn)+1
somado 1.
INC R3

INC direct Ao conteúdo da posição de (direct)←(direct)+1


memória RAM interna cujo INC 40h
endereço é direct é somado 1.
INC @Ri Ao conteúdo da posição de ((Ri))←((Ri))+1
memória RAM interna,cujo
endereço é o conteúdo de Ri, é INC @R1
somado 1.

DEC A Do conteúdo do acumulador é (A)←(A)-1


subtraído 1. DEC A
DEC Rn Do conteúdo do registrador é (Rn)←(Rn)-1
subtraído 1.
DEC R3

DEC direct Do conteúdo da posição de (direct)←(direct)-1


memória RAM interna cujo DEC 40h
endereço é direct é subtraído 1.

DEC @Ri Do conteúdo da posição de ((Ri))←((Ri))+1


memória RAM interna,cujo
endereço é o conteúdo de Ri, é DEC @R1
subtraído 1.

INC DPTR Ao conteúdo do registrador DPTR (DPTR)←(DPTR)+1


é somado 1. INC DPTR
MUL A, B O conteúdo do acumulador e do (A)←[(A)*(B)]0-7 C=0,
registrador B são multiplicados (B)←[(A)*(B)]8-15 OV
sem sinal. Da palavra de 16 bits MUL A, B
resultante os 8 bits LSB são
armazenados em A e os 8 bits
MSB são armazenados em B.

DIV A, B O conteúdo do acumulador é (A)←int[(A)/(B)] C=0,


dividido (sem sinal) pelo conteúdo (B)←resto[(A)/(B)] OV
do registrador B. Em A é DIV A, B
armazenado a parte inteira do
quociente da divisão e em B o
resto.
DA A O conteúdo de A é convertido para If [(A)3-0>9 or (AC)=1] C
um número decimal de dois then (A)3-0←(A)3-0+6
dígitos de quatro bits cada que são If [(A)7-4>9 or (C)=1]
armazenados em A then (A)7-4←(A)7-4+6

12
0.7. Instruções para Operações Lógicas

Mnemonico Descrição Operação / Flags

Exemplo
ANL A, Rn Lógica E entre o conteúdo do (A)←(A)^(Rn)
acumulador e o conteúdo do
registrador. ANL A, R7

ANL A, direct Lógica E entre o conteúdo do (A)←(A)^(direct)


acumulador e o conteúdo de uma ANL A, 40h
posição de memória RAM interna
cujo endereço é direct
ANL A,@Ri Lógica E entre o conteúdo do (A)←(A)^((Ri))
acumulador e uma posição de
memória RAM interna cujo ANL A, @R1
endereço é o conteúdo de Ri

ANL direct,A Lógica E entre o conteúdo de uma (direct)←(direct)^(A)


posição de memória RAM interna
cujo endereço é direct e o ANL 60h, A
conteúdo do acumulador

ANL direct,#data Lógica E entre o conteúdo de uma (direct)←(direct)^data


posição de memória RAM interna ANL 23h, #20h
cujo endereço é direct e data
OR A, Rn Lógica OU entre o conteúdo do (A)←(A)∨(Rn)
acumulador e o conteúdo do OR A, R7
registrador.

OR A, direct Lógica OU entre o conteúdo do (A)←(A)∨(direct)


acumulador e o conteúdo de uma
posição de memória RAM interna OR A, 40h
cujo endereço é direct

OR A,@Ri Lógica OU entre o conteúdo do (A)←(A)∨((Ri))


acumulador e uma posição de OR A, @R1
memória RAM interna cujo
endereço é o conteúdo de Ri
OR direct,A Lógica OU entre o conteúdo de (direct)←(direct)∨(A)
uma posição de memória RAM OR 30h, A
interna cujo endereço é direct e o
conteúdo do acumulador
OR direct,#data Lógica OU Exclusivo entre o (direct)←(direct)∨data
conteúdo de uma posição de OR 32h, #20h
memória RAM interna cujo
endereço é direct, e data

XRL A, Rn Lógica OU Exclusivo entre o (A)←(A)⊕(Rn)


conteúdo do acumulador e o
conteúdo do registrador. XRL A, R7

13
XRL A, direct Lógica OU Exclusivo entre o (A)←(A)⊕(direct)
conteúdo do acumulador e o XRL A, 40h
conteúdo de uma posição de
memória RAM interna cujo
endereço é direct
XRL A,@Ri Lógica OU Exclusivo entre o (A)←(A)⊕((Ri))
conteúdo do acumulador e uma XRL A, @R1
posição de memória RAM interna
cujo endereço é o conteúdo de Ri
XRL direct,A Lógica OU Exclusivo entre o (direct)←(direct)⊕(A)
conteúdo de uma posição de XRL 90h, A
memória RAM interna cujo
endereço é direct e o conteúdo do
acumulador
XRL direct,#data Lógica OU Exclusivo entre o (direct)←(direct)⊕data
conteúdo de uma posição de XRL 73h, #20h
memória RAM interna cujo
endereço é direct e data
CLR A Zera o conteúdo do acumulador (A)←0

CLR A

CPL A complementa o conteúdo do (A)←(A)/


acumulador

RL A rotaciona o conteúdo do (An+1)←(An)


acumulador para a esquerda. O bit
7 é carreagado no bit 0. (A0)←(A7)

RL A

RLC A rotaciona o conteúdo do (An+1)←(An) C


acumulador para a esquerda (A0)←(C) (C)←(A7)
através do carry RLC A

RR A rotaciona o conteúdo do (An)←(An+1)


acumulador para a direita
(A7)←(A0)

RR A

RRC A rotaciona o conteúdo do (An)←(An+1) C


acumulador para a direita através (A7)←(C) (C)←(A0)
do carry RRC A
SWAP A Troca os 4 bits menos (A3-0) (A7-4)
significativos do conteúdo de A SWAP A
com o 4 bits mais significativos

14
0.8. Instruções para Manipulação de Bits

Mnemonico Descrição Operação / Flags

Exemplo

CLR C Zera o flag carry em PSW. (C)←0 C=0


CLR C
CLR bit Zera o bit em uma posição de (bit)←0
memória RAM interna com bits
endereçáveis. CLR 29.5

CLR P3.2

SETB C Acerta em 1o flag carry em PSW. (C)←1


SETB C
SETB bit Acerta em 1o bit em uma posição (bit)←1
de memória RAM interna com bits
endereçáveis. SETB 29.5

SETB P3.2

CPL C Complementa o flag carry em (C)←(C)/ C


PSW.
CPL C

CPL bit Complementa o bit em uma (bit)←(bit)/


posição de memória RAM interna CPL 29.5
com bits endereçaáveis. CPL P3.2
ANL C,bit Lógica E entre o flag carry e o bit (C)←(C)^(bit) C
em uma posição de memória RAM ANL C, 29.5
interna com bits endereçaveis.

ANL C, /bit Lógica E entre o flag carry e o (C)←(C)^[(bit)/] C


complemento do bit em uma
posição de memória RAM interna ANL C, /29.5
com bits endereçáveis.

ORL C,bit Lógica OU entre o flag carry e o (C)←(C)∨(bit) C


bit em uma posição de memória ORL C, 29.5
RAM interna com bits
endereçáveis.
ORL C, /bit Lógica OU entre o flag carry e o (C)←(C)∨[(bit)/] C
complemento do bit em uma ORL C, /29.5
posição de memória RAM interna
com bits endereçáveis.
MOV C,bit Acerta o flag carry com o valor do (C)←(bit) C
bit de uma posição de memória MOV C, 29.5
RAM interna com bits MOV C, P3.5
endereçáveis.

15
MOV bit,C Acerta o bit de uma posição de (bit)←(C)
memória RAM interna com bits
endereçáveis com o flag carry MOV 29.5,C

MOV P3.5,C

JC rel Desvia se o flag carry estiver em 1 If (C)=1 then


(PC)←(PC)+rel
JNC rel Desvia se o flag carry estiver em 0 If (C)=0 then

(PC)←(PC)+rel

JB bit,rel Desvia se o bit estiver em 1 If (bit)=1 then

(PC)←(PC)+rel
JNB bit,rel Desvia se o bit estiver em 0 If (bit)=0 then

(PC)←(PC)+rel

JBC bit,rel Desvia se o bit estiver em 1 e If (bit)=1 then


automaticamente zera o bit
(PC)←(PC)+rel

(bit)←0

0.9. Instruções para Desvio

Mnemonico Descrição Operação / Flags

Exemplo

ACALL addr11 Desvia para uma subrotina. Essa (PC)←(PC)+2


subrotina deve estar no máximo a (SP)←(SP)+1
1Kbytes de distância do ponto de ((SP))←(PC7-0)
chamada (SP)←(SP)+1
((SP))←(PC15-8)
(PC10-0)←addr11
LCALL addr16 Desvia para uma subrotina. (PC15-0)←addr16

RET Retorna de uma subrotina. (PC15-8)←((SP))

(SP)←(SP)-1

(PC10-0)←((SP))

(SP)←(Sp)-1

16
RETI Retorna de uma subrotina de (PC15-8)←((SP))
atendimento de interrupção.
(SP)←(SP)-1

(PC10-0)←((SP))

(SP)←(Sp)-1

AJMP addr11 Desvia para uma rotina. Essa (PC)←(PC)+2


rotina deve estar no máximo a (PC10-0)←addr11
1Kbytes de distância do ponto de
chamada
LJMP addr16 Desvia para uma rotina. (PC15-0)←addr16

SJMP rel Desvia para uma rotina. Essa (PC)←(PC)+2


rotina deve estar no máximo a 128
bytes de distância do ponto de (PC)←(PC)+rel
chamada

JMP @A + DPTR Desvia para uma rotina cujo (PC)←(PC)+(A)


endereço é dado pela soma do
conteúdo de DPTR com o
conteúdo A.
JZ rel Desvia para a rotina se o if (A)=0 then
acumulador for zero.
(PC)←(PC)+rel

JNZ rel Desvia para a rotina se o if (A)<>0 then


acumulador for diferente de zero. (PC)←(PC)+rel

CJNE A,direct,rel Desvia para a rotina se o conteúdo if (A)<>(direct) then C


de A e direct forem diferentes.
(PC)←(PC)+rel

CJNE A,#data,rel Desvia para a rotina se o conteúdo if (A)<>data then C


de A não for igual a data. (PC)←(PC)+rel

CJNE Rn,@Ri,#data,rel Desvia para a rotina se o conteúdo if (Rn)<>((Ri) then C


de Rn for diferente do conteúdo da (PC)←(PC)+rel
posição de memória cujo endereço
é o conteúto é R1 ou R0.
CJNE Rn,#data,rel Desvia para a rotina se o conteúdo if (Rn)<>data then C
de Rn e data forem diferentes.
(PC)←(PC)+rel

DJNZ Rn,rel Decrementa o registrador e desvia (Rn)←(Rn)-1


para a rotina se o acumulador for if (Rn)<>0 then
diferente de zero. (PC)←(PC)+rel

17
DJNZ direct,rel Decrementa o conteúdo da posição (direct)←(direct)-1
de memória dada por direct. Se o if (direct)<>0 then
resultado não for nulo ocorre um (PC)←(PC)+rel
desvio caso contrário a instrução
seguinte é executada.
NOP Não executa nada.

18

S-ar putea să vă placă și