---
# System prepended metadata

title: Relatório da Aula 3 - Laboratório de EEA-27 2020
tags: [ele-21]

---

---
tags: ele-21
---

# Relatório da Aula 3 - Laboratório de EEA-27 2020

Alunos:
- Lucas Barioni Toma
- Michel Marcos Sena Farias

Consulte o manual do ATMEGA2560 (disponibilizado na pasta Referências), nas
seções USART (pag. 200 a 226) e TimerConter1 (pag.133 a 163).

- 1. Configure os registradores abaixo para que a USART1 opere com 8 bits de dados, 1 stop bit, sem paridade, transmissor e receptor ligados, modo assíncrono, baud rate de 9600bps (fosc=16MHz), sem interrupção. Preencha os valores dos registradores, em hexadecimal, abaixo:

![](https://i.imgur.com/pJWlgzE.png)

```c
UCSR1A = 0x00;
UCSR1B = 0x18; // 1<<RXEN1 | 1<<TXEN1
UCSR1C = 0x06; // 1<<UCSZ11 | 1<<UCSZ10
UBRRH1 = 0x00; // UBRR = 103 & 0xFF00
UBRRL1 = 0x67; // UBRR = 103 & 0x00FF
```


- 2. Apresente a configuração dos registradores do Timer/Counter 1 operando no modo CTC com TOP=OCR1A, produzindo uma interrupção a cada 1 milisegundo. Utilizar prescaler = 1, ou seja, a base de tempo do T/C1 será de 16MHz (fosc). Sendo assim, para gerar 1ms, o contador TCNT1 precisa ser incrementado "0,001(1/16000000)" vezes, ou seja, 16000, que deve ser o valor do registrador de comparação OCR1A.

![](https://i.imgur.com/NBTQAJf.png)

Preencha os valores dos registradores, em hexadecimal, abaixo:


```c
TCCR1A = 0x00;
TCCR1B = 0x09; // 1<<WGM12 | 1<<CS10
TCCR1C = 0x00;
OCR1A = 0x3E80;
```

- 3. No registrador `TIMSK1` foi setado o bit `OCIE1A`. Descreva o efeito que esse bit causa na execução do programa.

Quando o bit `OCIE1A` é setado para 1 e as interrupções estão globalmente habilitadas, a interrupção `TIMER1 COMPA` é habilitada, fazendo com que o fluxo do programa seja desviado para a rotina de serviço de interrupção cujo vetor é `TIMER1_COMPA_vect` (18, program address 0x0022).


- 4. Apresente abaixo o código para o interrupt driver ou rotina de serviço de interrupção (ISR - Interrupt Service Routine).

```c
ISR(TIMER1_COMPA_vect) {
    if (contador < 5000) {
        contador++;
    } else {
        printflag = 1;
        contador = 0;
    }
    
    return(0);
}
```
