- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 25

Thema: Unterprogramme

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    22.03.2012
    Beiträge
    80

    Unterprogramme

    Hallo
    wie kann ich in Bascom Unterprogramme machen ich habe ein sehr langes Programm und es ist auch mit RS232 steuerbar und ich möchte diese Steuerung gerne in ein Unterprogramm packen Sodas die restliche Steuerung ohne Pausen weiter läuft.

    Danke im Voraus

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Mit den Befehlen Gosub und Return.

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    53
    Beiträge
    765
    Code:
    Do
       Reset Watchdog' wenn man ihn nutzt
       Gosub Uhranzeigen ' wird jedesmal aufgerufen
    
       If Ischarwaiting() = 1 Then ' Wenn Zeichen über RS232 angekommen ist, dann dahin, sonst einfach mit Hauptschleife weitermachen
            Gosub Empfangen
       End If
    Loop
    End
    
    Empfangen:
       A = Inkey()
       If A >= 13 Then ' alles kleiner 13 wird einfach abgeschnitten. Nutze ich hauptsächlich, da ich Werte im String übertrage
             If A = 13 Then
                Gosub Auswerten
             Else
                If Len(seingang) < Maxlaenge Then ' nicht, dass seingang "platzt" und die nächsten Variablen überschreibt
                   Seingang = Seingang + Chr(a)
                End If
             End If
       End If
    Return
    
    Auswerten:
    ... '  hier der Code, um das Empfangene auszuwerten
    ...
    ...
    return
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    22.03.2012
    Beiträge
    80
    $crystal = 1000000
    $regfile = "m16def.dat"
    $baud = 2400
    Config Pinb.6 = Input
    Config Portc = Output




    Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Prescale = 1

    Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , _
    Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0

    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Start Adc

    Config Lcd = 16 * 2
    Cursor Off
    Cls


    Dim Asd As String * 255
    Dim P1 As Integer
    Dim P2 As Integer
    Dim P3 As Integer
    Dim P4 As Integer
    Dim P5 As Integer
    Dim P6 As Integer
    Dim P7 As Integer
    Dim P8 As Integer
    Dim P9 As Integer
    Dim P10 As Integer

    Do


    If Pinb.6 = 0 Then
    Locate 1 , 1
    Lcd P1

    Locate 1 , 5
    Lcd "P1"

    Locate 1 , 8
    Lcd P2

    Locate 1 , 12
    Lcd "P2"

    Locate 2 , 1
    Lcd P3

    Locate 2 , 5
    Lcd "P3"

    Locate 2 , 7
    Lcd P4

    Locate 2 , 11
    Lcd "P4"

    Locate 2 , 13
    Lcd P5

    Else

    Locate 1 , 1
    Lcd P6

    Locate 1 , 5
    Lcd "P6"

    Locate 1 , 8
    Lcd P7

    Locate 1 , 12
    Lcd "P7"

    Locate 2 , 1
    Lcd P8

    Locate 2 , 5
    Lcd "P8"

    Locate 2 , 7
    Lcd P9

    Locate 2 , 11
    Lcd "P9"

    Locate 2 , 13
    Lcd P10
    End If

    P6 = Getadc(0)
    P7 = Getadc(1)
    P8 = Getadc(2)
    P9 = Getadc(3)
    P10 = Getadc(4)

    If P1 <> P6 Then Portc.0 = 1 Else Portc.0 = 0
    If P1 = P6 Then Portc.1 = 1 Else Portc.1 = 0

    If P2 <> P7 Then Portc.2 = 1 Else Portc.2 = 0
    If P2 = P7 Then Portc.3 = 1 Else Portc.3 = 0

    If P3 <> P8 Then Portc.4 = 1 Else Portc.4 = 0
    If P3 = P8 Then Portc.5 = 1 Else Portc.5 = 0

    If P4 <> P9 Then Portc.6 = 1 Else Portc.6 = 0
    If P4 = P9 Then Portc.7 = 1 Else Portc.7 = 0

    'ANFANG UNTERPROGRAMM

    Asd = ""
    Input Asd

    Select Case Asd
    Case "1,"
    Input P1

    Print P1

    Case "2," 'p2 schreiben
    Input P2

    Print P2

    Case "3," 'p3 schreiben
    Input P3

    Print P3

    Case "4," 'p3 schreiben
    Input P4

    Print P4

    Case "5," 'p3 schreiben
    Input P5

    Print P5
    End Select

    'ENDE UNTERPROGRAMM

    Loop

    End
    ICH MÖCHTE DEN BEREICH WO anfang und ende unterprogramm steht in ein unterprogramm packen damit der rest einfach weiter läuft

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    53
    Beiträge
    765
    Der Rest läuft nicht einfach weiter. Ein Input blockiert den MC auch in einem Unterprogramm, wenn da keine Daten anliegen.

    Code:
    $crystal = 1000000
    $regfile = "m16def.dat"
    $baud = 2400
    Config Pinb.6 = Input
    Config Portc = Output
    
    
    
    
    Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Prescale = 1
    
    Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , _
    Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
    
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Start Adc
    
    Config Lcd = 16 * 2
    Cursor Off
    Cls
    
    
    Dim Asd As String * 5
    Dim P0 As Byte At Asd Overlay
    Dim P1 As Word At Asd + 2 Overlay
    
    Dim B As Byte
    Dim P(10) As Word
    
    Do
    
    
    If Pinb.6 = 0 Then
       Locate 1 , 1
       Lcd P(1)
    
       Locate 1 , 5
       Lcd "P1"
    
       Locate 1 , 8
       Lcd P(2)
    
       Locate 1 , 12
       Lcd "P2"
    
       Locate 2 , 1
       Lcd P(3)
    
       Locate 2 , 5
       Lcd "P3"
    
       Locate 2 , 7
       Lcd P(4)
    
       Locate 2 , 11
       Lcd "P4"
    
       Locate 2 , 13
       Lcd P(5)
    
    Else
    
       Locate 1 , 1
       Lcd P(6)
    
       Locate 1 , 5
       Lcd "P6"
    
       Locate 1 , 8
       Lcd P(7)
    
       Locate 1 , 12
       Lcd "P7"
    
       Locate 2 , 1
       Lcd P(8)
    
       Locate 2 , 5
       Lcd "P8"
    
       Locate 2 , 7
       Lcd P(9)
    
       Locate 2 , 11
       Lcd "P9"
    
       Locate 2 , 13
       Lcd P(10 )
    End If
    
    P(6) = Getadc(0)
    P(7) = Getadc(1)
    P(8) = Getadc(2)
    P(9) = Getadc(3)
    P(10) = Getadc(4)
    
    If P(1) <> P(6) Then Portc.0 = 1 Else Portc.0 = 0
    If P(1) = P(6) Then Portc.1 = 1 Else Portc.1 = 0
    
    If P(2) <> P(7) Then Portc.2 = 1 Else Portc.2 = 0
    If P(2) = P(7) Then Portc.3 = 1 Else Portc.3 = 0
    
    If P(3) <> P(8) Then Portc.4 = 1 Else Portc.4 = 0
    If P(3) = P(8) Then Portc.5 = 1 Else Portc.5 = 0
    
    If P(4) <> P(9) Then Portc.6 = 1 Else Portc.6 = 0
    If P(4) = P(9) Then Portc.7 = 1 Else Portc.7 = 0
    
    'ANFANG UNTERPROGRAMM
    
    If Ischarwaiting() = 1 Then
       Gosub Empfangen
    End If
    'ENDE UNTERPROGRAMM
    
    Loop
    
    End
    
    Empfangen:
       B = Inkey()
       If Len(asd) < 5 Then
          Asd = Asd + Chr(b)
       End If
       If Len(asd) = 5 Then
          Gosub Auswerten
       End If
    Return
    
    
    Auswerten:
    If P0 > 0 And P0 < 6 Then
       P(p0) = P1
       Print P(p0)
    End If
    asd=""
    Return
    Könnte jetzt laufen.
    Jedoch wird keine Abweichung / Versatz abgefangen


    Wer sendet denn die Daten und wie werden die abgeschlossen?
    Geändert von peterfido (05.06.2012 um 19:27 Uhr) Grund: Neuer Code So könnte es laufen
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    22.03.2012
    Beiträge
    80
    sie werden vom pc gesendet (bascom oder putty ) per RS232
    also jetzt ist es so das wenn ich 1, absende weiß der amtega16 die vari. p1 wird jetzt mit der nächsten zahl beschrieben und wenn er das gemacht hat gibt er die gleiche zahl zurück. nur hält das programm an wenn ich nichts sende was mein prob. ist

Ähnliche Themen

  1. Unterprogramme in C?
    Von Mindhunter im Forum Software, Algorithmen und KI
    Antworten: 8
    Letzter Beitrag: 01.10.2010, 10:47
  2. Problem: Unterprogramme mit Nullstellensuche
    Von wodka_cheery im Forum C - Programmierung (GCC u.a.)
    Antworten: 5
    Letzter Beitrag: 11.12.2007, 22:34
  3. unterprogramme machen
    Von drunkenmunky im Forum AVR Hardwarethemen
    Antworten: 2
    Letzter Beitrag: 09.04.2006, 17:45
  4. Externe Unterprogramme im AVR Studio
    Von kaisobczak im Forum AVR Hardwarethemen
    Antworten: 9
    Letzter Beitrag: 27.04.2005, 13:58
  5. [ERLEDIGT] zwei Unterprogramme sollen zur gleichen Zeit laufen
    Von Gast im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 7
    Letzter Beitrag: 30.03.2004, 14:40

Stichworte

Berechtigungen

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

Solar Speicher und Akkus Tests