Você está na página 1de 34

MICROCONTROLADOR 8051

Introdução

Um sistema microprocessado básico é mostrado na figura abaixo:

Organização básica de um sistema microprocessado.

• Unidade de Entrada – responsável pela obtenção de informações e dados


externos;
• Unidade Lógica e Aritmética (ULA) e Unidade de Controle – essas unidades
juntas são responsáveis pela capacidade de processamento e controle das
informações;
• Unidade de Memória – auxiliam no processamento e armazenamento de
informações;
• Unidade de Saída – responsável pela transferência de dados e informações para
o mundo exterior.

Prof. Sidney José Montebeller - FACENS 1


Diagrama em Blocos de um Sistema Genérico com Microprocessador

Sistema genérico com microprocessador.

Conceito de Barramento

O microprocessador tem três barramentos que conduzem todas as


informações e sinais necessários à operação do sistema. Estes barramentos
conectam o microprocessador (CPU) a cada um dos elementos de memória e de
E/S.

Prof. Sidney José Montebeller - FACENS 2


Interconexão entre os elementos de um sistema microprocessado através de
barramentos.

Função principal do barramento de controle e conceito de estado de alta impedância


(tri-state).

Os sinais de controle são gerados pelo microprocessador ( RD , WR , etc) e


pelo circuito de seleção de endereços (chip select – CS ).

Prof. Sidney José Montebeller - FACENS 3


Circuito Gerador de Sinais de Controle ( CS ) ou Lógica de Seleção de
Endereços

A15 A14 Memória Liberada (CS/ = 0)


0 0 Memória 1
0 1 Memória 2
1 0 Memória 3
1 1 Memória 4

Memória selecionada através da lógica de seleção de endereços.

Lógica de seleção de endereços (mapeamento de memória).

Prof. Sidney José Montebeller - FACENS 4


O Microcontrolador 8051 – Diagrama de Blocos

O diagrama de blocos do microcontrolador 8051 é mostrado na figura abaixo:

Diagrama em blocos do microcontrolador 8051.

Principais Características do Microcontrolador 8051

Entre as características do microcontrolador 8051 estão:

• CPU de 8 bits otimizada para aplicações em controle;


• 32 linhas de E/S bidirecionais e individualmente endereçáveis;
• 128 bytes de RAM interna destinada a dados;
• 2 temporizadores/contadores de 16 bits;

Prof. Sidney José Montebeller - FACENS 5


• UART full duplex (canal serial);
• 5 estruturas de interrupção com 2 níveis de prioridade;
• Clock interno;
• 4 Kbytes de memória de programa interna;
• 64 Kbytes de memória de programa endereçáveis;
• 64 Kbytes de memória de dados endereçáveis;

Microcon- RAM ROM Linhas Interrupções Versão Versão sem


Periféricos
troladores Interna Interna I/O Externas EPROM ROM
8048AH 64 1K 27 Timer 1 8748H 8035AHL
8049AH 128 2K 27 Timer 1 8749H 8039AHL
8050AH 256 4K 27 Timer 1 - 8040AHL
8051 128 4K 32 2 Timers 2 8751 8031
Canal Serial
8052AH 256 8K 32 3 Timers 2 8751H 8032AH
Canal Serial
80C51BH 128 4K 32 2 Timers 2 87C51 80C31BH
Canal Serial
Comparação entre microcontroladores.

Descrição dos Pinos

Número dos pinos Nome Descrição


Estes pinos são endereçados como porta bidirecional de 8 bits,
podendo ter seus pinos individualmente endereçaveis. Podem
1a8 P1.0 – P1.7
alimentar ou drenar uma carga TTL, ou várias cargas MOS
diretamente sem pull-up externos.
Usado para resetar o sistema pela aplicação de um nível lógico
9 RST/VPD
1, durante 2 ou mais ciclos de máquina.
Porta de I/O bidirecional de 8 bits, com resistores de pull-up
10 a 17 P3.0 – P3.7
interno.
Saída do amplificador inversor do oscilador e entrada para o
18 XTAL2
gerador de clock interno. Se for usado clock externo, serve

Prof. Sidney José Montebeller - FACENS 6


como entrada para o mesmo.
Entrada do amplificador inversor do oscilador, deve ser
19 XTAL1
conectado a terra se usarmos clock externo.
20 Vss Conexão de terra.
P2.0 – P2.7 Porta bidirecional de 8 bits, usado como saída ou como parte
21 a 28
(A8 – A15) mais significativa do endereço na expansão de memória.
Saída para habilitação do programa externo. Quando o sistema
vai buscar instruções ou operando na memória externa, este
29 PSEN/
pino vai a nível zero. PSEN/ não é ativado (permanece em
ALTO) durante a busca na memória interna de programa.
Saída habilitadora do latch de endereços. Serve para separar a
30 ALE parte menos signifivativa do endereço que está multiplexada
com os dados, no caso de usarmos memória externa.
Entrada de seleção de memória de programa. Quando em
BAIXO, a CPU trabalha apenas com a memória de programa
31 EA/
externa. Quando em ALTO, a CPU executa instruções da
memória de programa interna.
Porta de 8 bits bidirecional com dreno aberto. Durante
P0.7 – P0.0 operações com memória externa, fornece multiplexadas à parte
32 a 39
(AD7 – AD0) menos significativa de endereços e dados, ativando pull-ups
internos.
40 Vcc Ligação de 5 V para operação normal.

Descrição dos pinos do 8051.

Receptor da porta serial assíncrona ou entrada e saída de


P3.0 RXD/data
dados síncronos (expansão de I/O pela porta serial)
Saída de transmissão da porta assíncrona ou saída de clock
P3.1 TXD/clock para os registradores de deslocamento externos (expansão de
I/O pela porta serial)
Interrupção externa número 0, ou bit de controle para o
P3.2 INT0\
timer/counter 0
Interrupção externa número 1, ou bit de controle para o
P3.3 INT1\
timer/counter 1
P3.4 T0 Entrada externa para o timer/counter 0
P3.5 T1 Entrada externa para o timer/counter 1
P3.6 WR\ Strobe (sinalizador) de escrita na memória de dados externa
P3.7 RD\ Strobe (sinalizador) de leitura na memória de dados externa

