Você está na página 1de 6

MC-LAB - LABORATÓRIO 06: USO DAS SUBROTINAS DO PROGRAMA MONITOR

1. Objetivos

Após completar estas atividades você deverá ser capaz de entender e utilizar as sub-rotinas do programa
monitor do microcomputador MC-1.

2. Equipamento necessário

? Unidade microcomputador MC-1


? Fonte de alimentação de +5 volts MB-2F

3. Teoria

ANTES DE INICIAR A PRÁTICA, LEIA ATENTAMENTE A TEORIA EXPOSTA NESTE


ITEM.
3.1. Sub-rotinas do programa monitor

Você pode utilizar certas rotinas, contidas no programa monitor do MC-1, para simplificar a programação de
suas tarefas.
A tabela 1 descreve estas rotinas e os seus endereços de chamadas.

ENDEREÇO MNEMÔNICO DESCRIÇÃO


07FD CI Entrada de console (Console Input): Esta rotina introduz no
registrador A um caracter (em código ASCII), procedente do
teclado terminal TTY.
Altera o conteúdo do registrador A e dos flags.
07FA CO Saída de Console (Console Output): Esta rotina transmite o
caracter ASCII presente no registrador C para o terminal de
vídeo TTY.
Altera os conteúdos dos registradores A, C e dos flags.
05EB CROUT Retorno do carro e Alimentação de Linha (Carriage
Return, Line Feed): Envia um caracter de retorno para
primeira coluna (CR) da próxima linha (LF) do terminal de
vídeo.
Altera os conteúdos dos registradores A, B, C e dos flags.
06C7 NMOUT Saída de Número Hexadecimal (Hex Number Printer):
Converte o número inteiro não sinalizado hexadecimal de 8
bits presente no registrador A em 2 caracteres ASCII que são
enviados para o terminal de vídeo.
Altera os conteúdos dos registradores A, B, C e dos flags.
0363 UPDAD Atualização do campo de endereços (Update Address):
Esta rotina atualiza o valor mostrado no campo de endereços
do display de 7 segmentos do MC-1. O conteúdo do par de
registradores DE é mostrada na forma hexadecimal no
campo de endereços do display de 7 segmentos. D na parte
alta e E na parte baixa.
Registrador B = 0: apaga o ponto decimal
= 1: acende o ponto decimal na extrema
direita.
Altera os conteúdos de todos os registradores e dos flags.

42
036E UPDDT Atualização do campo de dados (Update Data): Esta rotina
atualiza o valor mostrado no campo de dados do display de 7
segmentos do MC-1, transferindo para este campo o valor
contido no registador A. Este valor é mostrado na forma
hexadecimal.
Registrador B = 0: apaga o ponto decimal
= 1: acende o ponto decimal na extrema
direita.
Altera os conteúdos de todos os registradores e dos flags
02E7 RDKBD Leitura do Teclado (Read keyboard): Esta rotina espera até
que uma tecla seja pressionada e transmite o valor da tecla
para o registrador A.
Altera os conteúdos dos registradores A, H, L e dos flags.
05F1 DELAY Retardo (Time delay): Esta rotina decrementa o conteúdo do
par de registradores DE até zero com o objetivo de produzir
um atraso. A seguir retorna ao programa principal.
Altera os conteúdos dos registradores A, D, E e dos flags.
02B7 OUTPT Envio de caracter para o display (Output Characters to
Display): Esta rotina envia caracteres para o display de 7
segmentos do MC-1, segundo os parâmetros determinados
pelos registradores A, B, H e L:
Registrador A = 0: usa o campo de endereços.
= 1: usa o campo de dados.
Registrador B = 0: apaga o ponto decimal
= 1: acende o ponto decimal na extrema
direita.
Registradores HL : endereço inicial dos caracteres a serem
enviados.
A tabela 2 mostra quais caracteres serão mostrados, em
função do conteúdo hexadecimal da posição de memória
endereçada por HL.
Tabela 1 - Sub-rotinas do programa monitor do MC-1

