Hallo Robert,

ich kann es selber noch gar nicht fassen, aber es geht!
Es ist tatsächlich so, dass der externe Interrupt 4 bei einer negativen Flanke an P3.7 den Request auslöst.
Und jetzt weiß ich auch, warum meine Abfrage am Anfang der ISR nix gebracht hat (s. gestern abend)...
In dem Testprogramm, das ich wieder verwendet habe, hatte ich testweise den Strobe auf einen anderen Interruptkanal gelegt. Das habe ich aber gestern abend übersehen und die Leitung nicht umgesteckt. Das heißt, er hat einen Request ausgelöst, nur war leider an der Stelle, wo normalerweise der IR-Vektor steht ein NOP. Also ist er das ganze Memory durchgelaufen, bis er auf den nächsten Befehl gelaufen ist - und das war wie es der Zufall so will genau meine TriggerISR...
Jetzt habe ich den Strobe wieder auf den Interrupt-Kanal gelegt, wo er hingehört und meine ISR angepasst - und es geht!!
Ich poste dir jetzt hier nochmal eben meine ISR. Wenn du willst kann ich dir später auch gerne nochmal mein komplettes Programm posten - hat sich doch noch etwas geändert - wenn ich die Änderungen übernommen und getestet habe.

Meine (Test-)ISR:
Code:
void TriggerISR() interrupt 9
{
 	P0_DATA &= 0xf8;
	if (IRCON0 != 0x8)
	{
		IRCON0 &= 0x8;
	}
	else
	{
		switch (counter)
		{
			case 0:
				time1 = P3_DATA; 		//get LSB of time
				if (time1 == 0)
				{
					P0_DATA |= 1;
				}
				else
				{
					if (time1 == 2)
					{
						P0_DATA |= 2;
					}
				}
				break;
			
			case 1:
				time2 = P3_DATA;		//get 2nd byte of time
				/*if (time1 > 127 && error == 1)
				{
					error = 0;
					counter--;
				}*/
				if (time2 == 0)
				{
					P0_DATA |= 0x3;
				}
				else
				{
					if (time2 == 1)
					{
						P0_DATA |= 0x4;
					}
				}
				break;
	
			case 2:
				time3 = P3_DATA;	  	//get MSB of time
				if (time3 == 0)
				{
					P0_DATA |= 0x1;
				}
				else
				{
					if (time3 == 13)
					{
						P0_DATA |= 0x7;
					}
				}
				break;
	
			case 3:
				phase = P3_DATA;		//get phase information
				if (phase == 0)
				{
					P0_DATA |= 0x6;
				}
				else
				{
					if (phase == 128)
					{
						P0_DATA |= 0x1;
					}
				}
				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++;
		IRCON0 = 0;					//reset IR-Bit of trigger
	}
}
Puh, das war eine schwere Geburt. Aber sie ist geschafft
Wie sagt man englisch so schön "You're a star!". Soll heißen, nochmal vielen vielen vielen Dank für deine Hilfe, ohne dich wäre ich glaube ich in 2 Wochen immer noch dagesessen und hätte den Fehler gesucht.

Viele Grüße nach Wien und eine schöne Restwoche (is ja eh nimmer lang )
Michael