//
// External Interrupt and Sleep Mode
// By PEK '2006
//
// Compiler: GCC
// MCU: ATMega48
//

#define F_CPU 1000000

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <avr/sleep.h>

// External interrupt ISR
ISR(INT0_vect)
{
}

int main(void)
{	
	uint8_t counter = 0;

	// Initiate Ports
	PORTB = 0x00;
	DDRB = 0xFF;	// PortB as output

	// Initiate External Interrupt
	EICRA = _BV(ISC00) | _BV(ISC01);	// Rising edge of INT0 generates an interrupt
	EIMSK = _BV(INT0);	// External inerrupt enable
	
	sei();	// Enable global interrupts
	
	while(1)
	{
		set_sleep_mode(SLEEP_MODE_IDLE);	// IDLE mode enabled during sleep
		sleep_mode();

		counter++;
		PORTB = counter;

		_delay_ms(100);
	}
	
	return 1;
}
