$regfile = "m8def.dat" '$crystal = 8000000 'da der interne 8MHz Oszillator bei mir nicht genau lief und auf dem 'Terminal manchmal Müllzeichen 'rauskamen, dieser kleine Trick ' (ich wollte nicht extra 'nen Quatz anschließen) $crystal = 7900000 $baud = 9600 Ddrd = &B00000000 Portd = &B10000000 Signal Alias Pind.7 'Ziel: Auflösung 50uS -> 20000 Samples / Sekunde 'Platz im Array : 500 Byte * 8 = 4000 Samples 'dadurch 200 ms Beobachtungsfenster Dim Irdata(500) As Byte Dim I As Word Dim Wdummy As Word Dim Millis As Word Dim Zeichen As Byte Dim Maske As Byte 'hier geht's los Do 'Array löschen For I = 1 To 500 Irdata(i) = 0 Next I Print : Print : Print : Print "Start" I = 1 Maske = 1 'Dieser Befehl dauert 6 Takte im Erfolgsfall, das erste Meßintervall 'ist dadurch also 6 Takte bzw. ca. 1 uS kürzer, also 49 statt 50 uS Bitwait Signal , Reset Do 'Diese Schleife ist so aufgebaut, daß sie immer gleich lange läuft, 'egal ob das Programm in den IF oder Else-Zweig geht If Signal = 1 Then Irdata(i) = Irdata(i) Or Maske Else Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop nop End If Rotate Maske , Left If Maske = 1 Then Incr I Else Incr Wdummy nop End If 'ein Durchlauf muß 400 Takte dauern, damit 50us erreicht werden bei 8mhz 'das kann man natürlich auch mit anderen Dummy-Befehlen machen.. Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop: Nop Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop: Nop Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop: Nop Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop: Nop Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop: Nop Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop: Nop Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop: Nop Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop: Nop Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop: Nop Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop: Nop Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop: Nop Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop: Nop Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop: Nop Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop: Nop Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop: Nop Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop: Nop Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop: Nop Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop: Nop Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop: Nop Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop: Nop Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop: Nop Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop: Nop Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop: Nop Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop: Nop Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop: Nop Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop: Nop Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop: Nop Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop: Nop Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop: Nop Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop : Nop: Nop Loop Until I = 501 'jetzt ausgeben Zeichen = 0 Millis = 0 Print : Print : Print "IRWatcher. 1 Stelle = 50 uSekunden" Print Print "0 ms" For I = 1 To 500 For Maske = 0 To 7 Print Irdata(i).maske; Incr Zeichen If Zeichen = 40 Then Print Incr Millis Incr Millis Print Millis ; " ms" Zeichen = 0 End If Next Maske Next I 'noch 2 Sekunden warten, damit der Benutzer die Taste an der Fernbedienung 'loslassen kann Wait 2 Loop End