Funções Especiais dos Pinos da Porta 3

Organização de Memória no 8051

Memória de Programa:

A memória de programa é separada da memória de dados. O


microcontrolador pode acessar 64 Kbytes de memória de programa. Se o pino EA
estiver em ALTO, os primeiros 4 Kbytes são acessados internamente e o restante
externamente. Se o pino EA estiver em BAIXO, os 64 Kbytes são acessados
externamente.
O dispositivo emite o sinal PSEN (Program Store Enable) para ler a memória
de programa externa.

Prof. Sidney José Montebeller - FACENS 7


Memória de programa.

Os 64 Kbytes de memória de dados externa são acessados pelo dispositivo


através dos sinais RD e WR .

Memória de Dados:

A memória de dados corresponde às RAMs internas e externas.

Memória RAM interna e externa.

A memória interna vai do endereço 00H até o endereço FFH e é dividida


conforme a figura abaixo:

Prof. Sidney José Montebeller - FACENS 8


Mapa da RAM Interna.

Os 4 bancos de registros (endereços de 00H a 1FH da RAM interna) são


constituídos de 8 registros cada (R0 a R7). A área de bytes endereçáveis bit a bit vai
de 20H a 2FH da RAM interna:

Prof. Sidney José Montebeller - FACENS 9


Endereços
Endereços individuais dos bits
dos bytes
7F 7E 7D 7C 7B 7A 79 78 2FH
77 76 75 74 73 72 71 70 2EH
6F 6E 6D 6C 6B 6A 69 68 2DH
67 66 65 64 63 62 61 60 2CH
5F 5E 5D 5C 5B 5A 59 58 2BH
57 56 55 54 53 52 51 50 2AH
4F 4E 4D 4C 4B 4A 49 48 29H
47 46 45 44 43 42 41 40 28H
3F 3E 3D 3C 3B 3A 39 38 27H
37 36 35 34 33 32 31 30 26H
2F 2E 2D 2C 2B 2A 29 28 25H
27 26 25 24 23 22 21 20 24H
1F 1E 1D 1C 1B 1A 19 18 23H
17 16 15 14 13 12 11 10 22H
0F 0E 0D 0C 0B 0A 09 08 21H
07 06 05 04 03 02 01 00 20H

Área de bytes endereçáveis bit a bit. Os 80 bytes endereçáveis byte a byte


vão do endereço 30H ao endereço 7FH da RAM interna.

Registros de Funções Especiais (SFR):

Estão localizados do endereço 80H ao endereço FFH da RAM interna:

Registro Endereço Função


P0 80H Port0 – I/O
P1 90H Port1 – I/O
P2 A0H Port2 – I/O
P3 B0H Port3 – I/O
SP 81H Indica último endereço de armazenagem na pilha
TH1 8DH Byte mais significativo do temporizador/contador T1
TL1 8BH Byte menos significativo do temporizador/contador T1
TH0 8CH Byte mais significativo do temporizador/contador T0
TL0 8AH Byte menos significativo do temporizador/contador T0
TCON 88H Contém o Controle e Modo de Operação dos
TMOD 89H temporizadores/contadores
PCON 87H Usado para Controle de Potência
SCON 98H Contém dados para programação do canal serial
SBUF 99H Contém o dado recebido ou a ser transmitido
IE A8H Indica quais interrupções serão habilitadas ou desabilitadas
IP B8H Contém a indicação da prioridade de cada interrupção
PSW D0H Sinaliza eventos na ULA e indica o Banco de Registros
ACC E0H Registros de uso geral
B F0H Registros de uso geral
DPH 83H Juntos formam o DPTR, usado para endereçamento indireto

Prof. Sidney José Montebeller - FACENS 10


de leitura de constantes na ROM, acessar a RAM externa e
DPL 82H
para desvio para EPROM de até 64K
Registros de Funções Especiais (SFR).

Reset

O reset é uma operação que causa reinicialização do sistema. Isso pode ser
feito quando o pino 9 (RST) permanecer em nível alto por um determinado período.
Quando o reset é ativado, a CPU executa as seguintes funções:
- o PC (Program Counter), o acumulador (A), o registro B, os flags, o DPTR e
todos os registros dos temporizadores/contadores são ZERADOS;
- no SP (Stack Pointer) é colocado o valor 07;
- as portas P0 a P3 terão o valor FFH. Isso deve ser levado em consideração no
projeto do hardware, para evitar acionamentos indesejáveis de algum periférico
externo;
- o SBUF (Buffer Serial) estará com conteúdo indeterminado e o registro de
controle da porta serial (SCON) será zerado;
- o registro PCON terá apenas seu bit mais significativo zerado;
- os registros de controle de interrupção (IE e IP) conterão o valor binário
XXX00000, onde X = irrelevante.

No reset forçado, a RAM interna não é afetada.

Ciclo de Máquina

Um ciclo de máquina consiste de uma sequência de 6 estados (S1 a S6).


Cada estado toma 2 períodos de clock e, portanto, um ciclo de máquina toma 12
períodos de clock ou 1 µs sob uma frequência de 12 MHz.
A figura abaixo mostra a sequência de busca/execução para alguns tipos de
instruções. Normalmente dois ciclos de busca são executados em cada ciclo de
máquina mesmo que a instrução sendo executada não o requer, caso em que o byte
buscado é ignorado e o PC não é incrementado.

Prof. Sidney José Montebeller - FACENS 11


Sequência de busca/execução de instruções no 8051.

Instruções de um ciclo começam em S1, em S4 é gerado uma segunda busca


