Escolar Documentos
Profissional Documentos
Cultura Documentos
Lab 06
Lab 06
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
3. Teoria
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.
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
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:
44
4. Experimentos
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.
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.
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.
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