/**
 * 
 * @file main.c
 * @author Fábio Souza
 * @brief Exemplo para leitura de botão e acionamento de LED
 * @version 0.1
 * @date 2021-02-03
 * 
 * @copyright Franzininho 
 * This example code is in the Public Domain (or CC0 licensed, at your option.)
 * Unless required by applicable law or agreed to in writing, this
 * software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
 * CONDITIONS OF ANY KIND, either express or implied.
 * 
 */

#include <avr/io.h>
#include <avr/interrupt.h>

#define F_CPU 16500000L
 	
//Macro auxiliares para manipulação de bits   
#define setBit(valor,bit) (valor |= (1<<bit))
#define clearBit(valor,bit) (valor &= ~(1<<bit))
#define toogleBit(valor,bit) (valor ^= (1<<bit))
#define testBit(valor,bit)    (valor & (1<<bit))

// define o pino que o botão está conectado
#define BUTTON_PIN PB2
// define o pino que o LED está conectado
#define LED_PIN PB1


ISR (INT0_vect)        // Interrupt service routine 
{
  toogleBit(PORTB,LED_PIN);
}

int main()
{
  setBit(DDRB,LED_PIN); 	    // Configura Pino PB1 como saída (Pino do LED)
  clearBit(DDRB,BUTTON_PIN); //configura pino PB0 como entrada (pino do Botão)
  setBit(PORTB,BUTTON_PIN);  //habilita pull up para a entrada PB0 - garante nivel 
                             // lógico 1 quando botão não estiver pressionado
  
  setBit(GIMSK,INT0);        // Ativa a interrupção externa INT0
  setBit(MCUCR,ISC01);       //configura borda de descida
  sei();                     // Habilita as interrupções globais

  while(1)
  {

  }
   
   return 0;

}