experiência 1 – reset + execução de programas no kit

Propaganda
MM – Microprocessadores e Microcontroladores – Roteiro da Experiência 2
1
EXPERIÊNCIA 2 – MODOS DE ENDEREÇAMENTO
Parte I – Fundamentos Teóricos
a) Modos de Endereçamento
A forma como cada dado a ser manipulado por uma instrução do 8051 é acessado se chama “modo de endereçamento”. Uma
mesma instrução pode fazer acesso a mais de um dado, podendo utilizar diferentes modos de endereçamento.
Os 5 modos de endereçamento que podem ser utilizados por uma instrução do 8051 são:
1) endereçamento direto
áreas de memória que podem ser acessadas: RAM interna, registradores especiais
o que é fornecido na instrução: o endereço da RAM interna (de 00h a 7Fh) ou o endereço do registrador especial (de 80h a FFh)
exemplos:
INC 3
; incrementa o conteúdo da posição 03h da RAM interna (isto é, o registrador R3 do banco 0) (R3R3+1)
INC 0E0h
; incrementa o conteúdo da posição E0h dos registradores especiais (isto é, o registrador especial ACC)
(ACCACC+1)
2) endereçamento indireto
áreas de memória que podem ser acessadas: RAM interna, RAM externa
o que é fornecido na instrução: o registrador-apontador (R0, R1 ou DPTR), isto é, o registrador que contém o endereço da RAM
interna (de 00h a 7Fh) ou o endereço da RAM externa (de 0000h a FFFFh), precedido pelo caracter @ (“arroba”)
exemplos (supondo que R1=03h, DPH=56h, DPL=78h):
INC @R1
; incrementa o conteúdo da posição 03h da RAM interna (apontada pelo registrador R1), ou seja, é
equivalente à instrução INC 3 (R3R3+1)
MOVX A, @DPTR
; move o conteúdo da posição 5678h da RAM externa (apontada pelo registrador especial DPTR,
formado pelo par DPH e DPL) para o acumulador (ACCmem.ext.[5678h])
3) endereçamento de registrador
áreas de memória que podem ser acessadas: RAM interna (bancos de registradores), registradores especiais
o que é fornecido na instrução: o registrador (R0-R7 ou especial) a ser acessado
exemplos:
INC R3
; incrementa o conteúdo do registrador R3 do banco de registradores correntemente selecionado, ou seja, se esse
banco for o banco 0, é equivalente à instrução INC 3 (R3R3+1)
INC A
; incrementa o conteúdo do acumulador, ou seja, é equivalente à instrução INC 0E0h (ACCACC+1)
4) endereçamento imediato
áreas de memória acessadas: nenhuma
o que é fornecido na instrução: o valor imediato a ser manipulado, precedido pelo caracter # (“sustenido”)
exemplos:
MOV A, #3
; move o valor imediato 3 para o acumulador (ACC3)
ADD A, #1
; soma o valor imediato 1 ao conteúdo corrente do acumulador, ou seja, é equivalente à instrução INC A
(ACCACC+1)
observação: nos exemplos anteriores, além do endereçamento imediato (aos valores 3 e 1), é utilizado também o endereçamento de
registrador (ao registrador especial ACC)
5) endereçamento indexado
área de memória acessada: memória de programa (apenas para leitura)
o que é fornecido na instrução: o par de registradores de índice e de base (ACC e DPTR ou PC, respectivamente), isto é, os
registradores cujos conteúdos, somados, resultam no endereço da posição da memória de programa a ser acessada; esses
registradores são precedidos pelo caracter @ (“arroba”), e separados pelo caracter “+” (sinal de soma)
exemplos:
MOVC A, @A+DPTR
; move o conteúdo da posição (ACC+DPTR) da memória de programa para o acumulador
(ACCmem.prog.[ACC+DPTR])
MOVC A, @A+PC
; move o conteúdo da posição (ACC+PC) da memória de programa para o acumulador
(ACCmem.prog.[ACC+PC])
observação: nos exemplos anteriores, além do endereçamento indexado (as posições da memória de programa), é utilizado também o
endereçamento de registrador (ao registrador especial ACC)
b) Instruções de movimentação de dados
Nesta experiência, serão utilizadas apenas as intruções MOV, MOVX e MOVC, que fazem uma cópia de um valor para uma
determinada posição de memória ou para um determinado registrador. Essas instruções possuem 2 operandos, separados pelo caracter
“,” (vírgula): o segundo operando (à direita da vírgula), chamado “fonte”, permite obter o valor a ser copiado; o primeiro operando (à
esquerda da vírgula), chamado “destino”, permite obter a posição para onde o valor obtido será copiado. Na instrução MOVX (X de
eXterna), o fonte ou o destino está na memória RAM externa. Na instrução MOVC (C de Código), o fonte está na memória de
programa. Em todos os demais casos, o acesso é à memória RAM interna ou a um registrador especial.
Em resumo:
MOV destino, fonte
faz
destino  fonte
MM – Microprocessadores e Microcontroladores – Roteiro da Experiência 2
2
Parte II – Roteiro Experimental
a) Carga do programa
Nesta experiência, e nas próximas, você será solicitado a “carregar” um programa, fornecido em código de máquina, na memória
RAM externa do kit. Cada programa será apresentado numa tabela, com 6 colunas.
A primeira coluna, passo, contém um número seqüencial, associado a cada instrução do programa (que, nas primeiras
experiências, deverá ser executado “passo a passo”).
A segunda, endereço, contém o endereço inicial de cada instrução, na base hexadecimal (note que, nesta coluna, a base
hexadecimal é de “default”, e, portanto, o caracter “h” é omitido).
A terceira coluna apresenta uma instrução por linha, em código de máquina, isto é, o programa tal qual ele deve ser carregado na
memória RAM externa. Os valores também estão na base hexadecimal, e sem o “h”. Note que uma instrução pode ser composta por 1,
2 ou 3 bytes; portanto, ela pode ocupar 1, 2 ou 3 posições (endereços) da memória.
As 3 colunas seguintes apresentam o programa em linguagem de montagem, isto é, numa linguagem compreensível pelo ser
humano.
A quarta coluna é a do rótulo, isto é, um símbolo não obrigatório que identifica uma instrução, utilizado nas referências a desvios.
A quinta coluna é a instrução propriamente dita, composta pelo mnemônico da operação, e por 1 ou mais operandos (registradores,
valores numéricos ou rótulos). Aqui, a base de “default” para valores numéricos é a decimal, mas também podem ser utilizadas a base
binária (indicada pelo caracter “b”) ou a base hexadecimal (indicada pelo caracter “h”).
A sexta coluna, finalmente, é a dos comentários da instrução.
Carregue, na memória RAM externa, a partir do endereço 5000h, o programa da Tabela 1, digitando seu código de máquina.
passo endereço
código de máquina
rótulo
mnemônico e operandos
comentários
1
5000
74 28
MOV A, #28h
ACC  28h
2
5002
F9
MOV R1, A
R1  ACC
3
5003
74 35
MOV A, #35h
ACC  35h
4
5005
40 50 18
MOV DPTR, #5018h
DPTR  5018h
5
5008
F7
MOV @R1, A
mem.int.[R1]  ACC
6
5009
E0
MOVX @DPTR, A
mem.ext.[DPTR]  ACC
7
500A
E5 81
MOV A, 81h
ACC  mem.int.[81h]
8
500C
93
MOVC A, @A+DPTR
ACC  mem.prog.[A+DPTR]
9
500D
desvia para MONITOR
02 01 C0
LJMP MONITOR
Tabela 1 – Programa com instruções que utilizam diferentes modos de endereçamento
b) Execução de programas no kit
Execute o programa passo a passo, isto é, uma instrução de cada vez, a partir do endereço 5000h (não se esqueça de, antes da
execução, carregar o registrador PC com este valor). A execução passo a passo é feita através do comando P-PASSO, descrito na
pág.2-9 do “Manual de Experiências” A cada instrução executada, leia o respectivo item, preencha suas lacunas e responda as
questões propostas.
1) Após a execução da primeira instrução, o valor do PC foi alterado para ________h, que corresponde ao endereço da próxima
instrução a ser executada. Esta primeira instrução carregou o valor ____h no _____________________. O modo de endereçamento do
operando #28h é o endereçamento _______________________.
2) Execute a segunda instrução. Nela, o conteúdo do acumulador é copiado no registrador _____, sendo ambos acessados no modo
de endereçamento de _____________________. Como os bits RS1 e RS0 do registrador especial PSW estão em 0, o banco de
registradores correntemente selecionado é o banco ____. Portanto, o endereço ____h (correspondente ao registrador R1 do banco 0)
deve agora ter o valor ____h. Verifique isso! Está OK? (S/N). E o acumulador, teve seu valor alterado? (S/N). Ao final da segunda
instrução, o valor do PC é ________h.
3) Execute a terceira instrução, que coloca no acumulador o valor imediato ____h e deixa o PC com o valor ________h.
4) Execute a quarta instrução, que coloca no registrador ______________ o valor ________h (verifique isso! OK? (S/N)) e deixa
o PC com o valor ________h.
5) Execute a quinta instrução. MOV @R1, A utiliza o modo de endereçamento indireto, pois ela copia o valor do acumulador na
área de RAM interna, numa posição cujo endereço está no registrador ______. No passo 2, esse registrador foi carregado com o valor
28h. Verifique se esse valor está correto (S/N). Examine, agora, a posição 28h da RAM interna. Qual é o valor do seu conteúdo?
____h. Está correto? (S/N) O PC agora tem o valor ________h.
6) Execute a sexta instrução. MOV @DPTR, A também utiliza o modo de endereçamento indireto, agora para copiar o
acumulador na RAM ____________ (por isso o X de MOVX!). Como DPTR foi carregado (no passo 4) com o valor ________h, o
conteúdo desse endereço na memória externa deve ter, agora, o valor ____h (que estava no acumulador). O PC foi, agora, para
________h.
7) Execute a sétima instrução. O valor copiado no acumulador é obtido por endereçamento _______________, isto é, através do
fornecimento de seu endereço. Como seu valor (81h) é maior do que 7Fh, ele aponta um dos registradores especiais, no caso o
registrador especial ______, que, no reset, recebe o valor ____h. Verifique se, de fato, esse valor foi copiado no acumulador (S/N). O
PC, agora, está em ________h.
8) Execute a oitava instrução. Ela carrega no acumulador um valor obtido na memória de programa, que, em geral, é apenas de
leitura (ROM), mas que, no kit, coincide com a RAM externa (um “truque” para podermos carregar um programa qualquer, e, depois,
executá-lo). O endereço do valor a ser copiado no acumulador, neste caso, é obtido pela soma dos valores dos registradores ______ e
______, ou seja, ____h e ________h, que resulta em ________h. Essa posição pode ter qualquer conteúdo, pois ainda não foi
acessada. No caso, seu conteúdo é ____h. Já o PC foi para ________h.
9) A última instrução não é de movimentação de dados. Ela apenas desvia para o programa monitor, para que este assuma o
controle do kit Esta instrução deve ser utilizada sempre no final dos seus programas executados no kit.
MM – Microprocessadores e Microcontroladores – Roteiro da Experiência 2
3
EXPERIÊNCIA 2 – QUESTÕES ADICIONAIS
1) A instrução 1 desta experiência tem código de máquina 74 28, e mnemônico MOV A, #28h. Se o mnemônico fosse MOV A, #40,
o código de máquina dessa instrução seria exatamente o mesmo. Por quê?
2) Apresente o mnemônico da instrução que carrega o valor 28h no registrador R1.
3) Qual a diferença entre as instruções MOV A, #28h e MOV A, 28h?
4) Qual a diferença entre as instruções MOV @R1, A e MOVX @R1, A? Qual delas é capaz de alterar o valor de um registrador?
5) Suponha que os registradores A e R1 tenham, respectivamente, os valores 30h e 01h, e que esteja selecionado o banco 0 dos
registradores R0-R7. Indique o que faz cada instrução da seguinte seqüência, justificando por que seus efeitos são diferentes,
apesar de elas serem iguais.
MOV @R1, A
MOV @R1, A
6) Embora exista a instrução MOVX @DPTR, A, justifique por que não faz sentido (e, portanto, não existe) a instrução
MOV @DPTR, A. (“dica”: o registrador DPTR tem 16 bits, mas a RAM interna só tem 128 bytes)
7) desafio: Suponha que haja uma tabela de bytes armazenada na área de código (programa), com início na posição 5800H. Forneça
os mnemônicos da seqüência de instruções que obtém o valor do elemento da tabela apontado pelo registrador R4, e armazena
esse valor na posição 160 da memória de dados externa.
Download