#include <avr/io.h>
//Ligando e desligando um led quando botão for pressionado
#define F_CPU 16000000Ul
#include <avr/io.h>
#include <util/delay.h> //biblioteca para subrotina de delay_ms e delay_us
//definição dos macros para trabalhar com os bits
#define set_bit(Y, bit_x)(Y|=(1<<bit_x)) //ativa o bit
#define clr_bit(Y, bit_x)(Y&=~(1<<bit_x)) //zera o bit
#define cpl_bit(Y, bit_x)(Y^=(1<<bit_x)) //troca o estado
#define tst_bit(Y, bit_x)(Y&(1<<bit_x)) //testa o bit
#define LED PD2
#define BOTAO PD7
#define LED2 PD3
int main(){
DDRD = 0b00000100; //configurado como saída
PORTD = 0b11111011; //habilita pull-up
while(1){
if(!tst_bit(PIND, BOTAO)) //Se o botão for pressionado executa o if
{
while(!tst_bit(PIND,BOTAO)); //fica preso até a botão ser solto
_delay_ms(10); //atraso para eliminar o ruido
if(tst_bit(PORTD,LED)) //se o LED estiver apagado, liga o LED
clr_bit(PORTD,LED);
else
set_bit(PORTD,LED);
}
}
}