Subrotinas

Propaganda
1
UNIVERSIDADE ESTADUAL PAULISTA “JÚLIO DE MESQUITA FILHO”
FACULDADE DE ENGENHARIA DE ILHA SOLTEIRA
DEPARTAMENTO DE ENGENHARIA ELÉTRICA
LABORATÓRIO DE MICROPROCESSADORES I – ELE 1078
Experiência 4 - Pilhas e Subrotinas
Objetivos: Entender o conceito de PILHA e apresentar as instruções de Subrotinas do 8085
O modo adequado para inicialização da pilha no 8085 é usar a seguinte instrução: LXI SP, dado16.
A – INSTRUÇÕES PARA MANIPULAÇÃO DA PILHA NO 8085
PUSH PR → Guarda o conteúdo do par de registros especificado na pilha;
PUSH PSW → Salva o conteúdo do acumulador e os FLAGs na pilha;
POP PR → Carrega o par de registros com o conteúdo de duas posições da pilha;
POP PSW → Carrega o acumulador e os FLAGs com valores da pilha.
Existem duas instruções associadas ao par de registros HL e o apontador de pilha PC:
XTHL → Os valores de HL e SP são trocados;
SPHL → Faz SP ser igual a HL.
PCHL → (PCh) = (H), (PCl) = (L)
B – INSTRUÇOES PARA MANIPULAÇÃO DE SUBROTINAS NO 8085
CALL end16 → Chama a subrotina a partir do endereço especificado, incondicionalmente.
Cccc end16 → Chama uma subrotina se a condição ccc é verdadeira.
CNZ end16 → Chama uma subrotina a partir do endereço especificado se o FLAG Z = 0
CZ end.16 → Chama uma subrotina a partir do endereço especificado se o FLAG Z = 1
CNC end16 → Chama uma subrotina a partir do endereço especificado se o FLAG Cy = 0
CC end16 → Chama uma subrotina a partir do endereço especificado se o FLAG Cy = 1
CPO end16 → Chama uma subrotina a partir do endereço especificado se o FLAG P = 0
CPE end16 → Chama uma subrotina a partir do endereço especificado se o FLAG P = 1
CP end16 → Chama uma subrotina a partir do endereço especificado se o FLAG S = 0
CM end16 → Chama uma subrotina a partir do endereço especificado se o FLAG S = 1
RET → Indica o retorno de uma subrotina de maneira incondicional;
Rccc → Indica o retorno de uma subrotina, condicionado à ccc ser verdadeira;
RNZ end16 → Retorna da subrotina se o FLAG Z = 0
RZ end16 → Retorna da subrotina se o FLAG Z = 1
RNC end16 → Retorna da subrotina se o FLAG Cy = 0
RC end16 → Retorna da subrotina se o FLAG Cy = 1
RPO end16 → Retorna da subrotina se o FLAG P = 0
RPE end16 → Retorna da subrotina se o FLAG P = 1
RP end16 → Retorna da subrotina se o FLAG S = 0
RM end16 → Retorna da subrotina se o FLAG S = 1
C – ESTRUTURA DE SUBROTINAS
2
SUBROTINAS DO MÓDULO MC-1
• DELAY (atraso) - Decrementa o par de registradores DE de seu valor inicial até atingir
0000H;
Subrotina DELAY
Endereço
05F1h
Entrada
par DE
Função
Atraso
Saída
Não Tem
Registradores Afetados
A, D e E
Observação: Menor atraso: DE = 0001H
•
Maior atraso: DE = 0000H
UPDDT - Apresenta um dado de 8 bits no campo de dados do display;
Subrotina UPDDT
Endereço
Entrada
Função
Saída
Registradores Afetados
•
036Eh
A
Mostrar dado (8 bits) no display
Não Tem
Todos
UPDAD - Apresenta um valor de 16 bits no campo de endereços do display;
Subrotina UPDAD
Endereço
Entrada
Função
Saída
Registradores Afetados
0363h
DE
Mostrar dado (16 bits) no display
Não tem
Todos
RDKBD → Endereço: 02E7h : Realiza leitura do teclado
Entrada:
não tem
Saída :
no acumulador
Registradores Utilizados: A, H e L
Obs: Esta subrotina é baseada na interrupção RST 5.5.
Interrupções
As interrupções são usadas para a conexão do microprocessador com dispositivos de I/O,
facilitando e agilizando as tarefas de um sistema baseado em microprocessador.
As interrupções podem ser de dois tipos:
•
•
Mascaráveis
→ interrupções que podem ser desativadas por software;
Não-mascaráveis → interrupções que não podem ser desativadas por software.
No 8085, as linhas de interrupção são:
TRAP → não-mascarável;
RST 7.5, RST 6.5, RST 5.5 e INTR → mascaráveis.
3
•
•
•
A nível de hardware, as interrupções podem ser reconhecidas por nível ou transição.
No 8085, tem-se que:
TRAP → reconhecida na transição de 0 para 1, devendo-se manter o nível 1 até o seu
atendimento;
RST 7.5 → reconhecida na transição de 0 para 1;
RST 6.5, RST 5.5 e INTR → reconhecidas no nível 1.
O 8085 analisa as entradas de interrupção no penúltimo estado de ciclo de interrupção. Quando
uma interrupção é reconhecida, o microprocessador entra no estado de:
Reconhecimento de interrupção → para INTR;
BUS inativo → para TRAP e RST.
Para a interrupção INTR, o microprocessador irá “aguardar” um código no barramento de
dados após o reconhecimento. O circuito responsável pela solicitação da interrupção deve
providenciar tal código. Normalmente, o código deve representar instruções do tipo CALL, que no
8085 podem ser geradas facilmente com instruções do tipo RSTn.
No caso das outras interrupções, o microprocessador gera internamente um código de
desvio, ativando a subrotina de atendimento de interrupção. Os desvios internos citados
anteriormente estão associados a posições de memória predeterminadas. Os endereços de desvio no
8085 são:
TRAP →
RST 6.5 →
Endereço 0024h
Endereço 0034h
RST 5.5 → Endereço 002Ch
RST 7.5 → Endereço 003Ch
Obs.: No MC-1 usado no laboratório, o atendimento à interrupção RST 7.5 deve ser feito no
endereço 20CEh
No caso da interrupção INTR, existem códigos específicos que podem e devem ser usados.
Estes códigos correspondem a CALLs com endereços predefinidos. Esses códigos são:
Instrução
Endereço de Desvio
Código
RST 0
RST 1
RST 2
RST 3
RST 4
RST 5
RST 6
RST 7
0000h
0008h
0010h
0018h
0020h
0028h
0030h
0038h
C7h
CFh
D7h
DFh
E7h
EFh
F7h
FFh
As interrupções podem ser ativadas simultaneamente, mas o atendimento será baseado em
uma ordem de prioridade. No 8085 a ordem de prioridade é a seguinte:
TRAP
→
máxima prioridade;
RST 7.5
→
maior prioridade dos RST;
RST 6.5
→
prioridade intermediária;
RST 5.5
→
menor prioridade dos RST;
INTR
→
prioridade mínima.
Observação: O uso da INTR é baseado no sinal INTA gerado pelo microprocessador. Este sinal é
colocado em nível baixo sempre que uma interrupção INTR é reconhecida. Neste instante deve-se
colocar no barramento um código de desvio para o 8085.
4
A manipulação de interrupções no 8085 exige a configuração de um Registro de Controle de
Interrupção, que é organizado como segue:
X
X
Serial
X
R 7.5
MSE
M 7.5
M 6.5
M 5.5
1 – Desabilita Interrupção
0 – Habilita Interrupção
1 – Habilita Máscara
0 – Desabilita Máscara
1 – Zera Flip-Flop de RST 7.5
A programação deste registro, que também é referida como “definição da máscara de
interrupção”, é feita com a instrução seguinte:
• SIM→ Set Interrupt Mask – ativa / desativa as interrupções mascaráveis. Esta instrução envia
para o Registrador de Interrupção o DADO armazenado no ACUMULADOR.
•
•
•
Este registrador pode ser lido através da instrução seguinte.
RIM→ Read Mask – Lê a máscara de interrupção, armazenando o valor correspondente no
acumulador.
Existem ainda duas instruções para controle de todas as interrupções mascaráveis, de forma
global e de acordo com a máscara de interrupção, que são:
EI → Enable Interrupt – habilita todas as interrupções, de acordo com a máscara definida;
DI → Disable Interrupt – desabilita todas as interrupções, independente da máscara definida;
EXPERIÊNCIAS
Fazer fluxograma e apresentar os programas em Linguagem Assembly e de máquina dos
seguintes programas.
4.1- Fazer um programa para contar de 00 H a FF H indefinidamente, mostrando o valor da
contagem no campo de dados do display. Use a subrotina DELAY para facilitar a visualização;
4.2 - Modifique o programa anterior para apresentar a contagem em decimal.
4.3 - Faça a contagem decimal em ordem decrescente. Use a subrotina DELAY de modo a obter
intervalo de 1 s entre as contagens.
4.4- Faça um programa que mostre nos displays o endereço de memória e seu conteúdo, da faixa de
endereços 2000H à 201FH indefinidamente.
4.5 – Faça um programa que leia um byte via teclado, envie o conteúdo ao registrador B e ao
display do módulo MC1.
4.6 – Desenvolver um programa para ler dois números decimais via teclado e armazene-os no
endereços 2070H e 2071H. Caso o valor digitado seja hexadecimal realizar nova leitura; prover
ainda que os valores sejam armazenados em ordem crescente, independente da ordem de entrada.
4.7 - Elaborar um programa contador decimal transformando os programas 4.8.4 em subrotina. A
contagem de XY até ZW deve ser exibida no campo de dados do display, indefinidamente com
atraso de 1 s. Os dados XY e ZW devem ser lidos via teclado. O programa deve realizar a leitura de
dois novos números quando a interrupção RST 7.5 for ativada, disparando novamente a contagem
após a leitura.
Download