Instruções e Pinagem do Microcontrolador 8051
Classificado em Computação
Escrito em em português com um tamanho de 8,73 KB
Instruções do Microcontrolador 8051
Do ponto de vista funcional, as instruções dos processadores da família do 8051 são agrupadas em cinco grandes grupos:
- Operações Aritméticas;
- Operações Lógicas;
- Transferências de Dados;
- Processamento Booleano a Nível de Bit;
- Salto ou Transferência de Controlo.
Operações Aritméticas
ADD A, <operando>
Quando uma instrução deste tipo é executada, o conteúdo do acumulador é somado com um segundo operando, e o resultado da operação é registado no acumulador. O segundo operando é um byte que pode ser endereçado em qualquer dos seguintes modos:
- Direto - exemplo,
ADD A, 20H
; - Registo - exemplo,
ADD A, R7
; - Registo Indireto - exemplo,
ADD A, @R0
; - Imediato - exemplo,
ADD A, #20H
.
INC e DEC
Quando a instrução INC (INCrement) é executada, o operando - conteúdo do registo especificado na instrução - é incrementado de uma unidade. O operando pode ser endereçado em qualquer dos seguintes modos:
- Direto - exemplo,
INC 20H
; - Registo - exemplo,
INC A
; - Registo Indireto - exemplo,
INC @R0
.
Analogamente, quando se executa a instrução DEC (DECrement), o registo alvo da operação é decrementado.
Operações Lógicas
ANL A, <operando>
Quando uma instrução deste tipo é executada, efetua-se o produto lógico (função AND, determinada bit a bit) entre o conteúdo do acumulador e um segundo operando. O segundo operando é um byte que pode ser endereçado em qualquer dos seguintes modos:
- Direto - exemplo,
ANL A, 20H
; - Registo - exemplo,
ANL A, R7
; - Registo Indireto - exemplo,
ANL A, @R0
; - Imediato - exemplo,
ANL A, #20H
.
Também é possível utilizar esta instrução de modo a que o resultado seja memorizado na RAM do processador, fazendo, por exemplo, ANL 20H, A
ou ANL 20H, #20H
. O resultado destas instruções não afeta as flags.
ORL A, <operando> e XRL A, <operando>
Realizam, respetivamente, as funções OR (soma lógica) e OU EXCLUSIVO, entre dois operandos, de modo análogo à função ANL.
Transferências de Dados
Neste grupo de instruções, é possível distinguir três subgrupos, constituídos por instruções de:
- Transferência Interna: a sua execução desencadeia a troca de informação (cópia de dados) entre registos do processador e RAM e/ou SFRs.
- Transferência com Acesso à Memória Externa de Dados: cópia de palavras de dados entre o acumulador do processador e dispositivos externos, em ambos os sentidos.
- Transferência com Acesso à Memória de Programa: cópia de palavras de dados, da memória de programa (interna ou externa) para o acumulador do processador.
Processamento Booleano a Nível de Bit
Na descrição das instruções deste grupo, o operando bit pode ser qualquer um dos bits localizados no mapa de memória RAM ou nos SFRs manipuláveis bit a bit.
CLR C e SETB C
Mediante a sua execução, atribuem-se, respetivamente, os valores lógicos "0" e "1" à carry flag.
CLR bit e SETB bit
Análogas a CLR C e SETB C, respetivamente; exemplos: CLR 20H
(atribui o valor "0" ao bit da RAM interna) e SETB P1.0
(atribui o valor "1" ao bit menos significativo do porto 1).
Salto ou Transferência de Controlo
Ao executar as instruções que integram este grupo, o processador deixa de aceder sequencialmente à memória de programa e desvia-se para um determinado endereço. Algumas das instruções incluídas no repertório, ao serem executadas, provocam um salto (desvio no endereçamento) incondicional; noutras instruções, o processamento do desvio é condicionado pelo resultado de uma operação de teste.
LJUMP end16
Long JUMP, instrução de salto incondicional, cuja execução provoca a escrita do valor end16
(endereço com 16 bits) no PC e o acesso à posição de memória de programa que, assim, é endereçada. O uso desta instrução permite desviar o controlo de execução do programa para qualquer endereço, desde 0000H
até FFFFH
.
JZ rel e JNZ rel
Jump if Accumulator is Zero, instrução de salto condicional que provoca o desvio de execução do programa para um dado endereço - (PC)+rel
-, se o conteúdo do acumulador for zero; no caso contrário, o processador executa a instrução seguinte. Jump if Accumulator is Not Zero, análoga a JZ.
Pinagem do Microcontrolador 8051
- VSS
- Ligação à massa.
- VCC
- Alimentação.
- XTAL1 e XTAL2
- Entrada e saída do inversor do oscilador interno.
- RST
- Entrada de reset, ativada no estado high.
- ALE - Address Latch Enable
- Saída que suporta os impulsos gerados pelo processador, assinalando a validação dos oito bits menos significativos dos endereços, em operações de acesso a memória externa. Também pode ser usada para excitar entradas de clock de periféricos.
- \PSEN - Program Store Enable
- Saída usada para aceder a memória externa de programa; esta memória é acedida quando surgem impulsos (nível low) naquela linha.
- EA - External Access Enable
- Entrada que permite selecionar o bloco de memória de programa (interna ou externa) com endereços baixos -
0000H
a1111H
. Nas versões do processador que possuem memória de programa interna, esta entrada deve ligar-se a VCC, quando se deseja usar aquela memória, e à massa, quando se pretende utilizar memória externa. - P0.7 a P0.0 - Porto 0
- Porto de entrada e saída de dados, bidirecional. Este porto não está disponível quando se usa memória de programa externa, pois os seus pinos são utilizados para transferir dados (D7 a D0 do data bus) e endereços (A7 a A0 do address bus). Em operações de acesso a memória externa, de programa ou de dados, os endereços e os dados são multiplexados no domínio do tempo; a desmultiplexagem é realizada no exterior do processador, em dispositivos controlados pela saída ALE.
- P1.7 a P1.0 - Porto 1
- Porto bidirecional. É o único porto cujos pinos são dedicados exclusivamente para entrada e saída de dados.
- P2.7 a P2.0 - Porto 2
- Porto bidirecional que, nas operações de acesso a memória externa, suporta os oito bits mais significativos do endereço (A15 a A8).
- P3.7 a P3.0 - Porto 3
- Porto bidirecional. Em alternativa, todos os pinos deste porto podem ser usados para fins específicos; as funções especiais reservadas para cada um dos pinos são as seguintes:
- RxD (P3.0) - Entrada de dados, no modo de transmissão série.
- TxD (P3.1) - Saída de dados, no modo de transmissão série.
- \INT0 (P3.2) - Entrada de excitação da interrupção externa 0.
- \INT1 (P3.3) - Entrada de excitação da interrupção externa 1.
- T0 (P3.4) - Entrada de excitação do Timer 0.
- T1 (P3.5) - Entrada de excitação do Timer 1.
- \WR (P3.6) - Saída de controlo, para operações de escrita em memória externa.
- \RD (P3.7) - Saída de controlo, para operações de leitura de memória externa.
Todos os portos são bidirecionais e podem ser usados como entradas ou saídas; as operações de transferência de dados podem processar-se bit a bit ou byte a byte; contudo, convém notar que a utilização de qualquer linha de um porto, como entrada, implica que o último valor escrito no respetivo latch interno tenha sido "1". Todos os portos, exceto P0 (que apresenta uma configuração do tipo open-drain), apresentam as saídas ligadas a VCC através de pull-ups internos e podem excitar até quatro entradas do tipo LS-TTL (oito, no caso do Porto 0).