HI Hannes!

Danke für deine schnelle Antwort.

Habe den Variablen in volatile Variablen geändert. Die If/Else rausgeschmissen und in switch case geändert.
Leider bestand das Problem immer noch. Des Rätzels Lösung war, den Toggelbefehl in "else if (c == 2)" in - LED ein - warten - LED aus - warten - zu ändern. Jetzt läuft es fast so wie ich mir das vorgestellt habe.
Das einzige Problem das jetzt noch besteht ist, dass ich den Schalter teilweise mehrmals betätigen muss um das Blinkmuster zu verändern.
Woran kann das denn liegen?

Hier nochmal der geänderte Code:
Code:
#define F_CPU 1000000UL

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

#define LED1 0
#define LED2 1
#define LED3 2
#define LED4 3

//variablen für interrupt
volatile int a = 1;
volatile int b = 2;
volatile int c;
volatile int d;

int main(void)
{
	
	//I/O-Ports einstellen
	DDRB = 0b00001111;
	
	//Einstellung Interrupt
	PORTD = 0b00000100;
	GIMSK = (1<<INT0);

	//Globale interrupts aktivieren
	sei();
	
	//Wert in Variable setzen
	c = 2;
	
	while (1)
	{
		
		switch(c)
		
		{
			case 1:
				PORTB |= ((1<<LED1) | (1<<LED3));	//LED1 und 3 ein
				PORTB &= ~((1<<LED2) | (1<<LED4));	//LED2 und 4 aus
		
				_delay_ms(500);
		
				PORTB |= ((1<<LED2) | (1<<LED4));	//LED2 und 4 ein
				PORTB &= ~((1<<LED1) | (1<<LED3));	//LED1 und 3 aus
		
				_delay_ms(500);
			break;
			case 2:
				PORTB |= ((1<<LED1) | (1<<LED2) | (1<<LED3) | (1<<LED4));	//LED1-4 ein
				_delay_ms(500);
				PORTB &= ~((1<<LED1) | (1<<LED2) | (1<<LED3) | (1<<LED4));	//LED1-4 aus
				_delay_ms(500);
			break;
			
		}		
		
	}

}

ISR(INT0_vect)

{
	
	{
		
		//switch case Abfrage
		switch(c)
		{
			case 1: d = b;
			break;
			case 2: d = a;
			break;
			default: PORTB &= ~((1<<LED1) | (1<<LED2) | (1<<LED3) | (1<<LED4));
		}
	
	c = d;
	return;
	_delay_ms(250);

        }
}
Gruß Alex