Lista 3: Exercícios de Microcontroladores AVR (Timers, USART e ADC)

Computação4,84 KB

Lista 3: Exercícios de Microcontroladores

PERGUNTAS LISTA 3

1. Escreva um programa em C para comutar todos os bits de PORTB continuamente, com um delay entre cada alternância. Use o Timer 0 para gerar o delay, no modo normal e sem prescaler.

2. Escreva um programa em C para comutar o bit PB4 a cada 70 µs. Use o Timer 0 no modo normal e escolha o fator do prescaler adequadamente. Assuma XTAL = 16 MHz (cristal).

3. Quais os valores adequados para os registradores TCCR0A e TCCR0B para configurar o Timer 0 no modo normal, sem prescaler e com o clock vindo do cristal?

4. Assumindo XTAL = 8 MHz e que queremos gerar uma onda quadrada no pino PB7, qual a frequência mínima que a onda quadrada pode ter se for usado o Timer 1?

5. Programe o Timer 0 em C para gerar uma onda quadrada de frequência 1 kHz. Considere XTAL = 1 MHz.

6. Usando interrupção, programe o Timer 0 para gerar uma onda quadrada no pino PB5.

7. Qual a vantagem da programação baseada em interrupção em relação ao método de polling?

8. Escreva uma função para configurar a USART com 9600 bps, 8 bits de dados, 1 stop bit, sem paridade. Considere XTAL = 16 MHz.

9. Escreva um programa para transferir a letra “a” serialmente a 9600 bps, 8 bits de dados, 1 stop bit, sem paridade. Considere XTAL = 16 MHz.

10. Usando os parâmetros da questão anterior, escreva um programa para enviar a mensagem “ENGC50-SISMICRO” continuamente.

11. Escreva um programa em C para receber bytes de dados serialmente e colocá-los no PORTB.

Configuração da USART a 19200 bps

Configure a USART para a taxa de 19200 bps, 8 bits e 1 stop bit.

12. Escreva um programa em C para receber um caractere pela porta serial. Se for uma letra minúscula, ele deve ser enviado de volta como maiúscula.

13. Igual à questão 11. Use a interrupção Receive Complete em vez de polling.

14. Igual à questão 9. Use a interrupção Receive Complete em vez de polling.

15. Assumindo que estamos transmitindo o caractere ASCII “e”, com 1 stop bit e sem paridade, mostre a sequência de bits transferidos.

16. Em relação à questão anterior, calcule o tempo necessário para transmitir 10k caracteres, se for usada a taxa de 9600 bps. Qual a porcentagem de tempo perdida devido ao overhead da mensagem?

17. Considerando XTAL = 7,3728 MHz, qual o valor que deve ser carregado em UBRR para se ter uma taxa de 9600 bps?

18. Qual a resolução de um ADC de 8 bits, se Vref = 1,28 V? Neste caso, qual seria a saída do ADC para as tensões de entrada de 0,7 V e 1 V?

19. Escreva um programa em C para adquirir dados no canal 0 do ADC (ADC0) e mostrar o resultado em PORTB (high byte) e PORTD (low byte). A aquisição é feita continuamente.

20. Refaça a questão anterior, dessa vez usando a interrupção do ADC.

21. Como é feita a seleção do canal de conversão A/D do ATmega328? Qual o registrador? Quais os bits responsáveis pela seleção?

22. Execute passo a passo o seguinte código assembly usando o simulador. Observe o conteúdo dos registradores e o valor das flags a cada passo.

ldi r20, $27
ldi r21, $15
sub r20, r21
ldi r20, $20
ldi r21, $15
sub r20, r21
ldi r24, 95
ldi r25, 95
sub r24, r25
ldi r22, 50
ldi r23, 70
sub r22, r23
l1: rjmp l1

23. Escreva o código assembly para somar os seguintes valores: $92, $23, 0x66, $87, 0xF5. Com ajuda do simulador, examine as flags C, H e Z após a execução de cada soma.

24. Determine o valor da flag C após a execução dos seguintes códigos:

(a) ldi r20, $85
ldi r21, $92
add r20, r21

(b) ldi r16, $15
ldi r17, $72
add r16, r17

(c) ldi r25, $F5
ldi r26, $52
add r25, r26

(d) ldi r25, $FE
inc r25
inc r25

25. Escreva o código assembly para carregar o registrador r20 com 0x99. Depois transfira o conteúdo de r20 para r0, r12 e r31. Use o simulador para examinar os registradores.

26. Escreva o código assembly para comutar continuamente os bits de PORTB e PORTD através da escrita alternada dos valores 0x55 e 0xAA nessas portas.

27. Analise a funcionalidade do código a seguir. O que acontece se a linha include “m328pdef.inc” for comentada?

28. Escreva um programa em assembly para ler um byte em PORTX, somar 5 ao valor e enviá-lo para PORTY.

29. Determine o valor de r0 e r1 após a execução dos seguintes trechos de código assembly:

(a) ldi r16, 10
ldi r17, 20
ldi r18, 30
mul r16, r17
add r0, r18

(b) ldi r19, 19
subi r19, 10
ldi r30, 30
mul r30, r19

30. Discrimine as funções das diretivas .equ, .set, .org e .include.

Baixar

PDF Word HTML