Das Problem bei Dir ist, daß Du auf Flankenänderung reagieren mußt, und nicht auf Taste gedrückt, Taste los.
Ich schicke Dir ein kleines Programm, guck mal ob Du es verstehst, wenn nicht frag einfach mal. An PORT B hängen die LEDs , PD0 der Taster
Code:
#include<avr/io.h>
#include<avr/interrupt.h>

ISR (TIMER0_OVF_vect) {
static  uint8_t flanke = (1<<PD1);
/*flanke 1 Pin 1 -> keine Aenderung 0
flanke 1 Pin 0 -> Tasten druck 1
flanke 0 PIN 0 -> keine Aenderung 0
flanke 0 PIN 1 -> Taste losgelassen 1
*/
 if (flanke ^ (PIND&(1<<PD1))){
   if (flanke)
     PORTB =~PORTB;
   flanke ^= (1<<PD1);
 }
}

int main(void) {
  TIMSK = (1<<TOIE0);
  TCCR0= (1<<CS02)|(1<<CS00);  
  DDRD = 0x00;
  PORTD = 0xFF;
  DDRB = 0xFF;
  PORTB = 0xFF;
  sei();
  while(1);
  return 0;
}
Gruß Sebastian