Hallo,
MCUCR = ~(1<<ISC01);
MCUCR = (1<<ISC00);
Erste Zeile hat hier wohl nicht viel zu sagen, weil Du in der zweiten Zeile den ganzen Register sowieso überschreibst...
Lass die erste Zeile für das Beispielprogramm ganz weg.
Du stellst Interrupt bei logischem Weschsel an Int 0 ein, ist es denn Hardwaremäßig so gegeben ?
Welchen Level hat der INT0 ?
Ist da ein Pulldown dran ?
selbst wenn ja, machst Du hier 2 Interrupts schnell hintereinander, also:
Du gehst mit Deinen +5V Draht an den Pin dran -> interrupt, machst den Draht weg -> interrupt
Mach es z.B so:
Code:
 //Pins bzw. Ports als Ein-/Ausgänge konfigurieren 
   DDRC |= 0x11;   //10001000 -> PORTC.4 ist blinkende LED im Hauptprogramm, PORTC.0 ist Anzeige des Interrupts 
   DDRD |= 0x00;   //00000000 -> PORTD.2 ist Interrupt0 (Der ausgelöst werden soll)
 PORTD = (1<<PD2); /*internen Pullup einschalten*/
 MCUCR = (1<<ISC01); /*Interrupt bei fallender Flanke*/ 
   GICR = (1<<INT0); 
   sei();
Jetzt kannst Du Deinen Draht zwischen GND und PD2 halten,
so müßte es funktionieren

Gruß Sebastian