/*(3,5 pontos, 30 min.) Uma chave tipo push button CH0 e um LED L0 são conectadas
as portas PB1 (terminal 52) e PB0 (terminal 53) da placa de desenvolvimento
ATmega 2560, respectivamente. Considere a chave CH0 ideal. A cada dois pulsos
da chave CH0, comutamos o estado do LED L0. Escreva o programa em C.*/
#define __ATmega2560__
#define __AVR_ATmega2560__
#ifndef F_CPU
#define F_CPU 16000000UL
#endif
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
// Definindo os pinos para o LED e a chave
#define LED PB0
#define CHAVE PB1
int main(void) {
int estado_anterior = 0, cont, atual;
// Configura o pino do LED como saída
DDRB |= (1 << LED);
PORTB = PORTB & (~(1 << LED));
// Configura o pino da chave como entrada com pull-up
DDRB &= ~(1 << CHAVE); // Define PB0 como entrada
PORTB |= (1 << CHAVE); // Ativa o resistor de pull-up interno em PB1
while (1) {
atual = !(PINB & (1 << CHAVE));
if (estado_anterior && !atual) { //Borda de descida
cont++;
estado_anterior = atual;
}
if (cont == 2) {
PORTB ^= (1 << LED);
cont = 0;
}
else {
estado_anterior = atual;
}
_delay_ms(60);
}
}