e, no fim de S6, a instrução está completa. O ciclo busca/execução é o mesmo se a
Memória de Programas é externa ou interna. A figura 10 mostra os sinais e as
temporizações envolvidas quando a Memória de Programas é externa.
Nesse caso, o sinal PSEN é ativo duas vezes por ciclo de máquina. Se um
acesso à Memória de Dados externa ocorre, dois PSEN são pulados porque o bus
de endereços e o bus de dados estão sendo utilizados para acesso à Memória de
Dados. Note que um ciclo de Memória de Dados externa toma duas vezes mais
tempo que um ciclo de Memória de Programas.
A figura a seguir mostra a dinâmica dos endereços sendo enviados às Portas
0 e 2 e dos sinais ALE e PSEN . O sinal ALE é ativado indiferentemente se a CPU
está executando a partir da Memória de Programas externa ou interna, podendo ser
utilizado como uma saída de clock.

Prof. Sidney José Montebeller - FACENS 12


Ciclo de Execução em Memória de Programas Externo.

Interrupções

O microcontrolador 8051 possui as seguintes fontes de interrupção: 2


interrupções externas, 2 interrupções de temporizadores e uma interrupção pela
porta serial.

Interrupt Enable (IE) – Cada uma das fontes de interrupção pode ser habilitada ou
desabilitada setando ou limpando um bit do registrador IE localizado na região SFR.
Este registrador também contém um bit global que pode desabilitar todas as
interrupções de uma só vez. A figura abaixo mostra o registrador IE

Prof. Sidney José Montebeller - FACENS 13


O Registrador Interrupt Enable.

Prioridade de Interrupções

Cada fonte de interrupção pode ser programada para um de dois níveis de


interrupção setando ou limpando um bit do registrador IP (Interrupt Priority)
localizado no espaço SFR e mostrado na figura abaixo.

Prof. Sidney José Montebeller - FACENS 14


O Registrador Interrupt Priority

Se requisições de interrupção de mesma prioridade são recebidas


simultaneamente, uma seqüência de pooling é ativada para determinar qual
interrupção será atendida.
Todos os flags de interrupção são carregados no sistema de controle de
interrupção durante o Estado 5 de todo ciclo de máquina. A análise desses flags é
feita no ciclo seguinte. Se um flag para uma interrupção habilitada é encontrado
setado, o sistema de interrupção gera um LCALL para a correta localização na
Memória de Programas a menos que uma situação de bloqueio de verifique (ex.
interrupção de igual ou maior prioridade sendo atendida). Com LCALL sendo
executado, o conteúdo de PC é salvo na pilha e este registrador recebe o valor do
endereço inicial da rotina de interrupção.
Somente PC é automaticamente salvo na pilha. Isso permite ao programador
decidir quanto tempo deve ser gasto salvando outros registradores. Como resultado,
tem-se uma melhoria no tempo de resposta a uma interrupção.

Temporizadores e Contadores

O microcontrolador 8051 conta com 2 temporizadores/contadores de 16 bits


para uso geral. A configuração dos temporizadores/contadores 0 e 1 é feita no
registrador TMOD localizado na região SFR no endereço 89H. Se o bit C/T desse
registrador é setado, o temporizador/registrador atua como contador e, se zerado,
atua como temporizador.
Quando na função temporizador, o registrador de tempo, localizado na região
SFR é incrementado a cada ciclo de máquina. Logo, podemos pensá-lo como um
Prof. Sidney José Montebeller - FACENS 15
contador de ciclos de máquina. Quando na função contador, o registrador é
incrementado a cada transição 1 para 0 do correspondente sinal externo T0 ou T1
(pino 4 ou pino 5 respectivamente da porta 3).
Cada temporizador/contador consiste em 2 registradores de 8 bits que podem
ser configurados em um dos 4 possíveis modos:

- Modo 0: o registro é configurado como um registrador de 13 bits. Os bits TF0


(8DH) e TF1 (8FH) são utilizados como flags de overflow associadas às
interrupções INT0 e INT1 respectivamente aos temporizadores/contadores 0 e 1.

- Modo 1: semelhante ao modo 0 com a diferença de que o registrador atua em 16


bits.

- Modo 2: o registrador é configurado em 8 bits com recarga automática, isto é,


quando numa situação de overflow de TLO (8 bits menos significativos), tal
registrador é recarregado com o conteúdo de TLH (8 bits mais significativos) cujo
conteúdo permanece constante.

- Modo 3: temporizador/contador 1 é desligado enquanto o temporizador/contador


0 é utilizado como dois registradores de 8 bits. A interrupção associada a TL0 é
INT0 enquanto a interrupção associada a TH0 é INT1.

Interface Serial

O 8051 possui uma porta serial full-duplex, o significa que ela pode enviar e
transmitir dados simultaneamente. Essa interface pode operar em 4 modos:
- Modo 0: (modo síncrono) 8 bits do dado serial entram e saem por RxD0. TxD0
tem como saída o sinal de clock deslocado em fase. A velocidade de transmissão
é de 1/12 clock.

- Modo 1: (modo assíncrono) 10 bits são transmitidos (TxD0) ou recebidos (RxD0):


8 bits de dados, 1 stop bit e 1 start bit. A velocidade de transmissão é variável.

- Modo 2: (modo assíncrono) 11 bits são transmitidos (TxD0) ou recebidos (RxD0):


1 start bit, 8 bits de dados, 1 bit programável pelo usuário (por exemplo: bit de
paridade) e um stop bit. A velocidade de transmissão pode ser programável para
1/32 ou 1/64 clock.

- Modo 3: (modo assíncrono) exatamente como no Modo 2, porém, a velocidade


de transmissão é variável.

Em cada um dos modos, a transmissão é iniciada quando da execução de


uma instrução cujo registrador destino é o registrador SBUF (endereço 99H, região
SFR). A recepção é iniciada no modo 0 pela condição RI = 0 (endereço 98H) e
REN0 = 1 (endereço 9CH), ambos localizados no registrador S0CON (endereço
98H, região SFR). Em outros modos, a recepção é iniciada quando REN0 = 1.

Prof. Sidney José Montebeller - FACENS 16


Program Status Word (PSW)

Importante registrador que contém bits de status da CPU. Localiza-se no


endereço D0H da RAM interna. A figura abaixo mostra esse registro:

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


CY AC F0 RS1 RS0 OV - P

Registrador PSW (Program Status Word)

