MC404    -    2º Semestre 2009

Atualizado em: 2/10/09 Veja correções em negrito

Atividade 1 (obrigatória)- Manipulação de bits dentro de um vetor

Um vetor de 1024 bits está armazenado em 128 bytes consecutivos da memória EEPROM do AVR ATmega88. Escreva um único programa contendo várias subrotinas para manipular bits nesse vetor, descritas a seguir:
  1. Escreva uma subrotina ctabits1 que toma como parâmetro de entrada em X o endereço do início do vetor e como parâmetro de saída em Y 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.

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

  3. 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 <= 1023 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), 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)

  4. Escreva 3 subrotinas setbit, clrbit e testbit que utilizam (chamam) a subrotina findbit 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,
    tstbit copia para o bit T do registrador de estado o bit do vetor dado o seu índice; faça um teste do bit após a chamada da subrotina tstbit através de uma das instruções brts ou brtc).

    Teste essas 3 subrotinas com pelo menos 3 índices , por exemplo, 200 + ng, 203 + ng e 207+ng, onde ng é o número do seu grupo de laboratório, por exemplo, para cada indice chamando sucessivamente setbit, clrbit, setbit, tstbit e verificando a correção pelo simulador.

Sugestão: depure o seu programa com o vetor inicialmente na SRAM. Após isto modifique as subrotinas de escrita no vetor para se adequarem ao fato de que as operações de E/S na EEPROM são feitas a nivel de byte.