Danke erstmal für die zahlreichen Antworten.
Ja das ist kla, aber sie wird ja über eine Endlosschleife im Hauptprogramm aufgerufen, nicht über ein Interrupt.

'Hauptprogramm
Do
Call Wait_and_get(5)
Loop


'Funktion zum IR Emfang und Programmaufruf
Sub Wait_and_get(byval Ms As Integer)
<emfängt IR>
If Ir_command = 17 Then Goto Programm1
<usw>
End Sub


Programm1:
Do
<Macht irgendwas>
Call Wait_and_get(0)
Loop
Return

Das Hauptprogramm ruft also endlos die Funktion Wait_and_get auf.
Wenn die Fkt ein IR Signal emfängt ruft diese wiederum das passende Programm auf (hier Programm1).

Programm1 wird dann wegen der Do Loop Schleife dauer ausgeführt.
Programm1 hat allerdings die Fkt Wait_and_get implementiert, um zu prüfen ob ein neuer IR Command ankommt (=Programmwechsel).

Die Fkt Wait_and_get ist jetzt mit "End Sub" beendet, und die Programme mit "Return".

Wenn ich jetzt gedoch das Programm ca 10-12 mal wechsel stürzt der µC ab.