Baixe o app para aproveitar ainda mais
Prévia do material em texto
Trabalho de Microprocessadores Victória Tomé Oliveira 1Universidade Federal do Ceará - UFC Campus Sobral 1. Introdução Para a realização do projeto foi utilizado a IDE MPLABX, desenvolvida pelamMicrochip, com o intuito de desenvolver programas em assembler. Para as simulações foi utilizado o programa Proteus. 2. Exercı́cios 2.1. Questão 01 01. Desenvolva um programa que calcule a soma de duas variáveis de memória de 16 bits armazenado o resultado em uma terceira variável, também de 16 bits. Primeiramente, foi declarado os endereços das variáveis, uma variável ocupa 8 bits, sendo assim, um número com 16 bits necessita da utilização de duas variáveis. A alocação desses bits acontece da seguinte forma: A primeira parte é referente a parte mais significativa (HIGH) e a segunda parte é referente a parte menos significativa (LOW). Na Figura 1, podemos observar o teste realizado. Figura 1. Teste - Questão 01. A soma convencional primeiramente é feita do número menos significativo para o mais significativo, no programa a coma também considera essas prioridades. A função utilizada para fazer a soma foi a ADDWF, onda soma uma variável com o valor de w. Após isto, foi salvo o valor de uma variável w e em seguido somado com a variável que guarda o valor da parte menos significativa, está soma foi armazenada na parte menos significativa da variável soma. A soma pode ou não ativar o carry, sendo assim, a segunda soma foi realizada considerando essa possibilidade. Portanto, foi utilizada a função ADDWFC, esta função soma duas variáveis e também o valor de carry. A partir disto, o HIGH da primeira variável foi salvo em w, foi utilizado a função ADDWFC pra somar o HIGH da primeira variável com o HIGH da segunda variável e também com carry. Este valor foi salvo na parte mais significativa da variável SOMA. Em contra partida, esta soma também pode gerar um carry, mas o carry não pode ser salvo na variável SOMA, pois a variável SOMA já ocupa 16 bits. Então esse decimo sétimo bit foi sinalizado em outra variável de 8 bit, e só será ativo caso a SOMA dos HIGH’s gerem um carry. A logica para isto foi feita usando a função DECFSZ, sendo assim, foi feita uma chamada de rotina que caso o bit 0 de status seja 1, então é adicionado 1 ao valor de w e este é adicionado ao endereço próximo do HIGH da soma. 2.2. Questão 02 02. Desenvolva um programa que conte a quantidade de bits “1” existentes em uma variável de memória de 8 bits guardando o resultado em outra variável de memória também de 8 bits. Primeiramente, foram geradas duas variáveis, uma referente ao numero que seria analisado que foi denominada como NUMBER e a segunda, que foi denominada como CONTADOR que é responsável pela contagem da quantidade de uns (1’s) presentes na variável NUMBER. A primeira variável é escolhida pelo usuário, logo após é contado quantos uns (1’s) contém na mesma. Para encontrar o valor do CONTADOR, foi feita uma logica onde cada bit de NUMBER foi analisado e caso este bit fosse igual a um (1), seria incrementado um (1) ao valor do CONTADOR. A função BTFSC foi utilizada, ela testa se um bit é zero, e caso seja, a função pula para a próxima instrução. Caso bit seja igual a 1, então o valor do CONTADOR é incrementado. Repetindo este processo para cada bit, no final é obtido a quantidade de números 1’s que existem em NUMBER. Na Figura 2, podemos observar o caso de teste. Figura 2. Teste - Questão 02. 2.3. Questão 03 03. Desenvolva um programa que calcule a soma dos 4 bits mais significativos e dos 4 bits menos significativos de uma variável de memória de 8 bits. O resultado da soma deve ser armazenado em outra variável de memória de 8 bits. Primeiramente, foram declaradas 4 variáveis, a primeira se refere ao numero que vai ser analisado (NUMBER), a segunda variável é a parte mais significativa (MAIS NUMBER), a terceira é a parte menos se significava (MENOS NUMBER) e a ultima é a soma de HIGH com LOW (RESULT). Logo após, foi zerado as variáveis HIGH e LOW Logo em seguida, foi dado um valor a variável, a partir disto, foi testado cada bit da variável, de modo que caso o valor de um dos quatro primeiros bits fossem igual a 1 , então o seu bit referente na variável MENOS NUMBER seria setado para 1 também utilizando a função BSF. Caso contrario seria igual a 0, ou seja, caso o bit 2 de NUMBER seja igual a zero, então o bit 2 de MENOS NUMBER também deve ser zero. Agora para os bits mais significativos de NUMBER, sendo eles: 4,5,6,7; caso um deste seja 1 então o bit referente em MENOS NUMBER tambem seria 1. Exemplo, caso o bit 6 seja 1, então o bit 2 de MAIS NUMBER também deve ser 1. Isto foi feito usando a função BTFSC. Em seguida, temos que MAIS NUMBER guarda os bits referentes à parte mais significativa de NUMBER e MENOS NUMBER a parte menos significativa. Com isto, e somado MENOS NUMBER com MAIS NUMBER, como foi feito na Questão 01. Esta soma fica salva em MAIS NUMBER e então é movida para RESULT usando a função MOVFF. Na Figura ??, podemos observar o caso de teste. Figura 3. Teste - Questão 03. 3. Projetos 3.1. Projeto 01 Primeiramente, oi analisado os valores das ondas em cada perı́odo e o tempo que cada valor fica ativo, pois as ondas devem ser de acordo com os gráficos presentes na atividade. A partir disto, foram declarados contadores para que controlem o tempo que cada valor assuma na saı́da, que no caso deve ser de um perı́odo T. No projeto pode ser observado que, só ocorrem 3 perı́odos e então cada onda começa a se repetir. Em seguida, foram definidos os pinos referentes às saı́das.No pri- meiro perı́odo, as saı́das foram setadas de acordo com o manual e então foi feito um atraso. Esse atraso deve ser de 100 µs, pois o ultimo numero da matricula é igual a 1. Foi feito um atraso de 10 µs e este atraso foi repetido 10 vezes (os contadores devem ser iguais a 10). Isto foi feito usando loop onde caso o valor do contador fosse diferente de zero, então repetia o atraso (usando a função DECFSZ e BRA LOOP). Depois do atraso total de 100 µs, então as saı́das eram setadas novamente de acordo com o manual. Ao fim do terceiro perı́odo, então os valores nas saı́das começam a se repetir, por isso o código entra em um loop e repete as saı́das. Para unir o software com o hardware foi utilizado o programa Proteus, ele usa um arquivo, de extensão .hex, importado da IDE MPLABX que é incluı́do dentro do microcontrolador que está no projeto criado dentro do Proteus. O arquivo foi exportado para o proteus (EXPORT HEX) e então adicionado ao PIC18F4550 presente no proteus. Na Figura 4, podemos observar o circuito montado. Figura 4. Projeto 1. O microcontrolador foi energizado usando um power e suas sáidas foram monito- radas usando um osciloscópio, Na Figura 5, podemos observar o teste. Figura 5. Teste - Projeto 1. 3.2. Projeto 02 No programa foi utilizado dois botões, a partir disto, foi utilizado uma estratégia de po- oling para verificar o botão 1 que incrementa mais 10 minutos no cronômetro e o botão 2 que inicia a contagem. Em seguida, logo que a contagem é iniciada, é mostrada nos displays e utilizando uma estrutura de loop ela é decrementada a cada iteração do loop mostrando o novo valor nos display. O procedimento é repetido até que os minutos se tornem zero, quando isso acontece é disparado um buzzer que espera um segundo e dis- para beep de 250 milissegundos. O loop se repete até que um dos botões seja acionado, quando um dos botões é acionado ele volta para o começo do código assim resetando o cronômetro. O programa Proteus foi utilizado para desenvolver a simulação do hardware do cronômetro, como podemos observar na Figura 6. Para a montagem do circuito foi utilizado o registro TRISC e TRISD para fazer a conexão dos componentes, os display de 7 segmentos ficaram no TRISD, o botão de acréscimo foi colocado no RC0, o botão de iniciar acontagem regressiva foi colocado no RC1 e o buzzer foi colocado no RC2 (foi colocado um led amarelo juntamente com o buz- zer para ter uma melhor visão do funcionamento do alarme) e utilizamos o PIC18F4550 como microcontrolador. Para unir o software com o hardware foi utilizado o programa Proteus, ele usa um arquivo, de extensão .hex, importado da IDE MPLABX que é incluı́do dentro do microcontrolador que está no projeto criado dentro do Proteus, partindo desse arquivo e iniciando a simulação o microcontrolador executa o que foi descrito pelo software no arquivo .hex, que no nosso caso seria um cronômetro regressivo. Figura 6. Projeto 2.
Compartilhar