MC404E    -    1º Semestre 2008

Profs. Célio Guimarães e Nelson Machado IC1 - sala 40
(horário de atendimento: 2ª a 5ª F. das 17:00 às 18:45)
Prof. Ricardo Anido IC1 - sala 37

Atualizado em: 05/06/08

Médias Finais no mural da Sala 40, IC1 Exame: alterada para 4 de Julho - 6ªF 19-21 hs sala PB03
Consulta permitida apenas ao sumário de instruções e de E/S distribuidos em aula

Critérios de avaliação e programa da disciplina:

Arquitetura/Programação do microcontrolador AVR (Atmel)

Diagrama de blocos de uma CPU simples.
Notas de aula de um curso (Inglaterra): descreve a arquitetura da CPU simples acima.
Um resumo dos modos de endereçamento do AVR.
Introdução à arquitetura do AVR ATmega 88 (extraido do datasheet)(leia pgs 1-17). É o principal documento deste modelo do AVR.
Um tutorial simples e detalhado sobre o arquitetura, instruções e assembler do AVR.
Introdução ao ambiente AVR studio (Windows) de programação assembler + depurador da familia AVR.
Instalação das ferramentas de software da Atmel: o ambiente AVR Studio (para Windows) inclui montador, simulador com depurador dinâmico, interface para o compilador gcc e exemplos. Executável para instalação da última versão: AVRStudio4.13 e o Service Pack correspondente SP2 build 571. Livre, também pode ser baixada diretamente do site da Atmel
O compilador gcc para Windows (winavr) pode ser baixado da: winavr.sourceforge.net
Exemplo simples de subrotina para multiplicar dois valores de 8 bits.
Exemplo de macro para multiplicar dois valores de 8 bits. Mais eficiente e mais versátil do que a subrotina correspondente vista acima.
Exemplo de E/S com leds: acende e apaga ciclicamente 8 leds
Exemplos de rotinas de interrupção: gravação de byte na e2prom, temporizador TIMER0, e interrupção INT0.
Introdução a interrupções e E/S no AVR.

Programando em C com o AVR (gcc).


Exercícios (**):
  1. Que modificações V. faria no diagrama de blocos da cpu simples visto em aula, de forma a implementar a instrução inc[x] (onde o registrador x é usado como apontador (indexador) para um byte na memória RAM; suponha que existe um sinal de controle para a ULA somar 1 a uma das suas entradas). Detalhe também os diversos passos para a execução da instrução, incluindo quais sinais no barramento de controle a Unidade de Controle deve enviar para a memória, de forma semelhante à vista em aula ao detalharmos a execução das instruções add x, y e load x, end.

  2. Complete o exemplo visto em aula, do programa que inverte os bytes de um vetor: inv.asm. Obs: otimize o laço que lê os bytes do vetor da memória de programa para a memória RAM. Entrega: 28/03/08.

  3. Modifique o programa findmax.asm para encontrar o valor mínimo de um vetor de bytes com sinal. Opcional: escreva a busca do valor mínimo como uma subrotina com um parâmetro de entrada (o apontador para o vetor) no par Z e dois parâmetros de saída: o índice e o valor mínimo, em dois registradores da sua escolha. Entrega:04/04/2008.

  4. (i) Escreva um programa que lê uma cadeia de caracteres definida na área de programa e grava esta cadeia na EEPROM. Utilize as rotinas de escrita e leitura na EEPROM vistas em aula. Mostre o funcionamento do programa no simulador do AVR Studio, abrindo uma janela que mostra o conteúdo da EEPROM.
    (ii) (Opcional) A fim de prevenir escritas não intencionais na EEPROM a instrução no PASSO 6 (p. 20 do datasheet) deve ser executada dentro de 4 ciclos após o PASSO 5. Simule uma escrita espúria colocando 5 instruções NOP entre o PASSO 4 e o PASSO 5 (dando assim um atraso de 5 ciclos) e verifique com o simulador que o byte não será escrito na EEPROM.
    Exercício alternativo a este: veja aqui. Data de entrega: 18/04/08.

  5. O arquivo avr202.asm (extraído do AVR Studio) possui vários trechos de código para implementar operações aritméticas de 16 bits de interesse; no entanto, eles não são muito úteis porque os registradores e constantes sobre os quais são feitas as operações são predefinidos.
    Escreva e teste macros para implementar as operações contidas em avr202.asm. Data de entrega: 10/05/08

  6. Modifique o exercício 4(i) de forma que a escrita na EEPROM seja feita através de interrupções: o programa principal deve iniciar a 1ª escrita na EEPROM e ficar num laço contando instruções; as escritas subsequentes devem ser iniciadas dentro da rotina de interrupção de fim de escrita. Obs: após ser gravado o último byte V. deve desabilitar as interrupções de fim de escrita na EEPROM. Data de entrega: 10/05/08

  7. Modifique a rotina findbit vista em aula de forma a eliminar a restrição do indice do bit ter 8 bits (o que limita o tamanho do vetor em 32 bytes), supondo agora que o indice do bit no vetor tem 16 bits e é passado como parâmetro no para Y. A fim de limitar o tamanho do vetor acrescente um 3º parâmetro de entrada em r16 contendo o tamanho do vetor - 1 em bytes (ou seja o vetor terá no máximo 256 x 8 = 2048 bits). A rotina findbit deverá também verificar a compatibilidade do índice com o tamanho do vetor e retornar com o CY ligado em caso de erro (ou seja o CY é um parâmetro de saída. Obs: sua modificação deve ser a mais eficiente possível. Use as rotinas setbit e clrbit para fazer um teste convincente da nova rotina. Data de entrega: 06/06
    (**) Haverá um bônus na média final para quem: (i) submeter a maior parte dos exercícios opcionais que serão postados ao longo da disciplina e (ii)cuja média das provas for >=5.0.

Atividade desafio (opcional, individual): o quebra-cabeça dos 12 pentaminós
Data de entrega: V. deverá ter um protótipo funcionando uma semana antes da 2ª prova.

Atividades obrigatórias (*)

Atividade 1
Produto escalar de vetores e soma parcial de vetor de inteiros de 16 bits. Submissão: 27/03/08. Data de entrega: 10 e 11/04/08

Atividade 2
Subrotinas para manipular um vetor de bits Submissão: 10/04/08 Data de entrega: 26/04/08

Atividade 3
Implementando um " relógio de parede" através de interrupções
Data de entrega: 12-13/06