CARACTER CONTEÚDO HEXADECIMAL DA POSIÇÃO DE


MOSTRADO MEMÓRIA APONTADA POR HL
0 00
1 01
2 02
3 03
4 04
5 05
6 06
7 07
8 08
9 09
A 0A
b 0B
C 0C
d 0D
E 0E
F 0F
H 10
L 11
P 12
I 13
r 14
43
S 05
Branco 15
Tabela 2 - Caracteres mostrados pela rotina OUTPT.

3.2. Vetores de interrupção

Algumas interrupções de software e de hardware do 8085 estão disponíveis para serem utilizadas pelo usuário,
e algumas estão reservadas para os programa monitor. Em alguns casos, as interrupções são vetorizadas para
uma posição em RAM para facilitar o seu uso.
Segue-se uma descrição das interrupções utilizadas:

TIPO DE INTERRUPÇÃO VETOR DESCRIÇÃO


RST 0 0000 A mesma função do botão RESET IN
RST 1 0008 Chamada ao programa monitor com registradores
salvos
RST 5 20C2 O usuário pode colocar na posição 20C2 uma
instrução JMP (desvio) para uma rotina de
serviço da RST 5.
RST 5.5 - Usada pelo controlador de teclado e display
(8279)
RST 6 20C5 O usuário pode colocar na posição 20C5 uma
instrução JMP para uma rotina de serviço da RST
6.
RST 6.5 20C8 O usuário pode colocar na posição 20C8 uma
instrução JMP para uma rotina de serviço da RST
6.5.
Esta interrupção está disponível na unidade
Adaptadora de Barramento,( MC-2/3) como um
sinal de entrada.
Certifique-se que a interrupção RST 6.5 seja
habilitada pelo seu programa através da instrução
SIM
RST 7 20CB O usuário pode colocar na posição 20CB uma
instrução JMP (desvio) para uma rotina de
serviço da RST 7.
RST 7.5 20CE O usuário pode colocar na posição 20CE uma
instrução JMP para uma rotina de serviço da
interrupção de hardware RST 7.5.
Esta interrupção ocorrerá todas as vezes que a
tecla RESTART 7.5
Certifique-se que a interrupção RST 7.5 seja
habilitada pelo seu programa através da instrução
SIM.
Tabela 3 - Interrupções.

44
4. Experimentos

PARA EXECUTAR OS PROGRAMAS, COMPLETE E CONFIRA TODOS OS CÓDIGOS


HEXADECIMAIS DAS INSTRUÇÕES

4.1. Uma pequena rotina de retardo de tempo

A subrotina DELAY (endereço inicial 05F1) utiliza os 16 bits contidos no par de registradores D e E e
decrementa o contador até chegar a zero, e em seguida retorna ao programa principal.
A tabela 4 mostra um programa de retardo de tempo que emprega a subrotina DELAY para esperar um
instante de tempo antes de retornar ao monitor.
ENDEREÇO OPCODE OPERANDOS ASSEMBLY COMENTÁRIOS
(LSB) (MSB)
2000 31 A0 20 LXI SP, 20A0 Define o stack pointer
2003 11 FF FF LXI D, FFFF Fixa o atraso do contador
2006 CD F1 05 CALL DELAY Começa a espera
2009 CF RST 1 Retorna ao monitor
Tabela 4 - Rotina de retardo de tempo
Execute o programa e observe o retardo no display. Repetir para diferentes valores no endereço 2005 (o byte
mais significativo do contador), tais como F0, C0 e 01. Atrasos FOFFH, C0FFH E 01FFH respectivamente.
Para qual valor dos registradores DE observa-se o menor retardo?
Liste a subrotina DELAY e determine a equação que define o seu atraso em função do conteúdo do par de
registradores DE. Responda qual o máximo e mínimo retardo possível com esta subrotina e o correspondente
valor de DE.

