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.