Programação de Microprocessadores
• Microprocessadores são
‘Máquinas de Estado
Seqüenciais Síncronas’
que operam mediante a
execução de uma
seqüência de códigos
binários armazenados em
memória.
• As ordens ou comandos compreendidos por um
determinado Microprocessador, são INSTRUÇÕES
seqüencialmente armazenadas na Memória.
• Ao conjunto de Instruções compreendidos por um
determinado Microprocessador dá-se o nome de
“INSTRUCTION SET”.
• Cada Microprocessador tem seu próprio Instruction Set que é
em geral, diferente do Instruction Set de outro
Microprocessador de fabricantes diferentes.
• Uma seqüência de Instruções do Instruction Set, armazenadas
na memória e que realiza alguma operação, recebe o nome de
PROGRAMA.
• Cada Instrução do Microprocessador é um código binário
formada em geral por um ou mais Bytes.
• A cada código binário equivalente a uma Instrução está
associado um Mnemônico para facilitar a compreensão da
função que a Instrução executa.
• Ao conjunto de Instruções e seus Mnemônicos equivalentes
dá-se o nome de LINGUAGEM ASSEMBLY.
Fluxograma
• Para a documentação lógica de um Programa em Assembly
utiliza-se um Fluxograma ou Diagrama de Blocos.
• Cada bloco do Fluxograma equivale a um sub-conjunto do
Instruction Set do Microprocessador.
• O Fluxograma é uma forma de se implementar
logicamente um programa, antes que o mesmo seja
codificado na Linguagem Assembly do
Microprocessador.
Fluxograma
• Linhas de Fluxo do Programa
• Mostram a seqüência de
execução das Instruções.
• Cada Bloco do Fluxograma
possui apenas uma linha de Fluxo
de Entrada e uma ou duas de
saída
• Bloco de Processo
• Equivalem às Instruções que
realizam alguma operação do tipo:
- Movimento de Dados
Execute - Operação Aritmética
- Operação Lógica
Fluxograma
• Bloco de Decisão
• Equivale às Instruções que
decidem sobre o Fluxo do
Programa.
• Se a função dentro do bloco
F for Verdadeira(V) o programa
X = 0? continua abaixo, se for
Falsa(F) o programa muda o
fluxo.
V
Fluxograma
• Processo Pré-definido
• Equivale às Instruções que mandam
executar uma Sub-rotina armazenada
em outro lugar da Memória.
• Observe que quando a sub-rotina
termina, o fluxo do programa continua
normalmente.
Fluxograma
• Bloco de Início de Programa • Bloco de Fim de Programa
Início
FIM
• O Bloco de Início de • O Bloco de FIM equivale a
Programa não equivale a uma uma instrução que termina o
Instrução específica do Programa. É chamado de FIM
Instruction SET. LÓGICO do Programa.
Exemplo de Fluxograma de um Programa de
Microprocessador
Início
• O programa ao lado deve Ler um
Ler o dado Dado da memória, verificar se é
da Memória igual a zero. Se não for zero,
continua em LOOP. Se for zero para
o programa.
Dado = 0?
F
V
Parar
Codificação Assembly
• Para Codificar um Programa escrito através de um
Fluxograma, deve-se escolher o Microprocessador, ou
seja, conhecer seu Conjunto de Instruções.
• Os Microcontroladores da família MCS-51 serão os
dispositivos a serem aplicados nesta disciplina.
Codificação Assembly do 8051
• Instruções equivalentes
ao Bloco de Processo
• Instruções Aritméticas
SUBB A, direct ADD A, Rn
Execute INC A DEC A
DA A
Codificação Assembly do 8051
• Instruções equivalentes
ao Bloco de Processo
• Instruções Lógicas
ANL A, Rn ORL A, direct
Execute XRL A, #data
CLR A CPL A
RL A SWAP A
Codificação Assembly do 8051
• Instruções equivalentes
ao Bloco de Processo
• Instruções de Transferência de Dados
MOV A, Rn MOVC A, @A+DPTR
Execute MOVX A,@DPTR
PUSH direct POP direct
XCH A, Rn
Codificação Assembly do 8051
• Instruções equivalentes
ao Bloco de Decisão
• Instruções de Desvio
JZ rel JNZ rel
CJNE A, direct, rel
F
JNC rel
X = 0? JC rel
JB bit, rel JNB bit, rel
V
DJNZ Rn, rel
Codificação Assembly do 8051
• Instruções equivalentes
ao Bloco de Processo Pré-
definido
• Instruções de Sub-Rotina
LCALL addr16 ACALL addr11
RET
RETI
Codificação Assembly do 8051
• Instruções equivalentes a
Mudança de Fluxo
• Instruções de Saltos
LJMP addr16 AJMP addr11
SJMP rel
JMP @A+DPTR
Modos de Endereçamento do 8051
1. Endereçamento Imediato
• Opera sobre o dado localizado na própria instrução
• Identificado através do sinal #
• Exemplo: ADD A,#30
O dado 30 é somado ao Registrador A
Modos de Endereçamento do 8051
1. Endereçamento Imediato
ADD A,#30
Registrador A
00 ADD A,#30
Registrador A
00 + 30 30
Modos de Endereçamento do 8051
ADD A,#30
Memória Registrador A Programa Operação
00 00 + 30
30 20
ADD A,#30
Registrador A
Endereço Conteúdo
30
Modos de Endereçamento do 8051
2. Endereçamento Direto
• Opera sobre o dado cujo endereço está na instrução
• Exemplo: ADD A,30
O dado armazenado no endereço 30 é
somado ao Registrador A
Modos de Endereçamento do 8051
2. Endereçamento Direto
ADD A,30
Registrador A
00 ADD A,30
Registrador A
Conteúdo do
Endereço 30 00 + 20 20
20
Modos de Endereçamento do 8051
ADD A,30
Memória Registrador A Programa Operação
00 00 + 20
30 20
ADD A,30
Registrador A
Endereço Conteúdo
20
Modos de Endereçamento do 8051
2. Endereçamento Indireto
• Opera sobre o dado cujo endereço está armazenado em
um Registrador apontado na instrução
• Identificado através do sinal @
• Exemplo: ADD A,@R0
O dado armazenado no endereço apontado pelo
Registrador R0 é somado ao Registrador A
Modos de Endereçamento do 8051
2. Endereçamento Indireto
ADD A,@R0
Registrador A
00 ADD A,@R0
Registrador R0 Registrador A
30
00 + 20 20
Conteúdo do
Endereço 30
20
Modos de Endereçamento do 8051
ADD A,@R0
Memória Registrador A Programa Operação
00 00 + 20
30 20
ADD A,@R0
Registrador R0
30
Registrador A
Endereço Conteúdo
20
Exemplo de um Programa Assembly do 8051
Início ORG 0
LOOP:
Ler o dado
da Memória MOV A,30H
Dado = 0?
F CJNE A,#00,LOOP
V
Parar AQUI: SJMP AQUI
Exemplo de um Programa Assembly do 8051
Mnemônicos (Programa Assembly)
ORG 0
LOOP: MOV A,30H COMPILADOR
CJNE A,#00,LOOP
AQUI: SJMP AQUI
Código Compilado (Opcode)
Exemplo de um Programa Assembly do 8051
Memória
00 E5
01 30
02 B4
03 00
04 FB
05 80
06 FE
Endereço Conteúdo