CY : Flag Carry;
AC : Flag Carry Auxiliar;
F0 : Flag 0 definido pelo usuário;
RS1 : Bit 1 para seleção de Banco de Registradores;
RS0 : Bit 0 para seleção de Banco de Registradores;
OV : Flag de Overflow;
-: Flag definido pelo usuário;
P: Flag de Paridade. É setado/zerado pelo hardware a cada ciclo de instrução
para indicar um número ímpar/par de bits “1” no acumulador.

RS1 RS0 Banco de Registradores Endereço


0 0 0 00H-07H
0 1 1 08H-0FH
1 0 2 10H-17H
1 1 3 18H-1FH

Seleção de Banco de Registradores através de RS1 e RS0.

Modos de Endereçamento

Para acessar um dado, as instruções do microcontrolador 8051 contam com


seis tipos de endereçamentos:

Modo Imediato: nesse modo, o endereço do operando é especificado por um


campo de 8 bits na instrução. Somente RAM de dados interna e a região SFR
podem ser diretamente endereçadas.
Ex: MOV A, 25H; A ← (25H)
- Move conteúdo da posição de memória 25H (RAM) para o acumulador (A).

Modo Registrador: a instrução a ser executada contém o nome de um dos


registradores de R0 a R7 que será acessado. Um dos quatro bancos de registros é
selecionado (RS1 e RS0, no registro PSW) em tempo de execução do programa.
Assim podemos identificar qual registro (R0 a R7) e de qual banco de registros
estamos acessando.
Ex: MOV A, R1; A ← R1
- Move o conteúdo de R1 para o acumulador (A).

Modo Indireto: a instrução especifica um registrador que contém o endereço do


operando. Ambas externa e interna RAM’s podem ser indiretamente acessadas. Se
tal endereço possui 8 bits, seu valor é armazenado em R0 ou R1, do respectivo
Prof. Sidney José Montebeller - FACENS 17
banco selecionado, ou no Stack Pointer. Por outro lado, se tal endereço possui 16
bits, seu valor é armazenado no registrador DPTR.
Ex: MOV @R1, 15H; (R1) ← (15H)
- Move conteúdo da posição de memória 15H (RAM) para a posição de memória
endereçada por R1.

Modo Específico a Registro: o registro a ser acessado faz parte do código de


operação da instrução.
Ex: DA A;
- Ajuste decimal do acumulador.

Modo Constante Imediata: quando uma constante faz parte da instrução.


Ex: MOV A, #20H; A ← 20H
- Move o valor 20H para o acumulador.

Modo Indexado: somente a Memória de Programas, cuja única operação é leitura,


pode ser acessada por esse modo. É usado para fazer leituras em tabelas na
Memória de Programas. Um registrador de 16 bits (DPTR ou PC) aponta para o
início da tabela enquanto o Acumulador é ajustado para a n-ésima posição da
mesma. O endereço de uma entrada para a tabela é formado pela soma entre o
Acumulador e o registrador de 16 bits.
Ex: JMP @A + DPTR; PC ← A + DPTR
- Desvia para o endereço obtido da soma do acumulador com o DPTR.

Modo Desvio Indexado: usado em instruções de desvio condicionais, onde estas


instruções somam ao PC já ajustado o dado de 8 bits presente no final da instrução.
Ex: JNZ 05H; PC ← PC + 05H
- Desvia se acumulador não for zero.

Prof. Sidney José Montebeller - FACENS 18


Conjunto de Instruções do 8051

O conjunto de instruções é dividido em 5 grupos:


- Transferência de Dados;
- Operações Aritméticas;
- Desvio;
- Operações Lógicas;
- Flag/Bit.

Generalidades

- @ indica Indireto (endereçado pelo valor de);


- #N indica valor Constante de 8 bits;
- #NN indica valor Constante de 16 bits;
- H indica que o valor está na base Hexadecimal;
- B indica que o valor está na base Binária;
- Rn indica registro R0 a R7;
- Ri indica registro R0 ou R1;
- N indica um endereço de memória de 8 bits (primeiras 256 posições internas ou
externas).

Prof. Sidney José Montebeller - FACENS 19


Instruções de Transferência de Dados
COND. DE
Nº DE Nº DE
MNEMÔNICO DESCRIÇÃO OPERAÇÃO FLAGS
BYTES ESTADOS
CY AC OV
Move o registro Rn para o
MOV A, Rn A ← Rn 1 12
Acumulador
Move o conteúdo da memória
MOV A, N A ← (N) 2 12
N para o Acumulador
Move o conteúdo da RAM
MOV A, @Ri endereçada por Ri para o A ← (Ri) 1 12
Acumulador
Move a constante N para o
MOV A, #N A←N 2 12
Acumulador
Move o Acumulador para o
MOV Rn, A Rn ← A 1 12
registro Rn
Move o conteúdo da memória
MOV Rn, N Rn ← (N) 2 24
N para o registro Rn
Move a constante N para o
MOV Rn, #N Rn ← N 2 12
registro Rn
Move o Acumulador para a
MOV N, A (N) ← A 2 12
memória N
Move o registro Rn para a
MOV N, Rn (N) ← (Rn) 2 24
memória N
Move o conteúdo da memória
MOV N1, N2 (N1) ← (N2) 3 24
N2 para a memória N1
Move RAM endereçada por Ri
MOV N, @Ri (N) ← (Ri) 2 24
para a memória N
Move a constante N para o
MOV N, #N (N) ← N 3 24
conteúdo da memória N
Move o Acumulador para a
MOV @Ri, A (Ri) ← A 1 12
RAM endereçada por Ri
Move o conteúdo da memória
MOV @Ri, N N para a RAM endereçada (Ri) ← (N) 2 24
por Ri
Move a constante N para a
MOV @RI, #N (Ri) ← N 2 12
RAM endereçada por Ri
MOV DPTR, Move constante NN para o
DPTR ← NN 3 24
#NN DPTR
Soma A + DPTR obtendo um
endereço de 16 bits na
MOVC A, @A A ← (A +
memória de programa. 1 24
+ DPTR DPTR)
Carrega o acumulador com o
conteúdo desta memória
MOVC A, @A Idem ao anterior, mas soma A
A ← (A + PC) 1 24
+ PC + PC
Move RAM externa
MOVX A, @Ri endereçada por Ri (endereço A ← (Ri) 1 24
8 bits) para o Acumulador
Move RAM externa
MOVX A, endereçada por DPTR
A ← (DPTR) 1 24
@DPTR (endereço 16 bits) para o
Acumulador
Move Acumulador para a
MOVX @Ri, A RAM externa endereçada por (Ri) ← A 1 24
Ri (endereço 8 bits)

