Erst einmal vielen Dank für eure Mühe!

Folgenden Code finde ich sehr einfach und übersichtlich.
Bei "volatile uint8_t RegA_akt = PINA" hat der Compiler gemeckert, daher den Umweg über InitKeys().
Tastenentprellung ist noch nicht drin.
Code:
volatile uint8_t RegA_akt;						// übergeordnete Variable			

void InitKeys(void)
{
	RegA_akt = PINA;							// aktuelles Register A wird gespeichert
}

ISR (PCINT0_vect)								// Interrupt, aus Bank0, wird ausgelöst
{
	uint8_t Auswahl = 0;
	uint8_t RegA_neu = PINA;
	uint8_t RegA_diff = RegA_akt ^ RegA_neu;  // veränderte Bits werden mit 1 belegt

	if((RegA_diff & (1<<PINA4)) != 0)					// PA4 wurde verändert
	{
		if((RegA_neu & (1<<PINA4)) == 0)	Auswahl=40;	// PA4 ist low	
		if((RegA_neu & (1<<PINA4)) != 0)	Auswahl=41;	// PA4 ist high
	}

	if((RegA_diff & (1<<PINA5)) != 0)					// PA5 wurde verändert
	{
		if((RegA_neu & (1<<PINA5)) == 0)	Auswahl=50;	// PA5 ist low
		if((RegA_neu & (1<<PINA5)) != 0)	Auswahl=51;	// PA5 ist high
	}

	switch(Auswahl)
	{
		case 40:	LEDaus();	Auswahl=0;	InitKeys();	break;	// PA4 low
		case 41:	LEDein();	Auswahl=0;	InitKeys();	break;	// PA4 high
		case 50:	SUMaus();	Auswahl=0;	InitKeys();	break;	// PA5 low
		case 51:	SUMein();	Auswahl=0;	InitKeys();	break;	// PA4 high
	}
}
@Holomino, deine Tastenentprellung habe ich noch nicht in Gänze verstanden.

Wie kann man aus einem ISR, einen Wert zurück geben, außer eine erneute volatile-Variable zu verwenden?


Euch ein angenehmes Wochenende