PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fragen zum Timer-Interrupt



jojo3
12.05.2006, 11:19
Hallo!
Ich bastle an einem Programm um DCC-Daten an meine Modellbahn
zu schicken. Klappt auch soweit, nur ist mir etwas mit dem Timer-Interrupt nicht klar. Wenn ich in meinem Programm die for-next-Schleife
auf z.b 64 ändere, stimmt das Timing für das DCC nicht mehr,
sollte doch aber wegen des Interupts unabhängig sein oder ?
In den DO_Loop-Schleifen warte ich jeweils auf den Nächsten Interrupt.
Vielleicht weis jemand was ..






For Adresse = 1 To 128
T = Dcc_h

If Fkt(adresse) <> 0 Then
For X = 1 To 12 'PREAMBLE
Hw = 0
T = Dcc_h
Do : Nop : Loop Until Hw = 2
Next X

Hw = 0 'PACKET
T = Dcc_l
Do : Nop : Loop Until Hw = 2

For X = 7 To 0 Step -1 'ADRESSE
Hw = 0
If Adresse.x = 1 Then T = Dcc_h Else T = Dcc_l
Do : Nop : Loop Until Hw = 2
Next X

Hw = 0 'PACKET
T = Dcc_l
Do : Nop : Loop Until Hw = 2

For X = 7 To 0 Step -1 'DATEN
Hw = 0
If Fkt(adresse).x = 1 Then T = Dcc_h Else T = Dcc_l
Do : Nop : Loop Until Hw = 2
Next X

Hw = 0 'PACKET
T = Dcc_l
Do : Nop : Loop Until Hw = 2

Check = Adresse Xor Fkt(adresse)
For X = 7 To 0 Step -1 'ERR_CHECK
Hw = 0
If Check.x = 1 Then T = Dcc_h Else T = Dcc_l
Do : Nop : Loop Until Hw = 2
Next X

Hw = 0 'PACKET END
T = Dcc_h
Do : Nop : Loop Until Hw = 2

End If
Next Adresse

Loop




Tim0_isr:
Tcnt0 = T
Incr Hw
Toggle Dcc_a : Toggle Dcc_b
Return

-tomas-
12.05.2006, 14:42
Du hast nur einen Codeschnipsel veröffentlicht. Ich vermute, du benutzt den Interrupt ohne der Nosave-Option.
Ein Interrupt sprengt dann schnell den Rahmen - besser gesagt überschreibt Dir ein paar Variablen :-)

Bascom-Handbuch:
HW Stack ... An interrupt needs 32 bytes.
bzw. im Detail:
push r0
push r1
push r2
push r3
push r4
push r5
push r7
push r10
push r11
push r16
push r17
push r18
push r19
push r20
push r21
push r22
push r23
push r24
push r25
push r26
push r27
push r28
push r29
push r30
push r31
in r24, SREG
push r24
... 'Code
pop r24
out SREG, r24
pop r31
pop r30
pop r29
pop r28
pop r27
pop r26
pop r25
pop r24
pop r23
pop r22
pop r21
pop r20
pop r19
pop r18
pop r17
pop r16
pop r11
pop r10
pop r7
pop r5
pop r4
pop r3
pop r2
pop r1
pop r0
reti

jojo3
13.05.2006, 07:18
Hallo tomas,

danke für den Tip.
Ich hab mal testweise den hwstack erhöht auf 64 Byte
und schon klappts!