Hallo Michael,
tatsächlich sind nur zwei kleine Änderungen nötig.
Hier habe ich dir mal die neue Version für RC5 gemacht:
Code:
      If Flanken_index > 15 And Flanken_index < 27 Then     '!!!! geändert
       Locate 1 , 1
         If Print_pc = 1 Then Print "RC5: "
         I = 2                                              '!!!! geändert           Imp_array(4) ist das Toggle-bit
         Daten.0 = 1
         While I < Flanken_index                            '           Loop bis zur letzten Flanke, immer beim wichtigen Flankenwechsel in der Mitte des Impulses
            Shift Daten , Left                              '          Daten (Ergebnis) nach links schieben, 0 einfügen
            Daten.0 = Daten.1                               '            Das letzte Bit wie das vorletzte setzen
            If Imp_array(i) > 6 And Imp_array(i) < 11 Then  '           kurzer Impuls (also kein Wechsel 0->0 oder 1->1)
               Incr I                                       '           nächste Flanke
               If Imp_array(i) < 7 Or Imp_array(i) > 10 Then       '    kein kurzer Impuls => Fehler (wenn in der Mitte ein kurzer war, dann muss noch ein kurzer kommen)
                  Exit While                                '           Abbruch
               End If
            Elseif Imp_array(i) < 19 And Imp_array(i) > 15 Then       'langer Impuls (also Wechsel 1->0 oder 0->1)
               Toggle Daten.0                               '           also letztes bit umschalten
            Else
               Exit While                                   '           sonst Abbruch
            End If
            Incr I                                          '           nächste Flanke
            Incr Bit_count                                  '           zählt die Anzahl der korrekt gelesenen Bits
         Wend
         If I >= Flanken_index Then                         'Wenn kein Abbruch
            If Imp_array(i) < 19 And Imp_array(i) > 15 Then 'Falls am Ende noch ein bit-Wechsel 1->0 kommt
               Shift Daten , Left                           'Daten (Ergebnis) nach links schieben, 0 einfügen
               Incr Bit_count
            End If
            Temp_daten = Daten                              'Daten zwischenspeichern
            Befehl = Temp_daten And &B00111111              'Befehl sind die letzten 6 bits
            Shift Temp_daten , Right , 6                    'Befehls-bits rausshiften
            Geraet = Temp_daten And &B00011111              'Gerät sind die ersten 5 bits
            If Temp_daten.6 = 0 Then                        '!!!! neu
               Befehl = Befehl + 64                         '!!!! neu
            End If                                          '!!!! neu
            If Print_pc = 1 Then Print ": Ger=" ; Geraet ; ", Bef=" ; Befehl
            Cls
            Locate 1 , 1 : Lcd "RC5"
            Locate 2 , 1 : Lcd "Ger=" ; Geraet ; ", Bef=" ; Befehl
         End If
      End If
Gruß

Rolf