4.2. Uso do display de dados

A subrotina UPDDT (endereço inicial 036E) é usada para mostrar valores na área de dados do display. O
conteúdo do acumulador aparece no display em notação hexadecimal. O programa mostrado na tabela 5 é
usado para transferir FF para a área de dados do display.
ENDEREÇO OPCODE OPERANDOS ASSEMBLY COMENTÁRIOS
LXI SP,20A0 Define o stack pointer
MVI A,FF Carrega A com FF
CALL UPDDT Transfere A para a área de dados
HLT Termina o programa
Tabela 5 - Uso do display de dados
A instrução HLT (halt) suspende a atividade da CPU. Executar o programa para valores distintos de A.

4.3. Uso do display de endereços

A subrotina UPDAD (endereço inicial 0363) é empregada para mostrar o conteúdo dos registradores D e E, em
notação hexadecimal, no display de endereços. O seguinte programa (tabela 6) mostra um contador
hexadecimal de 4 dígitos no display de endereços usando a subrotina UPDAD do monitor.
A subrotina UPDAD afeta todos os registradores e flags da CPU. Para se guardar o valor do contador deve-se
proteger o conteúdo dos registradores D e E da subrotina UPDAD. Um procedimento típico para guardar os
registradores é usar a instrução PUSH antes de executar a instrução CALL e recuperar o valor dos
registradores utilizando a instrução POP.
Coloque um valor inicial no par de registradores DE e execute o programa; observe o contador no display.
END. OPCODE OPERANDOS LABEL ASSEMBLY COMENTÁRIOS
LXI SP,20A0 Define o stack pointer
AGAIN: INX D Soma um ao contador de 16 bits
PUSH D Armazena o contador na pilha
CALL UPDAD Mostra o contador
LXI D,1800 Fixa o valor do contador
CALL DELAY Começa a espera
45
POP D Recupera o contador em DE
JMP AGAIN Segue contando
Tabela 6 - Um contador hexadecimal de 4 dígitos
O programa seguinte é usado para mostrar a palavra HELP no display. A rotina OUTPT do monitor envia
caracteres ao display, segundo os parâmetros fixados nos registradores A, B, H e L tal como na tabela 7.
END. OPCODE OPERANDOS LABEL ASSEMBLY COMENTÁRIOS
LXI SP,20A0 define o stack pointer
MVI A,01 usa o display de dados
MVI B,00 zera o indicador decimal
LXI H,BRANCO limpa display de dados
CALL OUTPT envia os caracteres brancos ao
display de dados
AGAIN: MVI A,00 usa o display de endereços
MVI B,00 zera o indicador decimal
LXI H,MENS envia mensagem para display de
endereços
CALL OUTPT envia os quatro caracteres (Help)
ao display de endereços
LXI D,FFFF fixa o valor de retardo
CALL DELAY retardo de tempo
MVI A,00 usa o display de endereços
MV B,00 zera o indicador decimal
LXI H,BRANCO limpa display de endereços
CALL OUTPT envia os caracteres brancos ao
display
LXI D,FFFF fixa o valor do retardo
CALL DELAY retardo de tempo
JMP AGAIN continua mostrando
MENS: caracter mostrado: H
caracter mostrado: E
caracter mostrado: L
caracter mostrado: P
BRANCO: caracter mostrado: Branco
caracter mostrado: Branco
caracter mostrado: Branco
caracter mostrado: Branco
Tabela 7 - A palavra HELP no display
É possível selecionar outro grupo de quatro letras da tabela 2 e registrar seus códigos hexadecimais a partir do
endereço MENS. De tal forma é possível mostrar sua própria mensagem no display.

4.4. Leitura do teclado

