Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Programação em Assembly para o Microprocessador 8085: Desenvolvimento de uma Sub-rotina, Exercícios de Matérias técnicas

Neste documento, o autor apresenta o desenvolvimento de uma programação em assembly para o microprocessador 8085, com ênfase na criação de uma sub-rotina que realiza um atraso de 3 segundos. O texto aborda as teorias básicas, como a contagem de tempo e o uso de registradores, além de fornecer código-fonte e explicações passo a passo. Palavras-chave: programação, assembly, microprocessador, sub-rotinas.

Tipologia: Exercícios

2021

Compartilhado em 18/08/2021

usuário desconhecido
usuário desconhecido 🇧🇷

1 documento

1 / 4

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Programação do 8085
Gabriel da Costa RA: 20052
Colégio Técnico de Campinas e da UNICAMP
COTUCA
Curso Eletroeletrônica Disciplina EEI21
Resumo
Durante esse trabalho desenvolveremos uma programação para o microprocessador 8085 utilizando
a linguagem assembly com os mnemônicos específicos para o mesmo, desenvolvendo um pouco mais o
conteúdo sobre as sub-rotinas, e ao final conseguimos cumprir a situação pedida e concluir uma possível
utilização, bem simples, para o programa.
Palavras-chave: Programação, assembly, microprocessador, sub-rotinas.
Introdução
A situação dita o seguinte, se uma entrada estiver ativa, uma saída deve piscar de 3 em 3 segundos,
portanto 3 segundos ligada e 3 segundos desligada, e se a entrada estiver desligada, a saída deve
permanecer desligada. Uma situação bem simples, e o objetivo final é conseguir um programa que realize o
que foi pedido.
Podemos pensar nisso como um pisca-pisca comum, não existem muitas outras aplicações para este
programa em específico, mas por mais simples que seja a teoria aplicada, poderia ser utilizada para coisas
bem mais complexas, como funcionamento de determinados motores ou válvulas, em aplicações de sistemas
mais complexos.
Aspectos Teóricos
Para realizar a contagem de tempo no circuito, iremos utilizar uma sub-rotina de atraso, que demore
aproximadamente 3 segundos, para que somando com o tempo dos outros comandos, tenhamos algo que
pisque efetivamente de 3 em 3 segundos. Porém, para isso precisaremos saber quanto tempo cada
mnemônico leva, ou seja, quantos ciclos de máquina são necessários, e por fim precisamos saber quantos
ciclos de máquina serão iguais a 3 segundos.
Obtemos todas as respostas nessa tabela, fornecida pelo material do 8085:
Figura 1 Tabela sub-rotina de 10ms
pf3
pf4

Pré-visualização parcial do texto

Baixe Programação em Assembly para o Microprocessador 8085: Desenvolvimento de uma Sub-rotina e outras Exercícios em PDF para Matérias técnicas, somente na Docsity!

Programação do 8085

Gabriel da Costa RA: 20052

Colégio Técnico de Campinas e da UNICAMP

COTUCA

Curso Eletroeletrônica – Disciplina EEI

Resumo

Durante esse trabalho desenvolveremos uma programação para o microprocessador 8085 utilizando a linguagem assembly com os mnemônicos específicos para o mesmo, desenvolvendo um pouco mais o conteúdo sobre as sub-rotinas, e ao final conseguimos cumprir a situação pedida e concluir uma possível utilização, bem simples, para o programa. Palavras-chave: Programação, assembly, microprocessador, sub-rotinas.

Introdução

A situação dita o seguinte, se uma entrada estiver ativa, uma saída deve piscar de 3 em 3 segundos, portanto 3 segundos ligada e 3 segundos desligada, e se a entrada estiver desligada, a saída deve permanecer desligada. Uma situação bem simples, e o objetivo final é conseguir um programa que realize o que foi pedido. Podemos pensar nisso como um pisca-pisca comum, não existem muitas outras aplicações para este programa em específico, mas por mais simples que seja a teoria aplicada, poderia ser utilizada para coisas bem mais complexas, como funcionamento de determinados motores ou válvulas, em aplicações de sistemas mais complexos.

Aspectos Teóricos

Para realizar a contagem de tempo no circuito, iremos utilizar uma sub-rotina de atraso, que demore aproximadamente 3 segundos, para que somando com o tempo dos outros comandos, tenhamos algo que pisque efetivamente de 3 em 3 segundos. Porém, para isso precisaremos saber quanto tempo cada mnemônico leva, ou seja, quantos ciclos de máquina são necessários, e por fim precisamos saber quantos ciclos de máquina serão iguais a 3 segundos. Obtemos todas as respostas nessa tabela, fornecida pelo material do 8085: Figura 1 Tabela sub-rotina de 10ms

