/**
*
* @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;
}