Prof. Sidney José Montebeller - FACENS 20


Instruções de Transferência de Dados
COND. DE
Nº DE Nº DE
MNEMÔNICO DESCRIÇÃO OPERAÇÃO FLAGS
BYTES ESTADOS
CY AC OV
Move Acumulador para a
MOVX
RAM externa endereçada por (DPTR) ← A 1 24
@DPTR, A
DPTR (endereço 16 bits)
Incrementa o SP e então SP ← SP + 1
PUSH N 2 24
coloca a memória no Stack (SP) ← N
Retira dado do Stack e coloca
N ← (SP)
POP N na memória, depois 2 24
decrementa SP SP ← SP - 1
Troca entre si o conteúdo do
XCH A, Rn A ↔ Rn 1 12
Acumulador e do Registro Rn
Troca entre si o conteúdo da
XCH A, N A ↔ (N) 2 12
memória N com Acumulador
Troca entre si a RAM
XCH A, @Ri endereçada por Ri com A ↔ (Ri) 1 12
Acumulador
Troca entre si o nibble menos
A3-A0 ↔ (Ri)
XCHD A, @Ri significativo do Acumulador e 1 12
3-0
da RAM endereçada por Ri

Prof. Sidney José Montebeller - FACENS 21


Instruções de Operações Aritméticas
COND. DE
FLAGS Nº DE Nº DE
MNEMÔNICO DESCRIÇÃO OPERAÇÃO
CY AC OV BYTES ESTADOS
ADD A, Rn Soma Rn ao Acumulador A ← A + Rn * * * 1 12
Soma o conteúdo da posição
ADD A, N A ← A + (N) * * * 2 12
de memória N ao Acumulador
Soma o conteúdo da RAM
ADD A, @Ri endereçada por Ri ao A ← A + (Ri) * * * 1 12
Acumulador
Soma a constante N ao
ADD A, #N A←A+N * * * 2 12
Acumulador
Soma Rn e o flag Carrry ao A ← A + Rn +
ADDC A, Rn * * * 1 12
Acumulador CY
Soma o conteúdo da posição
A ← A + (N) +
ADDC A, N de memória N e o flag Carry * * * 2 12
CY
ao Acumulador
Soma o conteúdo da RAM
A ← A + (Ri)
ADDC A, @Ri endereçada por Ri e o flag * * * 1 12
+ CY
Carry ao Acumulador
Soma a constante N e flag A ← A + N +
ADDC A, #N * * * 2 12
Carry ao Acumulador CY
Subtrai Rn e o flag Carry do A ← A - Rn -
SUBB A, Rn * * * 1 12
Acumulador CY
Subtrai o conteúdo da
A ← A - (N) -
SUBB A, N posição de memória N e o * * * 2 12
CY
flag Carry do Acumulador
Subtrai o conteúdo da RAM
A ← A - (Ri) -
SUBB A, @Ri endereçada por Ri e o flag * * * 1 12
CY
Carry do Acumulador
Subtrai a constante N e o flag A ← A - N -
SUBB A, #N * * * 2 12
Carry do Acumulador CY
INC A Soma 1 ao Acumulador A←A+1 * * * 1 12
INC Rn Soma 1 ao Rn Rn ← Rn + 1 1 12
Soma 1 ao conteúdo da
INC N (N) ← (N) + 1 2 12
posição de memória N
Soma 1 ao conteúdo da RAM (Ri) ← (Ri) +
INC @Ri 1 12
endereçada por Ri 1
DEC A Subtrai 1 do Acumulador A←A-1 1 12
DEC Rn Subtrai 1 de Rn Rn ← Rn - 1 1 12
Subtrai 1 do conteúdo da
DEC N (N) ← (N) - 1 2 12
posição de memória N
Subtrai 1 do conteúdo da
DEC @Ri (Ri) ← (Ri) - 1 1 12
RAM endereçada por Ri
DPTR ←
INC DPTR Soma 1 ao registro DPTR 1 24
DPTR + 1
MUL AB Multiplica A e B, resultado: BA BA ← A x B 0 * 1 48
Divide A e B, resultado: A
DIV AB AeB←A/B 0 * 0 1 48
inteiro e B resto
Ajuste decimal do
DA A A ← (A)10 * * 1 12
Acumulador

Prof. Sidney José Montebeller - FACENS 22


Instruções de Desvio
COND. DE
FLAGS Nº DE Nº DE
MNEMÔNICO DESCRIÇÃO OPERAÇÃO
CY AC OV BYTES ESTADOS
Chama sub-rotina numa faixa
ACALL N 2 24
de 2 Kbytes da atual posição
Chama sub-rotina em
LCALL NN qualquer posição da memória 3 24
de programa
RET Retorna da sub-rotina 1 24
RETI Retorna da interrupção 1 24
Desvia para outro endereço
AJMP N numa faixa de 2 Kbytes da PC ← PC + N 2 24
atual posição
Desvia para qualquer posição
LJMP NN PC ← NN 3 24
da memória
SJMP N Desvio curto relativo PC ← PC + N 2 24
Desvia para o endereço
JMP @A + PC ← A +
obtido da soma do 1 24
DPTR DPTR
Acumulador com o DPTR
Desvia se o Acumulador for
JZ N 2 24
“zero”
Desvia se o Acumulador “não
JNZ N 2 24
for zero”
Compara e desvia se o
CJNE A, N, N Acumulador for diferente do * 3 24
conteúdo da memória N
Compara e desvia se o
CJNE A, #N,
Acumulador for diferente da * 3 24
N
constante N
CJNE Rn, #N, Compara e desvia se o Rn for
* 3 24
N diferente da constante N
Compara e desvia se a RAM
CJNE @Ri,
endereçada por Ri for * 3 24
#N, N
diferente da constante N
Decrementa Rn e desvia se
DJNZ Rn, N 2 24
for diferente de “zero”
Decrementa o conteúdo da
DJNZ N, N memória N e desvia se for 3 24
diferente de “zero”
NOP Nenhuma operação 1 12

Prof. Sidney José Montebeller - FACENS 23


Instruções de Operações Lógicas
COND. DE
Nº DE Nº DE
MNEMÔNICO DESCRIÇÃO OPERAÇÃO FLAGS
BYTES ESTADOS
CY AC OV
Operação “E” entre Rn e
ANL A, Rn A ← A ^ Rn 1 12
Acumulador
Operação “E” entre o
ANL A, N conteúdo da memória N e o A ← A ^ (N) 2 12
Acumulador
Operação “E” entre RAM
ANL A, @Ri endereçada por Ri e A ← A ^ (Ri) 1 12
Acumulador
Operação “E” entre a
ANL A, #N A←A^N 2 12
constante N e Acumulador
Operação “E” entre
ANL N, A (N) ← (N) ^ A 2 12
Acumulador e memória N
Operação “E” entre constante
ANL N, #N (N) ← (N) ^ N 3 24
N e memória N
Operação “OU” entre Rn e
ORL A, Rn A ← A v Rn 1 12
Acumulador
Operação “OU” entre
ORL A, N A ← A v (N) 2 12
memória N e Acumulador
Operação “OU” entre RAM
ORL A, @Ri endereçada por Ri e A ← A v (Ri) 1 12
Acumulador
Operação “OU” entre
ORL A, #N A←AvN 2 12
constante N e Acumulador
Operação “OU” entre
ORL N, A Acumulador e conteúdo da (N) ← (N) v A 2 12
memória N
Operação “OU” entre
ORL N, #N constante N e conteúdo da (N) ← (N) v N 3 24
memória N
Operação “OU EXCLUSIVO”
XRL A, Rn A ← A ∀ Rn 1 12
entre Rn e Acumulador
Operação “OU EXCLUSIVO”
XRL A, N entre o conteúdo da memória A ← A ∀ (N) 2 12
N e Acumulador
Operação “OU EXCLUSIVO”
XRL A, @Ri entre RAM endereçada por Ri A ← A ∀ (Ri) 1 12
e Acumulador
Operação “OU EXCLUSIVO”
XRL A, #N entre constante N e A←A∀N 2 12
Acumulador
Operação “OU EXCLUSIVO”
XRL N, A entre Acumulador e conteúdo (N) ← (N) ∀ A 2 12
da memória N
Operação “OU EXCLUSIVO”
XRL N, #N entre a constante N e o (N) ← (N) ∀ N 3 24
conteúdo da memória N
CRL A Faz A = 0 A ← 00H 1 12
Inverte o estado dos bits do
CPL A A ←A 1 12
Acumulador
Rotação do Acumulador para An + 1 ← An
RL A 1 12
esquerda A0 ← A7

Prof. Sidney José Montebeller - FACENS 24


Instruções de Operações Lógicas
COND. DE
Nº DE Nº DE
MNEMÔNICO DESCRIÇÃO OPERAÇÃO FLAGS
BYTES ESTADOS
CY AC OV
Rotação do Acumulador para An + 1 ← An
RLC A esquerda através do flag CY ← A7 * 1 12
Carry A0 ← CY
Rotação do Acumulador para An ← An + 1
RR A 1 12
direita A7 ← A0
An ← An + 1
Rotação do Acumulador para
RRC A CY ← A0 * 1 12
direita através do flag Carry
A7 ← CY
Troca os nibbles do A7-A4 ↔ A3-
SWAP A 1 12
Acumulador A0

Prof. Sidney José Montebeller - FACENS 25


Instruções de Flag/Bit
COND. DE
Nº DE Nº DE
MNEMÔNICO DESCRIÇÃO OPERAÇÃO FLAGS
BYTES ESTADOS
CY AC OV
CLR C Zera o flag Carry CY ← 0 0 1 12
CLR bit Zera o bit endereçado bit ← 0 2 12
SETB C Seta o flag Carry CY ← 1 1 1 12
SETB bit Seta o bit endereçado bit ← 1 2 12
CPL C Inverte o estado do flag Carry CY ←CY * 1 12
Inverte o estado do bit
CPL bit bit ← bit 2 12
endereçado
Operação “E” entre o bit CY ← CY ^
ANL C, bit * 2 24
endereçado e o flag Carry bit
Operação “E” entre o
CY ← CY
ANL C,bit complemento do bit * 2 24
endereçado e o flag Carry ^bit
Operação “OU” entre o bit CY ← CY v
ORL C, bit * 2 24
endereçado e o flag Carry bit
Operação “OU” entre o
CY ← CY
ORL C,bit complemento do bit * 2 24
endereçado e o flag Carry vbit
Move o bit endereçado para o
MOV C, bit CY ← bit * 2 12
flag Carry
Move o flag Carry para o bit
MOV bit, C bit ← CY 2 24
endereçado
Desvia se o flag Carry estiver se CY = 1
JC N 2 24
setado PC ← PC + N
Desvia se o flag Carry estiver se CY = 0
JNC N 2 24
zerado PC ← PC + N
Desvia se o bit endereçado se bit = 1
JB bit, N 3 24
estiver setado PC ← PC + N
Desvia se o bit endereçado se bit = 0
JNB bit, N 3 24
estiver zerado PC ← PC + N
Desvia se o bit endereçado se bit = 1
JBC bit, N estiver setado e depois zera o PC ← PC + N 3 24
bit Bit = 0

Prof. Sidney José Montebeller - FACENS 26


Interrupções

Os tipos de interrupção do 8051 são:

Interrupção Endereço
Interrupção Externa 0 (INT0) 0003H
Temporizador/Contador 0 000BH
Interrupção Externa 1 (INT1) 0013H
Temporizador/Contador 1 001BH
Canal Serial 0023H
Interrupções do 8051.

