Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: Fehlermeldung: erwartete 'OEF' Kategorie: Programmierung Basic (von Jürgen A. - 6.12.2012 12:41)
Als Antwort auf Re: Fehlermeldung: erwartete 'OEF' von Markus - 5.12.2012 23:06
Ich nutze:
C-Control Pro Mega128
> > > > > > > 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 :
> > > > > > >
> > > > > > > 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

> > > > > > >
> > > > > > > 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
> >
> > #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
> >

> >
> > 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
>
>   If 1 = True And  2 = True Then
>                       Port_WriteBit(ausgang3,PORT_ON)
>               Else
>                       Port_WriteBit(ausgang3,PORT_OFF)
>               End If
>

>   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:
>
>   If Port_ReadBit(Eingang1) = True And Port_ReadBit(Eingang2) = True  Then
>      Port_WriteBit (Ausgang1,PORT_ON)
>      Else
>      Port_WriteBit (Ausgang1,PORT_OFF)
>   End If
>

>
> 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:
>
> 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
>

> 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.





' 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




hoffe das hilft..... und funktioniert jetzt

Gruss Jürgen


    Antwort schreiben


Antworten: