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 (**):
-
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.
- 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.
- 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.
- (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.
- 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
- 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
- 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