Buscar

Microprocessadores

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 6 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 6 páginas

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.

Continue navegando