Guten Morgen,

danke für die schnelle Antwort! Bin gestern nur nicht mehr dazu gekommen noch weiter zu basteln.
Hier also meine Erkenntnisse von heute:
Ich habe die ganzen if-else-Abfragen auskommentiert, das IR-Bit erst am Ende der ISR rückgesetzt und den Counter an P0 ausgegeben. Und jetzt wirds richtig mysteriös:
Wenn ich eine Kombination übergebe, die VORHER im if-else des 1. Bytes abgefangen wurde geht alles gut, er zählt ganz normal bis 5 hoch und ich bin glücklich.
Wenn ich eine Kombination übergebe, die nicht im if-else des 1. Bytes enthalten war (s. Anfangsthread), dann zählt er 1 - 2 und sofort 3 - 4 - 5 - 6!
Ich habe also ein Oszilloskop drangehängt und mir mal angeschaut, was auf der Interruptleitung passiert. Fazit: Egal, was ich für Werte übergebe, es schaut immer gleich aus (okay, mit gewissen Toleranzen, die von der 'Echtzeitfähigkeit' von Windows kommen)! Sprich, es wird definitiv nur ein Interrupt ausgelöst!!!
Hab auch bei beiden switches einen default: break eingefügt, hat auch nix gebracht.

Hast du vielleicht noch Ideen??? Hast ja geschrieben fürs erste

Im folgenden nochmal mein Code (in der neuen Fassung):
Code:
void TriggerISR() interrupt 8
{

	P0_DATA &= 0xf8;
	switch (counter)
	{
		case 0:
			time1 = P3_DATA; 		//get LSB of time
			break;
		
		case 1:
			time2 = P3_DATA;		//get 2nd byte of time
			break;

		case 2:
			time3 = P3_DATA;	  	//get MSB of time
			if (time3 == 0)
			break;

		case 3:
			phase = P3_DATA;		//get phase information
			break;

		case 4:
			switch (P3_DATA)
			{
				case 0:
					usePhase = 0;		  	//-> phase ignored
					mainc = 0;				//use serial contactors
					break;
				case 1:
					usePhase = 1;			//-> phase important
					mainc = 0;				//use serial contactors
					break;
				case 2:
					usePhase = 0;	 		//-> phase ignored
					mainc = 1;				//use main contactor
					break;
				case 3:
					usePhase = 1;			//-> phase important
					mainc = 1;				//use main contactor
					break;
				
				default:
					break;
			}
			break;

		default:
			break;
	}
	counter++;
	P0_DATA = counter;
	IRCON0 &= 0xfb;					//reset IR-Bit of trigger
}