O microprocessador 8085 possui 5 entradas de interrupção: INTR, TRAP, RST 5.5, RST 6.6 e RST 7.5.
O microprocessador 8085 também possui uma Máscara de Interrupção ou Registrador I, que pode ser lido
através da instrução RIM e ter seu valor fixado com a instrução SIM.
Neste experimento será utilizada a interrupção RST 5.5. Ela é responsável pelo armazenamento do contador
de programa (PC) na pilha e leva o programa ao endereço 002C. A interrupção RST 5.5 é usada como
interrupção de teclado e é atendida pelo monitor.
Antes do uso de qualquer interrupção, o programa deve:
1. Ajustar o valor do stack pointer (SP), já que uma interrupção causa a execução de uma instrução RST
que utiliza a pilha.
2. Retirar a máscara da interrupção com a instrução SIM. O bit 3, que habilita o ajuste da máscara,
deverá estar em nível 1. O bit 0 será o novo valor da máscara para RST 5.5 (0 desmascara e 1
mascara).
3. Habilitar todo o sistema de interrupções com a instrução EI.

46
A instrução EI (habilitação de interrupções) ajusta o flag de habilitação de interrupção, permitindo que que
todas as interrupções sejam aceitas.
A instrução SIM (ajuste da máscara de interrupções) transfere o conteúdo do acumulador ao registrador I.
A interrupção mais fácil de ser usada é a do teclado, pois sua rotina de serviço se encontra no programa
monitor. A rotina de serviço inclui a instrução EI (examine o endereço 02EF). Esta rotina lê um caracter do
teclado e o armazena no endereço de memória 20FE. A subrotina RDKBD (ela possui uma instrução EI!)
espera uma interrupção e carrega o byte do endereço 20FE no acumulador.
O programa da tabela 8 espera receber a indicação de que uma tecla foi pressionada (interrupção RST 5.5)
para transferir seu valor ao registrador A e logo retornar o controle ao monitor.
ENDEREÇO OPCODE OPERANDOS ASSEMBLY COMENTÁRIOS
LXI SP,20A0 define o stack pointer
MVI A,08 retira as máscaras das interrupções
SIM
CALL RDKBD transfere o valor do teclado para A
RST 1 retorna ao monitor
Tabela 8 - Leitura do teclado
Execute este programa para diferentes teclas e examine o valor obtido no acumulador.
O programa seguinte (tabela 9) possibilita observar o valor da tecla no display.
END. OPCODE OPERANDOS LABEL ASSEMBLY COMENTÁRIOS
LXI SP,20A0 define o stack pointer
MVI A,08 retira as máscaras das interrupções
SIM
AGAIN: CALL RDKBD transfere o valor do teclado para A
CALL UPDDT envia A ao display de dados
JMP AGAIN continua mostrando
Tabela 9 - Mostrando o valor da tecla no display
O programa da tabela 10 é uma adaptação do programa anterior. Ele soma dois números expressos em
notação hexadecimal e mostra o resultado no display de dados. O microcomputador lê os números de um
dígito cada um (usando RDKBD) e os soma, mostrando o resultado no display com a utilização da subrotina
UPDDT.
END. OPCODE OPERANDOS LABEL ASSEMBLY COMENTÁRIOS
LXI SP,20A0 define o stack pointer
MVI A,08 retira as máscaras das interrupções
SIM
AGAIN: CALL RDKBD transfere o valor do teclado para A
MOV B,A guarda o número no registrador B
CALL RDKBD recebe o segundo número
ADD B soma os dois números
CALL UPDDT mostra o resultado
JMP AGAIN continua o programa
Tabela 10 - Soma de dois números em notação hexadecimal
Para uma soma decimal (dígitos 0 a 9), insira a instrução DAA (código 27) entre ADD B e CALL UPDDT no
programa da Tabela 10.
A instrução DAA (ajuste decimal do acumulador) ajusta o valor de 8 bits do acumulador em dois dígitos
decimais de 4 bits cada um.

47

Você também pode gostar