Programação de Microprocessadores

Propaganda

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.
Prof. Adilson Gonzaga
1
• 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
dá 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.
2
• Uma sequencia 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á o nome de LINGUAGEM ASSEMBLY.
dá-se
3
• Para a documentação lógica de um Programa em Assembly
utiliza um Fluxograma ou Diagrama de Blocos.
utiliza-se
• 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.
4
• Linhas de Fluxo do Programa
• Bloco de Processo
Execute
• Mostram a sequencia 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
• Equivalem às Instruções que
realizam alguma operação do tipo:
- Movimento de Dados
- Operação Aritmética
- Operação Lógica
5
• Bloco de Decisão
• Equivale às Instruções que
decidem sobre o Fluxo do
Programa.
X = 0?
F
• Se a função dentro do bloco
for Verdadeira(V) o programa
continua abaixo, se for Falsa(F)
o programa muda o fluxo.
V
6
• Processo Pré-definido
• Equivale às Instruções que mandam
executar uma Sub-rotina
Sub rotina armazenada
em outro lugar da Memória.
• Observe que quando a sub-rotina
termina, o fluxo do programa continua
normalmente.
7
• Bloco de Início de Programa
• Bloco de Fim de Programa
Início
FIM
• O Bloco de Início de
Programa não equivale a uma
Instrução específica do
INSTRUCTION SET.
• O Bloco de FIM equivale a
uma instrução que termina o
Programa. É chamado de FIM
LÓGICO do Programa.
8
Início
• O programa ao lado deve Ler um
Dado da memória, verificar se é
igual a zero. Se não for zero,
continua em LOOP. Se for zero para
par
o programa.
Ler o dado
da Memória
Dado = 0?
F
V
Parar
9
• 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.
10
• Instruções equivalentes
ao Bloco de Processo
• Instruções Aritméticas
Execute
SUBB
A, direct
ADD
A, Rn
INC
A
DEC
A
DA
A
11
• Instruções equivalentes
ao Bloco de Processo
• Instruções Lógicas
ANL
Execute
A, Rn
ORL
A, direct
A
XRL
A, #data
CLR
A
CPL
RL
A
SWAP
A
12
• Instruções equivalentes
ao Bloco de Processo
• Instruções de Transferência de Dados
Execute
MOV
A, Rn
MOVX
A,@DPTR
PUSH
direct
XCH
A, Rn
MOVC
POP
A, @A+DPTR
direct
13
• Instruções equivalentes
ao Bloco de Decisão
• Instruções de Desvio
X = 0?
V
JZ
rel
CJNE
A, direct, rel
JC
rel
JNC
rel
JB
bit, rel
JNB
bit, rel
DJNZ
Rn, rel
F
JNZ
rel
14
• Instruções equivalentes
ao Bloco de Processo Prédefinido
• Instruções de Sub-Rotina
LCALL
addr16
ACALL
addr11
RET
RETI
15
• Instruções equivalentes
a Mudança de Fluxo
• Instruções de Saltos
LJMP
addr16
SJMP
rel
JMP
@A+DPTR
AJMP
addr11
16
1. Endereçamento Imediato
• Opera sobre o dado localizado na própria instrução
• Identificado através do sinal
• Exemplo:
ADD
#
A,#30h
O dado 30h é somado ao Registrador A
17
1. Endereçamento Imediato
ADD A,#30h
Registrador A
00
ADD A,#30h
Registrador A
00
+
30h
30h
18
1. Endereçamento Imediato
ADD
A,#30h
Memória
Registrador A
Programa
00
30
20
Operação
00
+
30
ADD A,#30h
Registrador A
Endereço
Conteúdo
(hexa)
(hexa)
30
19
2. Endereçamento Direto
• Opera sobre o dado cujo endereço está na instrução
• Exemplo:
ADD A,30h
O dado armazenado no endereço 30h é
somado ao Registrador A
20
2. Endereçamento Direto
ADD
A,30h
Registrador A
00
ADD A,30h
Conteúdo do
Endereço 30h
20
Registrador A
00
+
20
20
21
2. Endereçamento Direto
ADD
A,30h
Memória
Registrador A
Programa
00
30
20
Operação
00
+
20
ADD A,30h
Registrador A
Endereço
Conteúdo
(hexa)
(hexa)
20
22
3. 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
23
3. Endereçamento Indireto
ADD
A,@R0
Registrador A
00
ADD A,@R0
Registrador R0
30h
Conteúdo do
Endereço 30h
20
Registrador A
00
+
20
20
24
3. Endereçamento Indireto
ADD A,@R0
Memória
Registrador A
Programa
00
30
20
Operação
00
+
20
ADD A,@R0
Registrador R0
30h
Registrador A
Endereço
Conteúdo
(hexa)
(hexa)
20
25
Início
ORG 0
LOOP:
Ler o dado
da Memória
MOV A,30H
Dado = 0?
CJNE A,#00,LOOP
F
V
Parar
AQUI:
SJMP AQUI
26
Mnemônicos (Programa Assembly)
ORG 0
LOOP:
MOV A,30H
COMPILADOR
CJNE A,#00,LOOP
AQUI:
SJMP AQUI
Código Compilado (Opcode)
27
Memória de
Programa
00
E5
01
30
02
B4
03
00
04
FB
05
80
06
Endereço
FE
Conteúdo
28
Exemplo:
Campo do
Rótulo (Label)
29
Exemplo:
Campo da
Operação
(Mnemônicos)
30
Exemplo:
Campo do
Operando
31
Exemplo:
Campo do
Comentário
32
Exemplo:
33
34
35
São utilizadas para complementar as
informações que permitam a montagem
efetiva do programa.
• Indicar o Endereço Inicial do Programa.
• Reservar área de Dados
• Definir equivalência entre valores
• Etc…
36
Principais Diretivas:
37
Principais Diretivas:
Exemplo:
Armazena na posição 0010h da
Memória de Programa, o Byte
05h e na posição seguinte
(0011h) o Byte CFh
38
Principais Diretivas:
39
Principais Diretivas:
40
Principais Diretivas:
4) Diretiva EQU ---- (Equate) Igual
• Atribui um valor a um literal.
literal EQU valor
• O literal só pode receber um único valor.
• O valor pode ser um valor numérico ou uma expressão.
• Uma vez declarado o valor do literal este não poderá ser
redefinido.
Exemplo:
ORG 0
Controle
Controle
EQU
10h
; atribui 10h ao literal
MOV
A, #Controle
; Acumulador = 10h
41
42
43
44
CONTROLE DE FLUXO DE PROGRAMA
Comparação de Bytes
A instrução CJNE (compare e salte se não for igual) faz o flag de
carry = 1 depois da execução, se o dado em comparação for
maior que o conteúdo do registrador em questão (A, Rn ou @Ri).
CJNE A,direct,rel
CJNE A,#data,rel
CJNE Rn,#data,rel
CJNE @Ri,#data,rel
45
CONTROLE DE FLUXO DE PROGRAMA
Test:
Valor.
Test:
Test:
Else:
Valor.
Test:
CJNE
JC
A,Valor,Test
LT
;Desvie se A < Valor.
CJNE
A,Valor,Test
;Desvie se A >=
JNC
GTE
CJNE
SJMP
JNC
-----
A,Valor,Test
Else
GT
;Desvie se A > Valor.
CJNE
A,Valor,Test
;Desvie se A <=
SJMP
JC
LTE
LTE
46
Teste de Bits
Testa o bit e salta para o endereço rel se bit=1
JB
bit,rel
SAI:
ORG
0
JB
P1.0,SAI
SJMP
CONT
------
47
Teste de Bits
Testa o bit e salta para o endereço rel se bit=0
JNB
bit,rel
SAI:
ORG
0
JNB
P1.0,SAI
SJMP
CONT
------
48
Teste de Bits
Testa o bit , salta para o endereço rel se bit=1 e complementa o bit
JBC
bit,rel
SAI:
ORG
0
JBC
P1.0,SAI
SJMP
CONT
------
49
DADOS ARMAZENADOS NA MEMÓRIA DE
PROGRAMA
Dados são armazenados na Memória de Programa somente
usando as Psudo-Instruções DB ou DW, durante a fase de
gravação do programa.
Existem duas instruções apenas que permitem ler estes dados
armazenados na Memória de Programa
MOVC
A, @A+DPTR
MOVC
A, @A+PC
50
EXEMPLO:
Somar dois dados armazenados na Memória
de Programa.
51
Estrutura de Programação Assembly
Programa Principal
Sub-rotina1
Chamada de Sub-rotina1
Programa Principal
Chamada de Sub-rotina2
Sub-rotina2
Programa Principal
Chamada de Sub-rotina3
Programa Principal
Sub-rotina3
•É um procedimento estabelecido pelo programador que executa
alguma tarefa específica.
• Cada chamada de dentro do Programa Principal causa um desvio
automático para o endereço da sub-rotina chamada.
• Ao terminar a execução da sub-rotina o Contador de Programa
(PC) retorna a execução para a próxima instrução dentro do
Programa Principal, após a instrução de chamada.
• O endereço de retorno da Sub-rotina é armazenado na Pilha no
endereço apontado pelo Stack Pointer (SP).
Exemplo:
$
ACALL muda a
execução do programa
para o endereço da
sub-rotina DELAY
RET retorna a
execução do
programa para a
próxima instrução
abaixo da chamada
ACALL
O endereço de retorno (posição da instrução
MOV A#00) é armazenado na Pilha definida por
SP e recuperado pela instrução RET
Sub-rotinas re-entrantes
• De dentro de uma Sub-rotina pode ser chamada outra subrotina.
A cada
chamada um
endereço de
retorno é
armazenado
na Pilha. A
cada retorno o
endereço é
removido da
Pilha.
Exemplo:
$
ERROS COMUNS!!!!!!!
$
?????
Saltar com JUMP para dentro de Sub-rotinas.
Conseqüência: O PC será carregado com o último valor
armazenado na PILHA (???). O programa se perderá.
ERROS COMUNS!!!!!!!
Saltar de Sub-rotinas com JUMP para dentro de
Programas.
Conseqüência:
Estouro da PILHA
Download