- LiTime Speicher und Akkus         
Ergebnis 1 bis 4 von 4

Thema: Interrupt benutzen, um Sub zu beenden?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    07.01.2010
    Ort
    Deutschland
    Beiträge
    739

    Interrupt benutzen, um Sub zu beenden?

    Hallo Forum,
    ich habe folgendes Problem:
    Ich habe einen Taster und 3 verschiedene Programme, die nacheinander über den Taster wählbar sein sollen.
    Die jeweiligen Programme besitzen jeweils einen Sub.
    Bei mir sieht das jetzt so aus:
    Der Taster löst einen Interrupt aus und zählt eine Variable um eins hoch. In der Hauptschleife wird über ein Case-Select der entsprechende Sub angesprochen.
    Jetzt ist aber mein Problem das in den Sub(die etwas länger dauern) auch schleifen drin sind. Wie kann ich das machen, das sobald der Interrupt ausgelöst wird, auch den Sub mitten drin abbricht?

    Ich würde mich sehr über hilfreiche Antworten freuen.
    Mfg
    bnitram

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.702
    Blog-Einträge
    133
    Ohne Code kann man nicht so leicht antworten. Prinzipiell würde ich in dem Interrupt, der den Abbruch einer Sub auslösen soll, ein Flag setzten. In der Schleife der entsprechenden Sub wird auch immer dieses Flag abgefragt und im Abbruchfall zB mit Goto zum Ende (Return) der Sub gesprungen.

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    52
    Beiträge
    765
    Wozu mit Goto zum Return springen? Einfach gleich ein Return rein.

    Code:
    $regfile = "m88Adef.dat"
    $baud = 19200
    $crystal = 8000000
    
    Config Watchdog = 512
    
    $hwstack = 160
    $swstack = 100
    $framesize = 100
    
    Ddrb = &B00011100
    
    Led1 Alias Portb.2
    Led2 Alias Portb.3
    Led3 Alias Portb.3
    
    Config Int0 = Falling
    On Int0 Isr_int0
    
    Dim Bstop As Bit
    Dim L As Long
    Enable Int0
    Enable Interrupts
    
    Do
       Gosub Prg1
       Waitms 100                                               'entprellen
       Gosub Prg2
       Waitms 100                                               'entprellen
       Gosub Prg3
       Waitms 100                                               'entprellen
    Loop
    End
    
    Prg1:
    
       Reset Bstop
       Do
          Toggle Led1
          For L = 1 To 1000
             Waitms 1
             If Bstop = 1 Then
                Return
             End If
          Next L
       Loop
    
    Return
    
    Prg2:
    
       Reset Bstop
       Do
          Toggle Led2
          For L = 1 To 1000
             Waitms 1
             If Bstop = 1 Then
                Return
             End If
          Next L
       Loop
    
    Return
    
    Prg3:
    
       Reset Bstop
       Do
          Toggle Led3
          For L = 1 To 1000
             Waitms 1
             If Bstop = 1 Then
                Return
             End If
          Next L
       Loop
    
    Return
    
    Isr_int0:
       Set Bstop
    Return
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    07.01.2010
    Ort
    Deutschland
    Beiträge
    739
    Hallo,
    danke für die Antworten.
    Ich denke ich werde mal die 2. Möglichkeit testen.
    Ich melde mich morgen nochmal.

    Mfg
    bnitram

Ähnliche Themen

  1. Subroutinen durch Interrupt beenden
    Von stefan_Z im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 21.07.2007, 16:54
  2. programme beenden
    Von peaceman im Forum Robby CCRP5
    Antworten: 2
    Letzter Beitrag: 09.07.2006, 11:36
  3. Prozess beenden
    Von Jimmy C im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 10.01.2005, 20:53
  4. Wie kann ich einen Interrupt benutzen?
    Von MartinITM im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 12
    Letzter Beitrag: 13.10.2004, 11:16
  5. Interrupt des Subsystems benutzen???
    Von X1-Alpha im Forum Robby CCRP5
    Antworten: 2
    Letzter Beitrag: 04.01.2004, 19:04

Berechtigungen

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

LiTime Speicher und Akkus