MC404E - 1º Semestre 2010
Atualizado em: 26/03/10
Atividade 2 (obrigatória)- Construção de uma biblioteca para manipular bits dentro de um vetor
Um vetor de N*8 bits está armazenado em N (N >=256) bytes consecutivos da memória RAM do AVR ATmega88
(a inicialização desse vetor não faz parte da biblioteca e pode ser feita via simulador do AVR Studio)
Escreva um único programa contendo várias subrotinas para manipular bits nesse vetor e
descritas a seguir (elas constituirão uma biblioteca de uso geral para outras aplicações):
- Escreva uma subrotina clrbitvet para zerar todos os bits do vetor
tomando como parâmetros de entrada em X o endereço do início do vetor
e em Y o tamanho do vetor em bytes.
- Escreva uma subrotina ctabits1 que toma como parâmetros de entrada em X
o endereço do início do vetor e em Y o tamanho do vetor em bytes
e como parâmetro de saída em Z o número de bits
1 encontrados no vetor. Teste a subrotina preenchendo o vetor através do simulador com
um padrão repetido de bytes, por exemplo, 0x55 ou 0xab.
- Escreva 3 subrotinas setbit, clrbit e testbit que
utilizam (chamam) a subrotina auxiliar findbit (descrita em seguida),
e que tomam como parâmetros
de entrada:
em X o endereço do início do vetor,
em Y um inteiro >=0 e < N*8 representando o índice de um bit no vetor
(contando da esquerda para a direita a partir de 0: por exemplo, o indice 9
corresponde ao 2º bit mais significativo do 2º byte do vetor),
com o seguinte objetivo:
setbit liga um bit (coloca em 1) no vetor dado o seu indice,
clrbit desliga um bit (coloca em 0) no vetor dado o seu indice,
copybit copia para o bit T do registrador de estado o bit do vetor
dado o seu índice.
Escreva uma subrotina findbit que toma como parâmetros de entrada:
em X o endereço do início do vetor,
em Y um inteiro >=0 e < N*8 representando o índice de um bit no vetor
(contando da esquerda para a direita a partir de 0 como explicado acima),
e produz como saída:
em X o endereço do byte onde está localizado o bit dado pelo seu índice em Y,
em r17 um inteiro que traduz o indice do bit dentro do byte
(também contado da esquerda para a direita) para o seu valor em binário.
Por exemplo:
se esse indice for 7 r17 deverá conter 1
se for 6 r17 deverá conter 2
. . .
se for 0 r17 deverá conter 128 (0x80)
Teste as 3 subrotinas setbit, clrbit e testbit com 3 índices,
200 + ng, 203 + ng e 207+ng, onde ng é o número do seu grupo de laboratório,
e para cada indice chamando sucessivamente setbit, clrbit, setbit, copybit,
verificando a correção pelo simulador; após chamar
copybit faça um teste do bit obtido através de uma das instruções brts ou brtc).