
Zitat von
matlxxx
die gosub Befehl wird bei basic++ nicht mehr unterstützt!
Nur zur Info: Der GOSUB Befehl wird in BASIC++ unterstützt (akt. Version 2.1.0.250). Aber wer nutzt denn schon unübersichtliche Befehle, wie GOSUB, die auf ein Label springen? Da kann man auch gleich mit Assembler arbeiten.
Ich habe den Code mal umgeändert, so dass er von BASIC++ kompiliert werden kann:
Code:
'**********************************************************
' C-Control Station
'
' Springbrunnen Regelung
'
' Die Haupt-Pumpe (Hp) läuft grunsätzlich immer, ausser wenn
' es nicht genug Wasser im Brunnen hat.
'
' Der Wasserspiegel wird konstant via Drucksensor (Ds) gemes-
' sen und bei bedarf nach gefüllt via Magnetventil (Mv) oder
' abgepumpt via kleine Pumpe (Kp).
'
' Der Wasserstrahl ist über den Wasserspiegel kontrolliert.
' Je höher der Wasserspiegel, desto tiefer der Stahl. Je
' tiefer der Wasserspiegel desto höher der Strahl.
'
' Der Anenometer [Windmesser] (Am) bewirkt eine Reduzierung
' des Wasserstrahls bei Wind. Eine Durchschnittsmessung
' (Schwellwert) von 1 Minute ist für ein ruhiges verhalten.
'
' Es sind 3 Betriebsarten einstellbar.
'
' Automatisch (F1):
' Hiermit wird der Stahl immer auf das Maximum gebracht.
'
' Halbautomatisch (F2):
' Hiermit kann man eine selbst definierte Höhe des Wasser-
' stahls festlegen der aber bei Wind via Windmessung reduziert
' wird.
'
' Manuel (F3):
' Hiermit kann man eine selbst definierte Höhe des Wasser-
' stahls festlegen der ohne Windmessung immer gleich bleibt.
'
' Die Betriebsart wird via F1, F2 und F3 bestimmt.
'
' Auf dem Display ist immer die Aktuelle Wasserstrahlhöhe
' zu sehen.
'**********************************************************
' --- Definitionen ---
' die Relais
define Hp port[7]
define Mv port[8]
define Kp port[9]
' der Drucksensor
define Ds port[1]
' der Anenometer
define Am ad[5]
' die Folien-Funktionstasten
define F1 port[9]
define F2 port[10]
define F3 port[11]
' eine Variable zur Speicherung der Windgeschwindigkeit
define Wgs word
' Variablen zur Speicherung der Wasserstrahlhöhe
define Strahlhöhe byte
define StrahlhöheAktuell byte
' Konstanten
const C10 = 10 ' = 10
' --- das Programm ---
' Initialisierung
Hp = OFF
Mv = OFF
Kp = OFF
' Endlosschleife
do
' Tastenabfrage
if ((not F1) = 1) or (F2 = 1) or (F3 = 1) then Auswahl()
loop
' Betriebsarte auswählen
Function Auswahl()
Hp = OFF
Print "Springbrunnen - "
Print "Betriebsart Wahl"
wait F1 or F2 or F3
if F1 = 1 then Automatisch()
if F2 = 1 then Halbautomatisch()
if F3 = 1 then Manuel()
end function
' Schleifen der einzelnen Betriebsarten
' Endlosschleife für Automatisch
Function Automatisch()
PRINT "Automatikbetrieb"
pause 25
do
loop until ((not f1) = 1)
end function
' Endlosschleife für Halbautomatisch
Function Halbautomatisch()
Print "Halbautomatik-"
Print "betrieb"
pause 25
do
Loop until ((not F2) = 1)
end function
' Endlosschleife für Manuel
Function Manuel()
Print "Manuelbetrieb"
pause 25
do
loop until ((not f3) = 1)
end function
Übrigens: DEFINE zur Deklaration einer Konstanten wird in so gut wie keiner Programmiersprache verwendet (halt nur in CCBasic). Aus diesem Grund wurde es sinnvollerweise in BASIC++ auch analog zu anderen Programmiersprachen CONST genannt.
Die zusätzlichen Klammern dienen der Übersicht. Du hast vergessen die Funktionen mit END FUNCTION abzuschließen. Ein RETURN springt nur aus einer Funktion raus.
Bitte keine Labels "LOOP" nennen (auch wenn BASIC++ das zulässt). Sowas ist schlechter Stil. Bei größeren Programmen wirst Du selbst merken, dass das unübersichtlich wird. Man sollte ohnehin auf Labels verzichten.
Außerdem solltest Du anstatt "F1 = 1" besser "F1 = ON" schreiben. 1 und ON ist nicht das gleiche!
Lesezeichen