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):
  1. 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.

  2. 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.

  3. 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).