MC404E Prova 2 - 19 Junho 2008 - PB16

Nome: __________________________________________________________RA_________

Duração: 1h:50m Consulta apenas ao sumário de instruções e de regs de E/S distribuídos em aula.
Resolva na própria prova. Não destaque as folhas.Use o verso se precisar.
Leia com atenção (em especial os negritos!). Lapis permitido.

  1. Responda sucintamente cada questão:
    1. Após o reset do Atmega88 qual é o estado (conteúdo)
      (a)[0.25] da memória RAM e registradores de propósito geral?
      
      
      (b) [0.25] dos registradores de E/S?
      
      
      
      
    2. [0.25] qual o tamanho do espaço de endereçamento de instruções da família AVR? Justifique!
      
      
      
      
      
    3. [0.25] qual o tamanho do espaço de endereçamento de dados da família AVR? Justifique!
      
      
      
      
      
    4. [0.25] qual o tamanho do espaço de endereçamento de E/S da família AVR? Justifique!
      
      
      
      
      
    5. [0.25] que limitações possuem as instruções de E/S cbi e sbi?
      
      
    6. [0.25] por que deve-se usar as instruções lds ou sts para acessar o registrador TIMSK0 do Atmega88?
      
      
    7. [0.25] cite dois problemas de portabilidade de programas em C do Linux para o avr-gcc.
      
      
      

  2. [1.0] Escreva uma macro comentada, addi8, com 2 parâmetros, com o objetivo de somar a um registrador >= r16 (1º parâmetro) uma constante de 8 bits (2º parâmetro). Escreva também um trecho de programa para invocar a macro.
    
    
    
    

  3. [3.0] Escreva uma subrotina comentada ctsecs em assembler do AVR que toma como parâmetro de entrada em X o endereço na memória RAM de um contador de segundos mantido em 2 bytes no formato ASCII; a cada chamada da subrotina o contador deve ser incrementado de forma apropriada; quando o contador chegar a '60' segundos deve ser zerado pela subrotina (passar para '00').
    Obs: (i) endereço passado em X aponta pra o byte das dezenas.
    (iI)suponha que o contador foi previamente inicializado fora da subrotina.
    (iiI) escreva apenas o código da subrotina!
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

  4. [1.0] Escreva uma função em C, ctbits1 , comentada, que toma como parâmetro por valor um inteiro de 16 bits sem sinal e retorna o número de bits 1 contidos nesse inteiro. Obs: escreva apenas o código da função!
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

  5. [3.0] Escreva inteiramente na linguagem C do AVR um programa comentado com o seguinte objetivo: deseja-se ciclicamente acender e apagar simultâneamnte 3 leds ligados aos pinos que correspondem aos bits 2, 4 e 6 da Porta B do ATmega88 através de uma rotina de interrupção de overflow do TIMER0 (código em C: TIMER0_OVF0_vect ).
    1. seu programa deve configurar a porta B para este fim, lembrando que os outros pinos associados à porta B estão sendo usados para outros fins aqui não detalhados;
    2. deve configurar o TIMER0 para interromper a CPU a cada 256 ciclos do relógio (código de configuração = 4);
    3. a rotina de interrupção de overflow do TIMER0 deve fazer o seguinte:
      ligar os 3 leds na 1ª interrupção (e depois na 3ª, 5ª, etc)
      desligar os 3 leds na 2ª interrupção (e na 4ª, 6ª, etc)
      ao final de 120 interrupções desativar o TIMER0 (código de configuração = 0) e desabilitar suas interrupções.
    Obs: após as devidas inicializações o programa principal, (main()), deve entrar num laço infinito (opcionalmente "dormir" no laço).
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

  6. Opcional[1.0]: tente apenas após resolver as outras questões!
    Escreva um trecho de programa  eficiente em assembler para inverter os bits contidos no registrador r0 (ou seja se r0 contem inicialmente os bits b1,b2,...,b7,b8 no final deverá conter os bits b8,b7,...,b2,b1).