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)?
Lesezeichen