Neste laboratório nós vamos exercitar os seguintes conceitos:
O microcontrolador AVR Atmega88 possui diversas interfaces de entrada e saída. Exemplos destas interfaces são a PORTD e a PORTB. A interface PORTB, por exemplo, possui oito pinos que podem ser utilizados como entrada ou saída. A escrita (saída) e a leitura (entrada) destes pinos são feitas através das instruções "out" e "in". Estes são exemplos de escrita e leitura nas portas PORTB e PORTD respectivamente:
out PORTB, r16 ; Escreve na interface PORTB o valor (8 bits) armazenado r16. in r17, PIND ; Lê a interface PORTD e escreve o valor lido em r17.
Cada porta "x" possui três registardores: PORTx, PINx, DDRx. Por exemplo, a PORTB possui os registradores PORTB, PINB e DDRB. O registrador DDRB é um registrador de controle que define se os pinos serão de saída ou de entrada. O registrador PINB é utilizado para leitura dos pinos de entrada e o registrador PORTB é utilizado para escrita nos pinos da PORTB.
Antes de utilizar uma interface de E/S para leitura ou escrita no AVR Atmega88 devemos configurar a interface para tal. A configuração é feita através da escrita de 0 (entrada) ou 1 (saída) no registrador de controle da porta. Por exemplo:
ldi r16, 0xff ; Inicializa r16 com 0xff
out DDRB, r16 ; Configura todos os 8 pinos da PORTB como pinos de saída.
ldi r16, 0x00 ; Inicializa r16 com 0x00
out DDRD, r16 ; Configura todos os 8 pinos da PORTD como pinos de entrada.
ldi r16, 0x0f ; Inicializa r16 com 0x0f (00001111)
out DDRB, r16 ; Configura todos os 4 primeiros pinos (0, 1, 2 e 3) da
; PORTB como pinos de saída e os 4 últimos pinos (4, 5, 6 e 7)
; da PORTB como entrada.
Na aula de laboratório vimos um pequeno exemplo de como usar todos os pinos da interface PORTB como entrada e todos os pinos da PORTD como saída. O programa botoes_e_leds.asm mostra o exemplo utilizado em sala de aula. O programa deve ser primeiramente montado e executado (ctrl+f7). Após a execução, o Hapsim deve ser iniciado e os botões e LEDs adicionados e configurados para serem conectados nas portas PORTD e PORTB. Após configurar o Hapsim, a execução do programa pode ser continuada (f5). Neste exemplo, o LED fica aceso enquanto o botão está pressionado. Assim que o botão é liberado o LED correspondente apaga.
O laboratório 4 consiste em estender o exemplo acima de forma que:
1) Ao pressionar um botão, o LED correspondente acenda. Ao liberar o botão o LED deve continuar aceso. Ao pressionar o botão novamente o LED correspondente deve apagar. Novemente, a liberação do botão não deve modificar o estado do LED.
2) Responda às seguintes perguntas (Coloque as repostas em forma de comentário no arquivo .asm):
OBS: A submissão desta atividade de laboratório é opcional, mas a sua submissão é fortemente recomendada. Para submeter a atividade envie um e-mail para o Ricardo (ricardoestevesborges at gmail.com) com o assunto "MC404: Lab 04 - Nome - RA". Lembre-se de anexar os arquivos ".asm" e ".lst" na mensagem. Inclua a respostas das perguntas acima como comentário no arquivo ".asm".