Hallo,
wenn du schon einen externen Interrupt Pin benutzt, dann würde ich die Auswertung auch direkt selber machen.
Ich bin mir sehr sicher, dass GETRC5() das erste Paket nicht richtig erkennen kann, da die erste Flanke fehlt. Ist das Paket dann nach 25ms durch, kommt eine Pause von 114ms, bevor das zweite Paket gesendet wird.
Jetzt wird der Befehl in weiteren 25ms erkannt. Der µC hat bei 16MHz in der Zwischenzeit 2.500.000 Zyklen abgespult. Bleibt man einen Moment zu lange auf der Taste sind es wieder 2.500.000 Zyklen. Und auch bei Dirks Version findet das Ganze in einer ISR statt.
Hast du in der ISR die Zeiten der Flankenwechsel in einem kleinen Array mitgeloggt, brauchst du im Hauptprogramm nur diese paar Befehle um einen gültigen RC5 Befehl zu erkennen:
Code:
If Flanken_anzahl > 15 And Flanken_anzahl < 27 And Flanken_anzahl.0 = 0 Then
   If Imp_array(2) > kurz_min And Imp_array(2) < kurz_max And Imp_array(3) > kurz_min And Imp_array(3) < kurz_max Then       
      I = 4
      Daten = 1
      While I < Flanken_anzahl
         Shift Daten , Left
         Daten.0 = Daten.1
         If Imp_array(i) > kurz_min And Imp_array(i) < kurz_max Then
            Incr I
            If Imp_array(i) <= kurz_min Or Imp_array(i) >= kurz_max Then
               Exit While         'fehlerhafter Empfang
            End If
         Elseif Imp_array(i) > lang_min And Imp_array(i) < lang_max Then
            Toggle Daten.0
         Else
            Exit While            'fehlerhafter Empfang
         End If
         Incr I
      Wend
      If I >= Flanken_anzahl Then
         If Imp_array(i) > lang_min And Imp_array(i) < lang_max Then
            Shift Daten , Left
         End If
         Temp_daten = Daten
         Rc5_befehl = Temp_daten And &B00111111
         Shift Temp_daten , Right , 6
         Rc5_adresse = Temp_daten And &B00111111
         Print  "Adresse=" ; Rc5_adresse ; ", Befehl=" ; Rc5_befehl
      End If
   End If
End If
Und das geht bestimmt 1000 mal so schnell, denn 2500 Zyklen braucht er sicher nicht dafür.

Gruß

Rolf