|
MC 404EF - Arquitetura e Programação de microcontroladores - 2o semestre de 2012 |
Profs. Célio Guimarães e Nelson Machado
Atualizado em 26/09/2012
Horário de atendimento: IC1 - sala 47: 2ª a 5ª F. das 11:30 - 12:30 e 18:00 às 19:30hs
Diagrama
de blocos de uma CPU simples. Veja aqui o ciclo
de execução de uma instrução usando o diagrama da CPU
simples.
O programa
minimal visto em aula: lê o estado de chaves (0 ou 1) ligadas
nas portas B e C, faz a soma dos valores binários lidos e põe o
resultado da soma em leds conectados na porta D. Veja também a
representação binária ("linguagem de máquina) das instruções
do programa minimal: in.ps,
add.ps
e out.ps
extraídas do manual de instruções do AVR.
Um resumo dos modos
de endereçamento do AVR (leia, imprima e traga nos
laboratórios).
Diagrama
de blocos simplificado do AVR
Um bom tutorial
com exemplos sobre o assembler do AVR: instruções, diretivas,
etc. Muito útil nos laboratórios.
Introdução ao ambiente AVR
studio (Windows) de programação assembler + depurador da
familia AVR.
manual
do assembler do AVR : diretivas, expressões, etc.
Introdução
à arquitetura do AVR
ATmega 88 (extraido do datasheet)
(leia pgs 1-17). É o principal documento deste modelo do 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. O executável para instalação da última
versão
e o Service Pack correspondente
podem ser baixados diretamente do site da Atmel.
A úlima versão (AVR Studio 6.0) já vem com o gcc embutido.
A versão 4.16, compatível com a interface gráfica hapsim pode ser baixada a partir
desse link.
Você deve executar primeiro o programa Setup e em seguida o SP1 (Service Pack).
O compilador gcc para Windows (WinAVR) pode ser instalado a partir
da: winavr.sourceforge.net.
Simulador Hapsim do
display LCD HD44780U (funciona como plug-in do AVR Studio). Portal do
hapsim de onde você pode
baixar o executável para Windows e exemplos.
Diretório com
manuais
e documentação do AVR.
Como escrever programas
estruturados em assembler!
Exemplo simples de subrotina
para multiplicar dois valores de 8 bits.
Como fazer operações aritméticas de 16 bits no AVR.
Uma introdução a macros no AVR .
Exemplo de macro
para multiplicar dois valores de 8 bits. Mais eficiente e mais
versátil do que a subrotina correspondente vista acima.
Os exemplos vistos de operações aritméticas de 16 bits são limitados
no sentido de que registradores específicos são usados nas operações. Seria interessante se quaisquer registradores
pudessem ser usados nessas operações. Isto pode ser feito facilmente com macros. Escreva uma macro para cada uma
das operações dos exemplos.
Exemplos
de macros
úteis (extraído do site
www.mikrocontroller.net/articles/AVR_Assembler_Makros.
Resumo
das diretivas do assembler do AVR incluindo montagem condicional
e operador de deslocamento. Leia e imprima.
Exemplo de E/S digital com botões
que acendem leds; teste com Hapsim usando o arquivo de
configuração simplebut2led.xml
Introdução
ao Hapsim
Introdução a interrupções
e E/S no AVR.
Vetores de interrupção do ATmega88 datasheet
(p. 56)
Exemplo de E/S com leds: acende e apaga
ciclicamente 8
leds
Exemplos de rotinas de interrupção: grava bytes na
e2prom,
temporizador TIMER0,
e interrupção INT0.
Exemplo do uso de sleep idle associado a uma rotina de interrupção do timer 0.
Rotinas para configurar
e escrever no LCD via Hapsim e arquivo correspondente de
configuração
do Hapsim
Rotinas
(lcdkeypad.*) para programar o keypad e o lcd usando Hapsim em
assembler e com avr-gcc. Deverão ser usadas na atividade 4 de
laboratório.
Resumo da arquitetura e comandos do display lcd
HD44780U
Os exercícios a seguir ilustram diferentes aspectos de programação e fazem parte integrante da disciplina. Sua apresentação no laboratório é opcional(*).
Resolva os exercícios no documento ciclo de execução de uma instrução.
Verifique a correção do código binário gerado pelo montador para o programa minimal e que aparece em hexadecimal no lado esquerdo do arquivo .lst (para obrigar o montador a gerar o arquivo .lst você deve entrar em Project -> Assembler Setup e selecionar a caixinha correspondente). Para cada uma das instruções do programa minimal você deve consultar o manual do conjunto de instruções a fim de obter o valor binário (ou seja em linguagem de máquina) de cada instrução.
Trabalhando com números inteiros binários com e sem sinal.
Trabalhando com vetores:
Trabalhando com macros - aritmética de 16 bits:
o
documento avr202.asm,
extraído de manuais da ATMEL, exemplifica operações aritméticas
de 16 bits para efetuar soma e subtração de pares de
registradores, soma/subtração de uma constante de 16 bits a/de um
par de registradores, comparação, negação, etc. O exemplo é
limitado no sentido de que pares específicos são usados assim como
constantes específicas. O objetivo deste exercício é transformar
as operações citadas em macros de forma que quaisquer pares de
registradores e constantes de 16 bits possam ser usados como
operandos dessas operações.
Utilize a macro apropriada para
ser usada no item iv do problema anterior
Escreva um trecho de programa contendo apenas uma instrução lógica ou do tipo bit and bit-test e saltos condicionais apropriados, para verificar se um inteiro com sinal em um registrador é positivo, negativo, par ou impar. Desenhe os arcos onde há saltos e verifique se o número de cruzamentos de arcos é mínimo.
Usando exclusivamente as instruções lógicas ou do tipo bit and bit-test do resumo de instruções, e exclusivamente os registradores r0 e r1, escreva trechos de programa para os seguintes problemas:
Modifique o exemplo de botões que acendem leds de forma que os botões funcionem como "toggles" ou seja, o led não deve apagar quando o botão é liberado, somente quando for pressionado novamente. Importante: quando aceso o led não deve ser repetidamente acionado para acender de novo; idem quando apagado. Desenhe uma onda quadrada para "simular" sucessivas atuações de um dado botão. Dica: guarde o estado do botão e da sua ação.
Atividade
desafio (opcional, individual): o quebra-cabeça dos 12 pentaminós
Condições para fazer o desafio serão negociadas caso a caso.
Atividade 2: implementação de um cronômetro/relógio de parede
Data de submissão: 06/09/12 Data da apresentação: 04/10/12
Atividade 3: rotinas para compor a atividade 4. Data da apresentação: 18 out
Atividade 4: implementação de uma calculadora de 16 bits. Data da apresentação: 25 out
Atividade 5: implementação de uma calculadora de 16 bits em C:
é a mesma calculadora da atividade 4, porém escrita em C e utilizando as rotinas em C de escrita no LCD
e entrada via keypad. Devido aos recursos da linguagem C, esta atividade é consideravelmente mais simples do
que a anterior.
Data da apresentação: 8 nov
(*)Toda submissão de uma atividade de laboratório deverá ser
feita no laboratório, acompanhada da impressão do arquivo
.lst gerado pelo montador e no formato paisagem, a fim de
não truncar os comentários de linha. Para gerar o arquivo .lst,
após abrir o projeto, selecione: Project → Assembler Setup
e na janela aberta selecione a caixa Create List File.
A
qualidade e apresentação do programa serão levadas em conta na
nota da atividade (veja sugestões no documento sobre programação
estruturada em assembler.
Os nomes dos componentes do grupo devem estar no início do programa.