Podemos definir dois níveis de prioridade para cada interrupção: 0 e 1. Se


uma interrupção de prioridade 0 (menor prioridade) estiver sendo tratada e outra de
prioridade 1 (maior prioridade) ocorrer, o 8051 irá atender a de prioridade 1. Depois
de atender a interrupção de prioridade 1, o 8051 continua a atender a interrupção de
prioridade 0.
Se a interrupção que requisitar ser atendida for de nível igual ou menor da
que está sendo tratada, ela ficará aguardando o fim do tratamento desta.

Registrador IE – (Interrupt Enable) – Indica qual das interrupções está habilitada


ou desabilitada.

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


EA - - ES ET1 EX1 ET0 EX0
Registro IE.

EA : 0 = Desabilita todas as interrupções.


1 = Habilita as interrupções escolhidas.

ES : 0 = Desabilita interrupção do canal serial.


1 = Habilita interrupção do canal serial.

ET1 : 0 = Desabilita interrupção do temporizador/contador 1.


1 = Habilita interrupção do temporizador/contador 1.

EX1 : 0 = Desabilita interrupção externa 1.


1 = Habilita interrupção externa 1.

ET0 : 0 = Desabilita interrupção do temporizador/contador 0.


1 = Habilita interrupção do temporizador/contador 0.

EX0 : 0 = Desabilita interrupção externa 0.


1 = Habilita interrupção externa 0.

Registrador IP – (Interrupt Priority) – Determina o nível de prioridade de cada


interrupção.

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


- - - PS PT1 PX1 PT0 PX0

Prof. Sidney José Montebeller - FACENS 27


Registro IP.

PS : 0 = Prioridade baixa para interrupção do canal serial


1 = Prioridade alta para interrupção do canal serial.

PT1 : 0 = Prioridade baixa para interrupção do temporizador/contador 1.


1 = Prioridade alta para interrupção do temporizador/contador 1.

PX1 : 0 = Prioridade baixa para interrupção externa 1.


1 = Prioridade alta para interrupção externa 1.

PT0 : 0 = Prioridade baixa para interrupção do temporizador/contador 0.


1 = Prioridade alta para interrupção do temporizador/contador 0.

PX0 : 0 = Prioridade baixa para interrupção externa 0.


1 = Prioridade alta para interrupção externa 0.

Registrador TCON – (Timer/Counter Control) – Os quatro bits menos significativos


deste registrador controlam o modo como as interrupções externas serão
detectadas. Elas podem ser detectadas através de uma transição negativa (nível “1”
para nível “0”) ou através de nível “0”.

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


IE1 IT1 IE0 IT0
Registro TCON.

IE1 : É setado com a ocorrência de uma borda de descida no pino da Interrupção


Externa 1. É zerado quando a interrupção for atendida.

IT1 : 0 = Detecção através de nível “0” no pino da Interrupção Externa 1.


1 = Detecção através da ocorrência de uma borda de descida no pino da
Interrupção Externa 1.

IE0 : É setado com a ocorrência de uma borda de descida no pino da Interrupção


Externa 0. É zerado quando a interrupção for atendida.

IT0 : 0 = Detecção através de nível “0” no pino da Interrupção Externa 0.


1 = Detecção através da ocorrência de uma borda de descida no pino da
Interrupção Externa 0.

Prof. Sidney José Montebeller - FACENS 28


Temporizadores / Contadores

O 8051 possui dois temporizadores/contadores:

- Temporizador/Contador 0 – que utiliza o pino P3.2 como entrada de controle e


o pino T0 como entrada de pulsos;
- Temporizador/Contador 1 – que utiliza o pino P3.3 como entrada de controle e
o pino T1 como entrada de pulsos.

Registrador TCON – (Timer/Counter Control) – Os quatro bits mais significativos


deste registrador mostram o estado e iniciam ou param a contagem dos
temporizadores/contadores.

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


TF1 TR1 TF0 TR0
Registro TCON.

TF1 : É setado com a ocorrência de um transbordo (overflow) do


temporizador/contador 1. É zerado ao final da rotina de interrupção do
temporizador/contador 1.

TR1 : 0 = Desabilita a contagem do temporizador/contador 1.


1 = Habilita a contagem do temporizador/contador 1.

TF0 : É setado com a ocorrência de um transbordo (overflow) do


temporizador/contador 0. É zerado ao final da rotina de interrupção do
temporizador/contador 0.

TR0 : 0 = Desabilita a contagem do temporizador/contador 0.


1 = Habilita a contagem do temporizador/contador 0.

Registrador TMOD – (Timer/Counter Control) – Este registrador controla o modo


de operação dos temporizadores/contadores.

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


GATE-1 T/C-1 M1-1 M0-1 GATE-0 T/C-0 M1-0 M0-0
Registro TMOD.

GATE-1 : 0 = Temporizador/Contador 1 será habilitado para contagem quando


TR1 = “1” (registro TCON).
1 = Temporizador/Contador 1 será habilitado para contagem quando
TR1 = “1” (registro TCON) e o pino /INT1 = “1”.

Prof. Sidney José Montebeller - FACENS 29


T/C-1 : 0 = Temporizador/Contador 1 funcionará como temporizador usando
um sinal interno (clock dividido por 12).
1 = Temporizador/Contador 1 funcionará como um contador de sinais
externos.

M1-1, M0-1 : Definem o modo de operação do temporizador/contador 1.

M1-1 M0-1 Modo de Operação


0 0 Modo 0
0 1 Modo 1
1 0 Modo 2
1 1 Modo 3
Modos de Operação do Temporizador/Contador 1.

GATE-0 : 0 = Temporizador/Contador 0 será habilitado para contagem quando


TR0 = “1” (registro TCON).
1 = Temporizador/Contador 0 será habilitado para contagem quando
TR0 = “1” (registro TCON) e o pino /INT0 = “1”.

T/C-0 : 0 = Temporizador/Contador 0 funcionará como temporizador usando


um sinal interno (clock dividido por 12).
1 = Temporizador/Contador 0 funcionará como um contador de sinais
externos.

M1-0, M0-0 : Definem o modo de operação do temporizador/contador 0.