A primeira resposta que obtemos é quantos ciclos de máquina correspondem a 3 segundos. O material considera que cada estado é igual a 1 microssegundo, portanto cada ciclo de clock será 1 microssegundo, e sabemos que 3 segundos são 3 milhões de microssegundos, portanto, são necessários 3 milhões de ciclos de clock para obtermos os 3 segundos. Infelizmente não conseguimos logo de cara o número de instruções necessárias, uma vez que cada uma tem um respectivo peso, e este cálculo não seria muito eficiente, portanto, iremos utilizar como base o número de estados, e tentar alcançar o número de instruções a partir do mesmo. Para que possamos atingir o tempo necessário, precisamos utilizar 3 registradores, fazendo exatamente a mesma função que a sub-rotina apresentada, apenas demorando mais tempo, seguindo a lógica explicada durante a aula, para montar o código, carregamos de cima para baixo, e decrementamos de baixo para cima. O código base para uma sub-rotina com 3 registradores é o seguinte: ATRASO: MVI D, y REPEAT1: MVI E, u REPEAT2: MVI H, i REPEAT3: DCR H JNZ REPEAT DCR E JNZ REPEAT DCR D JNZ REPEAT RET Para determinar os valores das incógnitas y,u,i precisamos descobrir quantas vezes cada instrução é realizada, multiplicar isto pelo peso respectivo, somar tudo e igualar a 3 milhões, porém isto será uma equação de 3 incógnitas, e teremos que chutar 2 valores para 2 das incógnitas e substituirmos para descobrir o terceiro valor, e ver se o mesmo será possível. Apenas estendendo ligeiramente a lógica da sub-rotina anterior, teremos o seguinte para o número de vezes que cada instrução é executada, em função das variáveis, com os jumps verdadeiros destacados em verde, e os falsos em vermelho. Nº de vezes ATRASO: MVI D, y 1 REPEAT1: MVI E, u y REPEAT2: MVI H, i yu REPEAT3: DCR H yui JNZ REPEAT3 yu(i-1) yu DCR E yu JNZ REPEAT2 y(u-1) y DCR D y JNZ REPEAT1 y- 1 1 RET 1 Com isso feito, podemos somar o número de vezes de cada instrução multiplicada pelo seu peso, e igualar a 3 milhões, para obtermos a seguinte equação: 18y+18yu+14yui=

Reunindo tudo, o código final será o seguinte: ;Código Gabriel da Costa RA:20052 ; JMP START ; Definição de Variáveis ; ENTRADA: EQU 00h SAIDA: EQU 05h ; Código Principal ; START: MVI A, 0 ; Zera o Acumulador ; OUT 05h ; Zera a saída ; TESTE: MVI B, 01h ; Carrega B para a comparação ; IN 00h ; Verifica o valor da entrada para a comparação ; CMP B ; Compara b com o valor da entrada ; ; Se entrada for 0, voltamos para o teste ; JM START ; Como ENTRADA=0 , a flag de negativo será ativa, e o programa desviado para o START; ; Se entrada for 1, teremos que ativar a saída ligar por 3 segundos, e desligar por 3 segundos ; JZ ON ; Como ENTRADA=1 , o resultado será 0, portanto desviamos para o ON ; ; Rotinas ; ON: MVI A, 01H ; Coloca 1 no acumulador ; OUT 05H ; Coloca 1 na SAIDA ; CALL ATRASO ; Atrasa os 3 segundos ; MVI A, 00H ; Coloca 0 no acumulador ; OUT 05H ; Coloca 0 na SAIDA ; CALL ATRASO ; Atrasa os 3 segundos ; JMP TESTE ; Volta para a comparação da entrada ; ATRASO: MVI D,D1h REPEAT1: MVI E,07h REPEAT2: MVI H,91h REPEAT3: DCR H JNZ REPEAT DCR E JNZ REPEAT DCR D JNZ REPEAT RET HLT

Conclusão

O trabalho utiliza muitos dos conteúdos vistos em aula, tais como utilização de uma sub-rotina, jumps condicionais, comparação, controle de uma saída a partir de uma entrada, e exercita o pensamento lógico para a automação industrial, estimulando o traquejo para possíveis programações futuras. Como já dito, os mesmos conteúdos poderiam ser utilizados como base para a automação industrial de outras situações, e este programa em si poderia rodar um LED para que atuasse como um pisca-pisca, ou um motor que deva funcionar por uma determinada quantidade de tempo, e deva permanecer parado por essa mesma quantidade de tempo.