Zitat Zitat von Sauerbruch
Und dann habe ich in manchen Threads gelesen, dass die GetRC5-Abfrage in einer ISR problematisch sein kann, weil die erste Synchronisationsflanke fehlt.
Da RC5 immer mindestens zweimal den Code sendet, geht der erste dabei zwar verloren, aber den zweiten bekommt die Routine dann mit. Der Bascom Befehl scheint da tolerant zu sein. Allerdings würde ich auch nur ein Flag in der ISR setzen und den GetRC5() Befehl dann in der Hauptschleife anwenden.

Zitat Zitat von Sauerbruch
Nur mal so und zum Testen, ob es grundsätzlich funktioniert, würde ich mal einen Code probieren, bei dem der GetRC5-Befehl in der Hauptschleife steht.
Das auf jeden Fall. So minimal wie möglich, wenn man zweifel an Hard- und Software hat.

@luvat: Hier habe ich dir mal ein paar Zeilen zusammengeschrieben (ungetestet), falls du kein Oszi hast. Es sollten die High und Low Zeiten aller Intervalle ausgegeben werden.
Code:
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600

Ddrd.2 = 1                                       'hier wird das Signal eingelesen
Dim Interval(200) As Word
Dim Flanken_anzahl As Byte
Dim Print_flag As Byte
Dim I As Byte
Config Timer0 = Timer Prescale = 64
Load Timer0 , 25
On Timer0 Timer0_isr                                        'ergibt 10KHz Abtastfrequenz, also 100µs Zeitwerte
Enable Timer0
Config Int0 = Change
On Int0 Int0_isr
Enable Int0
Enable Interrupts
Flanken_anzahl = 1

Do
   If Print_flag = 1 Then
      Print_flag = 0
      Print Flanken_anzahl; ":";
      For I = 1 To Flanken_anzahl
         Print Interval(i) ; " ";
         Interval(i) = 0
      Next I
      Print ""
      Flanken_anzahl = 1
   End If
Loop
End

Timer0_isr:
   Incr Interval(flanken_anzahl)
   If Interval(flanken_anzahl) > 10000 Then                 'Ausgabe nach 1 Sekunde ohne weitere Signale
      Print_flag = 1
   End If
Return

Int0_isr:
   Incr Flanken_anzahl
   If Flanken_anzahl > 200 Then
      Flanken_anzahl = 200
      Print_flag = 1
      Print "Too many intervals"
   End If
Return