M1-1 M0-1 Modo de Operação


0 0 Modo 0
0 1 Modo 1
1 0 Modo 2
1 1 Modo 3
Modos de Operação do Temporizador/Contador 0.

Prof. Sidney José Montebeller - FACENS 30


Modos de Operação dos Temporizadores / Contadores

- Modo 0 - Temporizador ou Contador de 8 bits com divisor de frequência de até


32 vezes.

• TL0 e TL1 servem como divisores de 5 bits.


• TH0 e TH1 recebem o valor inicial da contagem.
• A contagem é crescente (até FFH).
• Quando o número de pulsos lidos é igual ao valor do DIVISOR, o
CONTADOR é incrementado.
• O valor do DIVISOR não é alterado durante a contagem.

Contador (TH0 ou TH1) Divisor (TL0 ou TL1)


7 6 5 4 3 2 1 0 X X X 4 3 2 1 0
Temporizadores/Contadores no modo 0.

- Modo 1 - Temporizador ou Contador de 16 bits.

• TH0 e TL0 formam o temporizador/contador 0.


• TH1 e TL1 formam o temporizador/contador 1.
• A contagem é crescente até FFFFH.

Contador (TH0 ou TH1) Contador (TL0 ou TL1)


15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Temporizadores/Contadores no modo 1.

- Modo 2 – Temporizador ou Contador de 8 bits com recarga automática.

• TL0 e TL1 são os contadores 0 e 1, respectivamente.


• TH0 e TH1 possuem valores que são transferidos para TL0 e TL1 depois de
um overflow do contador.

Valor de Recarga (TH0 ou TH1) Contador (TL0 ou TL1)


7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
Temporizadores/Contadores no modo 2.

- Modo 3 – Temporizador ou Contador de 8 bits.

• TL0 é um temporizador/contador de 8 bits controlado pelos bits TR0 e TF0 do


registro TCON.
• TH0 é um temporizador/contador de 8 bits controlado pelos bits TR1 e TF1 do
registro TCON.
• O overflow de TL0 acionará o flag de requisição de interrupção (TF0) do
temporizador/contador 0.
• O overflow de TH0 acionará o flag de requisição de interrupção (TF1) do
temporizador/contador 1.
• Nesse modo TH1 e TL1 não tem função.

Prof. Sidney José Montebeller - FACENS 31


Contador (TH0) Contador (TL0)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Temporizadores/Contadores no modo 3.

Comunicação Serial

O 8051 transmite dados seriais pelo pino TxD/clock e recebe dados seriais
pelo pino RxD/data.

Registrador SCON – (Serial Port Control) – Registrador de controle da comunicação


serial.

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


SM0 SM1 SM2 REN TB8 RB8 TI RI
Registro SCON.

SM0, SM1 : Definem o modo de operação do canal serial


SM0 SM1 Modo de Operação Velocidade

0 0 Modo 0 Clock / 12

0 1 Modo 1 Variável

1 0 Modo 2 Clock / 32 ou Clock / 64

1 1 Modo 3 Variável
Modos de Operação do Canal Serial.

SM2 : 0 = Operação individual do 8051.


1 = Operação com vários 8051.

- No modo 0 deve permanecer em “0”.


- No modo 1 não requisitará interrupção se estiver em “1” e se o bit de STOP
recebido for ilegal.
- Nos modos 2 e 3 habilita comunicação entre vários 8051.

REN : 0 = Desabilita recepção (o pino RxD pode ser usado como E/S).
1 = Habilita recepção de dados seriais.

TB8 :
- Indica, nos modos 2 e 3, o estado do 9º bit a ser transmitido.

RB8 :
- Não usado no modo 0.

Prof. Sidney José Montebeller - FACENS 32


- No modo 1 indica o estado do bit de STOP recebido (desde que o bit SM2 esteja
zerado).
- Nos modos 2 e 3 indica o estado do 9º bit do dado recebido.

TI : É setado após a transmissão do 8º bit de dado no modo 0 e no início da


transmissão do bit de STOP nos demais modos. Deve ser zerado pela rotina de
tratamento de interrupção de transmissão para permitir novas interrupções de
transmissão.

RI : É setado após a recepção do 8º bit de dado no modo 0 e no meio do bit de


STOP nos demais modos. Deve ser zerado pela rotina de tratamento da interrupção
de recepção para permitir novas interrupções de recepção.

Registrador SBUF – (Serial Buffer) – Registrador onde são recebidos e enviados os


dados seriais.
- A escrita neste registro implica na transmissão automática do dado para o meio
externo.
- A recepção serial de bits do meio externo também é automática.

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

Registro SBUF.

Modos de Operação do Canal Serial

- Modo 0:
• Transmissão e recepção são síncronas.
• Os bits de dados são transmitidos e recebidos pelo pino RxD/data.
• O clock de transmissão e da recepção é gerado pelo pino TxD/clock.
• São transmitidos ou recebidos dados de 8 bits.
• A velocidade de comunicação é clock / 12.

- Modo 1:
• Transmissão e recepção são assíncronas.
• Os bits de dados são transmitidos pelo pino TxD.
• Os bits de dados são recebidos pelo pino RxD.
• Velocidade de comunicação variável e fornecida pelo temporizador/contador
1.
• Os dados tem 10 bits, sendo:
- 1 bit de Start (nível “0”).
- 8 bits de dados.
- 1 bit de Stop (nível “1”).

- Modo 2:

Prof. Sidney José Montebeller - FACENS 33


• Transmissão e recepção são assíncronas.
• Os bits de dados são transmitidos pelo pino TxD.
• Os bits de dados são recebidos pelo pino RxD.
• Velocidade de comunicação pode ser clock / 32 ou clock / 64.
• Os dados tem 11 bits, sendo:
- 1 bit de Start (nível “0”).
- 8 bits de dados.
- 1 bit extra de dado (9º bit de dado).
- 1 bit de Stop (nível “1”).

- Modo 3:
• Idêntico ao modo 2, mas com velocidade variável.

Prof. Sidney José Montebeller - FACENS 34

Você também pode gostar