-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Zwischen 2 Verschiedenen Programmen umschalten

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    27.01.2006
    Beiträge
    82

    Zwischen 2 Verschiedenen Programmen umschalten

    Anzeige

    Hallo!
    ich habe noch ein Problem.
    und zwar soll in der Schaltung ein Schalter eingebaut werden, mit dem man 2 Verschiedene Programme umschalten kann.
    ich habe mir erst sowas gedacht:

    Config Pind.0 = Input
    Umschalter Alias Pind.0

    If Umschalter =1 then
    Do
    'programm für Gray-code Geber
    waitms 500
    loop
    end if
    If Umschalter =0 then
    Do
    'programm für BCD
    Waitms 500
    Loop
    End if
    and

    Es funktioniert so leider nicht.
    µC ist ein Mega16 mit lcd dran.

    Kann mir einer sagen, was ich falsch gemacht habe?
    Danke

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987
    Problem an der Sache ist, dass das Programm, wenns mal in einer der Do-Loop-Schleifen ist, dort auch nicht mehr rauskommt.
    Wenn der Umschalter 1 ist, wird das Programm für den BCD-Code gestartet. Wird der Umschalter auf 0 gesetzt, wird der BCD-Teil weiter ausgeführt, da er ja die Zeile "If Umschalter = 0..." nie erreicht.

    Abhilfe wäre z.B. wenn du vor "If Umschalter = 1..." eine Sprungmarke machst (z.B. Restart: ) und in jeder Do-Loop schleife nen Vergleich; Wenn sich der Umschalter ändert, dann GOTO Restart.

    Evtl gibts ja noch ne bessere Möglichkeit, aber so würds ich grad machen.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    27.01.2006
    Beiträge
    82
    danke für die Antwort!
    und wie macht man das Code mäßig?

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    25.09.2007
    Ort
    Oldenburg
    Alter
    43
    Beiträge
    80
    Du könntest bei den jeweiligen LOOP-Befehlen ein UNTIL einfügen, also bei der oberen Schleife LOOP UNTIL UMSCHALTER=0 und bei der unteren Schleife =1, das sollte auch funktionieren. Alternativ fragst Du einfach den Zustand von Umschalter innerhalb beider Schleifen ab (IF Umschalter=1 goto label (in Schleife2). Oder Du baust nur eine Schleife und machst nur eine IF THEN ELSE Abfrage, in welcher Du die beiden Programmteile unterbringst:

    do
    IF umschalter=1 then
    code1
    else
    code2
    endif
    loop

    Viele Wege führen nach Rom
    Alles wird gut... Gruß Alex

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    27.01.2006
    Beiträge
    82
    Danke für die tolle idee.
    Der Compiler will aber nicht.
    Was ist bei mir falsch?





    Initlcd

    Cls
    Cursor Off

    Dim Gray As Word
    Dim Lobyte As Word
    Dim Hibyte As Word
    Config Pind.4 = Input
    Umschalter Alias Pind.4
    Dim Zahl As Byte
    Dim Zahl1 As Byte
    Dim Zahl2 As Byte
    Dim Code1 As Word
    Dim Code2 As Word

    Do
    IF umschalter=1 then
    Code1
    else
    Code2
    End If
    Loop

    Code1
    Do

    Locate 1 , 1
    Lcd "P.G.Tester(GRAY)"
    Locate 4 , 1
    Lcd "Ausbildung EGS05"

    Locate 2 , 5
    Lcd "*-"
    Locate 2 , 10
    Lcd "-*"
    Locate 3 , 3
    Lcd "------------"


    Do

    Lobyte = Pina
    Hibyte = Pinc
    Hibyte = Hibyte And &B0000000000001111

    Rotate Hibyte , Left , 8

    Gray = Lobyte + Hibyte

    Gray = Gray2bin(gray)



    Locate 2 , 7
    Lcd Gray

    Waitms 200
    Locate 2 , 7
    Lcd " "




    Code2

    Do

    Locate 1 , 1
    Lcd "P.G.Tester(BCD)"
    Locate 4 , 1
    Lcd "Ausbildung EGS05"


    Locate 2 , 5
    Lcd "*-"
    Locate 2 , 10
    Lcd "-*"
    Locate 3 , 3
    Lcd "------------"

    Do

    Zahl = Pina
    Zahl = Zahl And &B00001111
    Locate 2 , 9
    Lcd Zahl

    Zahl1 = Pind
    Zahl1 = Zahl1 And &B00001111
    Locate 2 , 8
    Lcd Zahl1

    Zahl2 = Pinc
    Zahl2 = Zahl2 And &B00001111
    Locate 2 , 7
    Lcd Zahl2

    Waitms 150
    Locate 2 , 7
    Lcd " -"

    Loop
    Loop
    End

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    12.10.2006
    Beiträge
    21
    Was sollen pina, pinc, pind ?
    Ansonsten kannst Du es wie folgt machen:

    Initlcd

    Cls
    Cursor Off

    Dim Gray As Word
    Dim Lobyte As Word
    Dim Hibyte As Word
    Config Pind.4 = Input
    Umschalter Alias Pind.4
    Dim Zahl As Byte
    Dim Zahl1 As Byte
    Dim Zahl2 As Byte
    Dim Code1 As Word
    Dim Code2 As Word

    Do
    If Umschalter = 1 Then
    Gosub Code1
    Else
    Gosub Code2
    End If

    Loop

    Code1:
    Locate 1 , 1
    Lcd "P.G.Tester(GRAY)"
    Locate 4 , 1
    Lcd "Ausbildung EGS05"

    Locate 2 , 5
    Lcd "*-"
    Locate 2 , 10
    Lcd "-*"
    Locate 3 , 3
    Lcd "------------"

    Lobyte = Pina
    Hibyte = Pinc
    Hibyte = Hibyte And &B0000000000001111

    Rotate Hibyte , Left , 8

    Gray = Lobyte + Hibyte

    Gray = Gray2bin(gray)



    Locate 2 , 7
    Lcd Gray

    Waitms 200
    Locate 2 , 7
    Lcd " "

    Return


    Code2:

    Locate 1 , 1
    Lcd "P.G.Tester(BCD)"
    Locate 4 , 1
    Lcd "Ausbildung EGS05"


    Locate 2 , 5
    Lcd "*-"
    Locate 2 , 10
    Lcd "-*"
    Locate 3 , 3
    Lcd "------------"

    Zahl = Pina
    Zahl = Zahl And &B00001111
    Locate 2 , 9
    Lcd Zahl

    Zahl1 = Pind
    Zahl1 = Zahl1 And &B00001111
    Locate 2 , 8
    Lcd Zahl1

    Zahl2 = Pinc
    Zahl2 = Zahl2 And &B00001111
    Locate 2 , 7
    Lcd Zahl2

    Waitms 150
    Locate 2 , 7
    Lcd " -"

    Return


    End

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    25.09.2007
    Ort
    Oldenburg
    Alter
    43
    Beiträge
    80
    Nein, Deine Schleifen sind total verquer:

    Der Programmteil muss ohne do / loop in die If-then Schleife. Habe gerad enicht mehr Zeit, mache ich nacher...
    Alles wird gut... Gruß Alex

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    27.01.2006
    Beiträge
    82
    habe ich gerade ausprobiert.
    jetzt macht er immer code2.
    lässt sich also nicht umschalten.
    Warum?

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    27.01.2006
    Beiträge
    82
    Zitat Zitat von Skragan
    Nein, Deine Schleifen sind total verquer:

    Der Programmteil muss ohne do / loop in die If-then Schleife. Habe gerad enicht mehr Zeit, mache ich nacher...
    ich habe noch eine Stunde Zeit, dann kommt mein Meister

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    25.09.2007
    Ort
    Oldenburg
    Alter
    43
    Beiträge
    80
    so wie radebeul es geschrieben hat, muss es funktionieren. Aber ehrlich gesagt blicke ich durch den Rest des Codes nicht durch
    Alles wird gut... Gruß Alex

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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