Zitat 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!