Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > > > > > > > > Hallo, > > > > > > > > > > > > > > > > ich bin absoluter Neuling beim Programmieren mit BASIC. Bei jedem Versuch ein Programm > > > > > > > > zu Kompilieren wird die Fehlermeldung > > > > > > > > "Syntax Fehler - erwartete 'EOF' , gefunden 'define'" > > > > > > > > angezeigt > > > > > > > > > > > > > > > > Mein Miniprogramm zum Ausprobieren lautet im Moment : > > > > > > > > > > > > > > > > <basic>define eingang1 PORT[1] > > > > > > > > define eingang2 PORT[2] > > > > > > > > define ausgang3 PORT[3] > > > > > > > > > > > > > > > > Sub main() > > > > > > > > If eingang1 = True > > > > > > > > And eingang2 = True > > > > > > > > Then ausgang3 = True > > > > > > > > Else ausgang3 = False > > > > > > > > End If > > > > > > > > > > > > > > > > End Sub</basic> > > > > > > > > > > > > > > > > Ich programmiere mit C-Control Pro IDE eine C- Controll Pro Mega 128 > > > > > > > > > > > > > > > > Beim Doppelklicken auf den Fehlercode wird immer die erste beschriebene Programmzeile markiert. > > > > > > > > Bei "gefunden" im Fehlertext wird immer das erste Wort im Programm angezeigt. > > > > > > > > > > > > > > > > Was muss ich tun, dass dieses Problem nicht mehr Auftaucht. > > > > > > > > > > > > > > > > > > > > > > > > Vielen Dank im Vorraus > > > > > > > > Markus > > > > > > > > > > > > > > > > > > > > > > Hallo Markus, > > > > > > > > > > > > > > die Syntax die Du benutzt ist nicht kompatibel zur C-Control Pro. Stammt die vielleicht > > > > > > > von der C-Control I? Bitte schau in die Demoprogramme die mitgeliefert werden. > > > > > > > > > > > > > > Gruss Peter > > > > > > > > > > > > > > > > > > Hallo Peter, > > > > > > Danke für die schnelle Antwort. Ich werde mich mal durch die Demoprogramme wühlen. Weißt du ob > > > > > > es irgendwo ein Dokument gibt in dem der Syntax der C-Control Pro anschaulich und allgemein > > > > > > gehalten aufgelistet ist? > > > > > > > > > > > > Gruß Markus > > > > > > > > > > Hallo Markus, > > > > > > > > > > die Syntax des BASIC ist an Visual Basic angelehnt. Im Handbuch ist unter > > > > > Compiler die Syntax knapp zusammengefasst. Schau Dir mal eine Einführung > > > > > in ein älteres Visual Basic an, dann versuch vielleicht mal die Demoprogramme > > > > > zu verstehen. Einige Features wie Klassen oder Structures werden aber nicht > > > > > unterstützt. > > > > > > > > > > Gruss Peter > > > > > > > > > > > > Danke > > > > > > > > > hi > > > > > > bin auch noch nicht so der Mega Programmer, aber > > > das scheint wirklich ein Code aus der ccBasic Reihe zu sein. > > > > > > bei der Mega habe ICH noch keine Zuweisung des Portes auf eine define Alias zuweisung gefunden. > > > Was nicht heißen soll das es diese garnicht gibt, mir ist es eben nur noch nicht vor die Augen > > > gekommen. > > > > > > Deinen Code würde ich, mit meinen geringen wissen zur 128 wie folgt umsetzen. > > > Ob jetzt 100%ig richtig weiß ich nicht.... denke ja > > > <basic> > > > #define eingang1 1 'Achte auf die Raute am anfang # PORT[1] etc. gibt > > > #define eingang2 2 'es soweit ich weiß nicht. > > > #define ausgang3 3 > > > > > > Sub main() > > > Port_DataDirBit(eingang1,0) 'die richtung des Portes auf Eingang > > > Port_DataDirBit(eingang2,0) 'die richtung des Portes auf Eingang > > > Port_WriteBit(eingang1,1) 'Die Funktion Port_WriteBit setzt den Wert > > > 'eines Pins, der auf Ausgang geschaltet ist. > > > 'Ist ein Pin auf Eingang geschaltet, so kann der > > > 'interne Pullup Widerstand eingeschaltet (1) > > > 'oder abgeschaltet (0) werden. > > > Port_WriteBit(eingang2,1) ' > > > > > > > > > Port_DataDirBit(ausgang3,1) 'die richtung des Portes auf Ausgang > > > > > > Do While(1) 'Endloser Programmlauf, sonst würde es sofort > > > 'nach C-C Start beendet werden > > > > > > If eingang1 = True And eingang2 = True Then > > > Port_WriteBit(ausgang3,PORT_ON) > > > Else > > > Port_WriteBit(ausgang3,PORT_OFF) > > > End If > > > End While 'Ende der While schleife > > > End Sub > > > </basic> > > > > > > Ich hoffe ich Anfänger konnte dir etwas helfen, die sache zu verstehen, falls ich mist hier erzähle > > > bzw. fabriziert habe, darf gern jemand uns auf den rechten Pfad bringen ;) > > > > > > Gruß Jürgen > > > > Hallo, > > Vielen Dank für deine Antwort. Leider funktioniert das so auch nicht. Der Kompilierfehler > > ist zwar behoben (Klar der Syntax stimmt) allerdings ist die Funktion nicht gegeben. > > Um zu verstehen warum sollte ich folgendes wissen: > > Mit dem #define Befehl wird doch einer Variable eine Textkonstante zugeordnet > > - kann diese als Text hinterlegte Zahl überhaupt noch als Zahlenwert verwendet werden? > > - Wenn Ja, steht dann nicht in der IF Then Funktion nicht > > <basic> > > If 1 = True And 2 = True Then > > Port_WriteBit(ausgang3,PORT_ON) > > Else > > Port_WriteBit(ausgang3,PORT_OFF) > > End If > > </basic> > > ich meine mal gelesen zu haben (bitte korriegieren falsch falsch!!!), dass alle > > Zahlenwerte die nicht 0 sind True sind. Das würde erklären warum am Ausgang > > dauernd ein High signal anliegt. > > > > falls das soweit alles richtig war müsste diese IF THEN Funktion so lauten: > > <basic> > > If Port_ReadBit(Eingang1) = True And Port_ReadBit(Eingang2) = True Then > > Port_WriteBit (Ausgang1,PORT_ON) > > Else > > Port_WriteBit (Ausgang1,PORT_OFF) > > End If > > </basic> > > > > leider Funktioniert das so auch nicht! Jetzt kommt nach einer kurzen Zeit nach dem > > Start drücken der Ausgang. Beim Betätigen des Eingang1 passiert nichts. Beim > > Betätigen von Eingang2 geht der Ausgang aus und kommt wieder nach einer kurzen zeit. > > > > Mein Programm lautet: > > <basic> > > Sub main() > > > > ' Variablen deklarieren > > > > #define Eingang1 16 > > #define Eingang2 17 > > #define Ausgang1 18 > > > > ' Ports deklarieren > > > > Port_DataDirBit(Eingang1,0) ' Eingang 1 > > Port_DataDirBit(Eingang2,0) ' Eingang 2 > > Port_DataDirBit(Ausgang1,1) ' Ausgang > > > > Port_WriteBit (Eingang1,1) > > Port_WriteBit (Eingang1,1) > > > > Do While (1) > > ' Programm starten > > > > If Port_ReadBit(Eingang1) = True And Port_ReadBit(Eingang2) = True Then > > Port_WriteBit (Ausgang1,PORT_ON) > > Else > > Port_WriteBit (Ausgang1,PORT_OFF) > > End If > > > > End While > > > > > > > > > > End Sub > > </basic> > > Gruß Markus > > > Hallo Markus, > > Ja True bzw. False ist so ein ding... > > True=Wahr und false eben nichtwahr. > > In PHP zum beispiel wird ein wert zum beispiel mit == geprüft und auf True und False mit 3 === > > In deinem Falle würde ich ggf. einfach prüfen ob 1 oder 0 > > In diversen anderen "Basicas" hab ich zum True=1 und Flase=0 kennengelernt. > Zitat Hilfe: > Auch Vergleiche sind arithmetische Ausdrücke. > Die Vergleichsoperatoren liefern einen Wahrheitswert von "1" oder "0" zurück, > je nachdem, ob der Vergleich korrekt war. > Der Ausdruck "3 < 5" liefert den Wert "1" (wahr; true). > Zitat Ende: > > Demnach müsste > If (Port_ReadBit(Eingang1) = 1 ) = TRUE Then > bzw. > If (Port_ReadBit(Eingang1) = 1 And Port_ReadBit(Eingang2) = 1) = TRUE > > Also wenn die Bedingung das beide Eingänge = 1 erfüllt ist.... > Aber dieses Konstrukt ist mir nicht gebräuchlich. > > Die Eingänge bei dir sollten Invertiert sein.... Du ziehst ja gegen MASSE den Eingang > > Abhängig von deinen EINGANGSschaltern (Schliesser oder Öffner), ich geh jetzt mal von einfachen > schließern aus. dann ist bei nicht gedrückten schaltern, beide eingänge Logisch 1 > Wenn einer geschlossen / Betätigt wird, ist wird er gegen Masse auf 0 Gezogen. > > Demnach müsste die Prüfung so ausschauen > > #define schalterclose 1 > IF Port_ReadBit(Eingang1) = schalterclose And Port_ReadBit(Eingang2) = schalterclose Then > > Je nachdem wie du dein "Kontrollämpchen" LED/ Verbraucher am ausgang angeschlossen hast. > Könnte sich auch hier eine Invertierte logik eingeschlichen haben. > > Mit #define wird ein sogenanter ALIAS Name für einen festen WERT festgelegt. > (in anderen sprachen unter anderem auch als Constante bekannt) > Das erleichtert später viel änderungsarbeiten im zweifel. > und man kann im Code besser sehen was gemeint ist. > > > > > <basic> > ' ALIASNAMEN deklarieren '(KONSTANTEN sie können keinen anderen Wert Annehmen wie es variablen können) > #define SchalterOn 0 'invertierte Logik > #define Eingang1 16 > #define Eingang2 17 > #define Ausgang1 18 > > Sub main() > ' Ports deklarieren > Port_DataDirBit(Eingang1,0) ' Eingang 1 > Port_DataDirBit(Eingang2,0) ' Eingang 2 > port_DataDirBit(Ausgang1,1) ' Ausgang > > Port_WriteBit (Eingang1,1) > Port_WriteBit (Eingang1,1) > > Do While (1) > ' Programm starten > > If Port_ReadBit(Eingang1) = SchalterOn And Port_ReadBit(Eingang2) = SchalterOn Then > Port_WriteBit (Ausgang1,PORT_ON) 'ggf. ebenfalls invertierte logik dann tauschen > Else > Port_WriteBit (Ausgang1,PORT_OFF) > End If > > End While > End Sub > > > </basic> > > hoffe das hilft..... und funktioniert jetzt > > Gruss Jürgen