#define __AVR_ATmega2560__ #define F_CPU 16000000UL #include #include #include #include volatile int debounce_int2 = 10; volatile int debounce_int3 = 10; ISR(INT2_vect) { if (debounce_int2) return; debounce_int2 = 100; OCR0A++; } ISR(INT3_vect) { if (debounce_int3) return; debounce_int3 = 100; OCR0A--; } ISR(TIMER0_COMPA_vect) { PORTF ^= 0b00000001; } void main() { DDRF = 0b00000001; DDRD = 0b00000000; PORTD |= 0b00001100; // EIMSK controls which ports can trigger interrupts EIMSK |= _BV(INT2) | _BV(INT3); // Trigger on falling edge on INT2 and INT3 EICRA |= _BV(ISC21) | _BV(ISC31); TCCR0B |= _BV(CS00) | _BV(CS02); // clk/1024 TIMSK0 |= _BV(OCIE0A); OCR0A = 0; sei(); while(1) { _delay_ms(10); OCR0A++; } }