Você está na página 1de 4

Disciplina: TT516 Microcontroladores I

Profa Coordenadora: Tala Simes dos Santos

Exerccios Laboratrio 1

Grupo:
Guilherme Henrique Ramos da Silva RA: 146303
Thas Serra Dorten RA: 157377

Limeira, SP
13/04/2016
Exerccios:

1. Mude a sequncia de acendimento dos leds, fazendo com que acendam


alternadamente.

A parte principal do cdigo a destacada na figura 1.

Na sub-rotina pisca1, foi comentada a linha 15 com o comando swap do cdigo da


aula anterior, visto que no mais necessrio. Foi adicionada a linha 16, na qual o
acumulador a recebe o valor 01010101 em binrio. Este valor ser jogado no port3
quando pisca2 for chamado , em que cada bit do nmero corresponde a um led: os acesos
sero os que esto iguais a 1, e os apagados, iguais a 0. Na linha 17, foi movido o valor de
port1 para um registrador, no qual, na linha 18, tem-se que enquanto o valor desse
registrador for diferente de 00000000 em binrio, a sub-rotina pisca2 chamada. Porm,
quando o registrador for igual a este binrio, o programa sai desse loop e chama a sub-rotina
soltatecla. Assim, tem-se que port1 o boto que permite a sada do programa do loop.

Foi acrescentada uma sub-rotina pisca2, que joga o valor do acumulador definido
anteriormente em pisca1 para port3 e, assim, acende os leds naquela sequncia. Na linha
24, o valor de a mudado e enquanto o registrador for diferente de 00000000 em binrio,
volta-se na sub-rotina pisca1. Novamente em pisca1, port3 recebe o novo valor do
acumulador, que o inverso do nmero anterior: 10101010 em binrio. Assim, os leds
acendem que estavam acesos, apagam, e os que estavam apagados, acendem.

Figura 1 Cdigo do exerccio 1.


2. Altere a seqncia de acendimento dos leds de tal forma que acendam um a um e
quando chegar ao ultimo led da seqncia, retorna ao inicio.

As partes principais do cdigo esto destacadas nas figuras 2 e 3 abaixo.

Primeiramente, na sub-rotina sequencia0, linha 11, foi iniciado o acumulador em


01111111 em binrio. Na sub-rotina pisca, os bits dessa varivel foram invertidos, ou seja, A
igual a 10000000. Port3 recebe este valor e, portanto, acende o primeiro led. Em seguida,
a sub-rotina codemaster chamada.

Foi criada a sub-rotina codemaster, a fim de acender os led um a um. Na linha 18, a
varivel B recebe o valor de A, portanto B igual a 10000000. Em seguida, o valor de A
rotacionado, logo A igual a 01000000. Na linha 20, realizada a operao OR bit a bit
entre os valores de A e B e armazenado em B, logo B igual a 11000000. Este valor
movido para A que movido para Port3, acendendo os dois primeiros leds. Na linha 24, o
registrador zero recebe o valor de Port1 e, na linha 27, diz-se que enquanto o registrador
no for igual a 0FE em hexadecimal, codemaster iniciado novamente. Caso contrrio, a
sub-rotina soltatecla chamada. Na linha 25, tem-se que quando A for igual a 11111111, ou
seja, quando todos os leds forem acesos, a sub-rotina restartleds chamada. Caso contrrio,
codemaster iniciado novamente. Os resultados dessa sub-rotina so apresentados na tabela
abaixo.

Linha 18 Linha 19 Linha 20 Linha 22


MOV B, A RR A A + B Port3
10000000 01000000 11000000 11000000
11000000 01100000 11100000 11100000
11100000 01110000 11110000 11110000
11110000 01111000 11111000 11111000
11111000 01111100 11111100 11111100
11111100 01111110 11111110 11111110
11111110 01111111 11111111 11111111
Tabela 1 Valores de algumas variveis no loop codemaster.

Foi criada a sub-rotina restartleds, a fim de zerar algumas variveis e retornar ao


inicio do programa. Na linha 60, Port3 zerado. A varivel A recebe 01111111, em seguida,
este valor invertido bit a bit, e enviado Port3, que, por sua vez, acender o primeiro led
novamente.
Figura 2 Cdigo do exerccio 2: Sub-rotina codemaster.

Figura 3 Cdigo do exerccio 2: Sub-rotina restartleds.

Você também pode gostar