Hallo,

ich habe mir mit Code aus dem Forum folgendes Programm zum Auslesen des Summensignal meines RC-Empfängers zusammengebastelt:

Code:
$regfile "m32def.dat"
$framesize = 42
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600

Config Timer0 = Timer , Prescale = 256                      'Timer0 auf 16µs/Takt, Überlauf bei ca. 4ms
Enable Timer0
On Timer0 Sync
Config Int0 = Falling
Enable Interrupts
Enable Int0
On Int0 Signalmessung

Dim Kanal(7) As Byte
Dim Channel As Byte

Do

Print "  " ; Kanal(1) ; "  " ; Kanal(2) ; "  " ; Kanal(3) ; "  " ; Kanal(4) ; "  " ; Kanal(5) ; "  " ; Kanal(6) ; "  " ; Kanal(7)

Loop


Signalmessung:
Kanal(channel) = Timer0
Timer0 = 0
Incr Channel
Return


Sync:
Channel = 0
Return
Das Auslesen der 7 Kanäle klappt wunderbar, allerdings verstehe ich einen Teil im Code nicht.

Code:
Sync:
Channel = 0
Return
Das ist noch klar. Bei einem Überlauf des Timers (verursacht durch die Pause im Signal) wird channel auf 0 gesetzt.

Code:
Signalmessung:
Kanal(channel) = Timer0
Timer0 = 0
Incr Channel
Return
Auf die Pause folgt der 1. Kanal, dieser endet mit einer fallenden Flanke (die erste nach der Pause) und löst den Int0 aus. Dann wird doch dort der Timer an Kanal(0) übergeben, da channel ja durch den vorhergehenden Sync-Aufruf auf 0 steht.

1.) Kanal(0) ist aber doch gar nicht im Array Kanal(7) enthalten.
2.) Warum finde ich den Wert von Kanal 1 in Kanal(1) und nicht (s.o) in Kanal(0)?