-         

Ergebnis 1 bis 3 von 3

Thema: Fragen zum Timer-Interrupt

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    23.02.2006
    Beiträge
    40

    Fragen zum Timer-Interrupt

    Anzeige

    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 ..



    Code:
        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

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    28.03.2004
    Beiträge
    185
    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:
    Code:
    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

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    23.02.2006
    Beiträge
    40
    Hallo tomas,

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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •