//Nome: Kauana Quintana Fort
//Matrícula: 202110738
#define __ATmega2560__
#define __AVR_ATmega2560__
#ifndef F_CPU
#define F_CPU 16000000UL
#endif
#include <stdint.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <stdbool.h>
#include <stdint.h>
#include <util/delay.h>
#include <stdint.h>
#include <stdlib.h>
#include <avr/interrupt.h>
/* Um dip switch com 8 chaves tem as entradas 1, 2 e 3 conectadas
as portas PB2 (terminal 51) e PB1 (terminal 52) e PB0 (terminal 53) da placa de
desenvolvimento ATmega 2560, respectivamente. Considere as chaves ideais. Um
LED L em PB7 (terminal 13) deve acender se PB2 e PB1 estiverem ligadas e apagar
se PB1 e PB0 estiverem ligadas. O LED não deve mudar de estado para outras
combinações das chaves*/
int main(void)
{
//led
DDRB = DDRB | (1 << DDB7); // fazemos PB7 uma saída
PORTB = PORTB & (~(1 << PORTB7)); // inicialmente o LED está apagado.
//configuramos as portas PB0, PB1 e PB2 como entradas
DDRB = DDRB & (~(1 << DDB0));
DDRB = DDRB & (~(1 << DDB1));
DDRB = DDRB & (~(1 << DDB2));
//adicionamos pull-up a essas portas
PORTB = PORTB | (1 << PORTB0);
PORTB = PORTB | (1 << PORTB1);
PORTB = PORTB | (1 << PORTB2);
while (1) {
// leitura dos pinos
uint8_t leitura = PINB & 0x07; // lê os pinos 0, 1 e 2
// verifica os estados dos pinos
switch (leitura) {
case 0x01: // Pino 0 ligado, pinos 1 e 2 desligados
PORTB |= (1 << PORTB7); // LED ligado
break;
case 0x04: // Pino 2 ligado, pinos 0 e 1 desligados
PORTB &= ~(1 << PORTB7); // LED desligado
break;
default: // Qualquer outro caso
break;
}
}
return 0;
}