- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 4 von 4

Thema: Anfängerfrage: Schalterabfrage in Subroutine

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.715
    Blog-Einträge
    133
    Hallo,
    ich habe in dem zitierten Code mal etwas hinzugefügt und markiert. Das Grüne würde ich der Übersicht halber mit aufnehmen, da sonst die Bascom IDE Einstellungen gültig sind, die man nicht immer gegenwärtig hat.

    Bei dem roten Gosub liegt ziemlich sicher ein Problem vor. Das Programm verläßt dort das Unterprogramm ohne den Stackpointer richtig zu bedienen, sondern legt eine weitere Rücksprungadresse auf den Stack statt sich die richtige zurückzuholen. Es muß mit Return zurückgesprungen werden! In der "Main" kann das Programm nur wieder zu einem neuen Gosub aber nicht auf ein Return treffen und der Stack wird vermutlich irgendwann überlaufen. Ob da sonst noch Fehler sind hab ich jetzt nicht weiter überprüft.

    Zitat Zitat von derrabe Beitrag anzeigen
    Code:
    $regfile "m88def.dat"
    $crystal = 8000000
    $swstack = 32
    $hwstack = 32
    $framesize = 32
    $baud = 19200
    .
    .
    Main:
    Do
       If Sw1 = 0 Then
         Waitms 4000
         If Sw1 = 0 Then
           Gosub Pumpen
         End If
      End If
    Loop
    End
    
    Pumpen:
      Set Led
      If Sw1 = 1 Then
        Waitms 4000
        If Sw1 = 1 Then
          Reset Led
          Gosub Main
        End If
      End If
    Return

    Um die Konstruktion zu umgehen könnte man den SW1 in der Main Loop auf beide Zustände prüfen und dann in jeweils ein Unterprogramm springen. zB:
    Code:
    Do
      If Sw1 = 0 And Led = Aus Then Gosub Pumpe_an   'Aus ist eine Konstante mit Wert 0
      If Sw1 = 1 And Led = An Then Gosub Pumpe_aus   'Ein ist eine Konstante mit Wert 1
    Loop
    In den jeweiligen Unterprogrammen kann man dann die 4 Sekunden warten, nochmal SW1 abfragen, eventuell schalten und dann ordnungsgemäß mit Return zurück zum Hauptprogramm.

    Eine von vielen Möglichkeiten mit und ohne Timer. So ein waitms hält ja das Programm immer an ...

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

  2. #2
    Wenn sw1=0 ist geht es zum UP Pumpen. Die Led wird eingeschaltet und, da sw1=0 ist geht es sofort wieder zurück. Man muss hier einfügen "bitwait sw1, set".
    An dem "gosub main" störe ich mich, da das ja kein UP ist. Es ist überflüssig. Nach dem return geht es ja sowieso zurück.
    Ich hoffe, meine Nachricht kommt nicht zu spät.
    dolivo

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    57
    Beiträge
    2.814
    Wenn man nicht den Controller mit warten auslasten will, könnte man SW1 an einen Interrupteingang anschließen und da dann einen Timer starten. Der Timerinterrupt startet dann das eigentliche pumpen. Damit hat man dann "freie" Prozessorzeit, mit der man noch andere dinge ausführen lassen kann (z.B. ein zweiter Speicher mit Pumpe).

Ähnliche Themen

  1. waitms wird von einer Subroutine "eingefangen"
    Von oberallgeier im Forum C - Programmierung (GCC u.a.)
    Antworten: 6
    Letzter Beitrag: 02.12.2012, 00:00
  2. Sprung zw. Haupt- und Subroutine
    Von SlimJim1988 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 10
    Letzter Beitrag: 27.06.2009, 11:19
  3. Tabelle als Übergabeparameter von Subroutine?
    Von screwdriver im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 09.01.2009, 15:45
  4. LCD über Subroutine ansprechen ???
    Von Enrico3 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 21
    Letzter Beitrag: 23.02.2007, 09:31
  5. Schalterabfrage - erbitte dringend Hilfe!
    Von triturus im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 9
    Letzter Beitrag: 23.04.2004, 11:33

Berechtigungen

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

Labornetzteil AliExpress