-
Wie hast Du den Umschalter angeschlossen?
Ich hoffe, Du hast ihn wie einen Taster gegen GND geschaltet. Dann muss es funktionieren, weil gedrückter Taster (Umschalter) ergibt 0 (Sprung nach code2), nicht gedrückter Taster ergibt 1 (Sprung nach code1).
Wenn er nur zur sub code2 verzweigt, dann sieht Dein Eingang Pind.4 keine 1, sondern nur 0.
-
ich danke euch sehr!
habe es so gelöst:
[c]
$regfile = "m16def.dat"
$crystal = 1000000
Config Lcd = 16 * 4
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.5 , Rs = Portb.4
Initlcd
Cls
Cursor Off
Dim Gray As Word
Dim Lobyte As Word
Dim Hibyte As Word
Config Pind.4 = Input
Umschalter Alias Pind.4
Config Pind.5 = Input
Pegel Alias Pind.5
Dim Zahl As Byte
Dim Zahl1 As Byte
Dim Zahl2 As Byte
Dim Code1 As Byte
Dim Code2 As Byte
Dim Programm As Byte
Dim Testen As Byte
Dim Umschalter As Word
Testen:
Do
If Pegel = 1 Then
Gosub Programm
Else
Locate 1 , 1
Lcd "PegelGeberTester"
Locate 3 , 1
Lcd "!!!KEIN GEBER!!!"
Waitms 600
Cls
Wait 1
End If
Loop
Programm:
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 250
Locate 2 , 7
Lcd " "
If Umschalter = 1 Then
Gosub Code2
Else
Loop
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 250
Locate 2 , 7
Lcd " -"
If Umschalter = 0 Then
Gosub Code1
Else
Loop
End If
End If
Loop
Loop
End
[/c]
-
...ich mal wieder! :-b
Und - hat´s funktioniert?
´n paar kleine Tips:
Wenn Du "Umschalter alias Pind.4" schreibst, brauchst Du "Dim Umschalter as..." nicht mehr. Dem Namen "Umschalter" ist dann automatisch das Bit Pind.4 zugeordnet. Wenn Du Umschalter zusätzlich als Word dimensionierst, verschenkst Du volle 15 Bits (1 Word = 2 Byte = 16 Bit!), die ziemlich umsonst freigehalten werden.
Gleiches gilt für Code1, Code2, Programm und Testen: Solche "Labels" muss man nicht dimensionieren. Du kannst sie einfach so in den Code reinschreiben.
Code:
If Umschalter = 0 Then
Gosub Code1
Else
Loop
End If
End If
- hat der Compiler da nicht gemeckert? Normalerweise muss für jedes "if" genau (!) ein "End if" kommen. Miene Bascom-Version motzt zumindestens immer sofort, wenn das Verhätnis nicht genau 1:1 ist.
Wenn Du für beide "if"-Fälle nur genau einen befehl hast, kann das auch in eine Zeile, dann barucht´s gar kein "end if":
If Umschalter = 0 then gosub Code1 else loop
Gruß & Co.,
Daniel