mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hilfe bei Bascom Programm benötigt


Autor: Andi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi, nach längerem Hin und Her hatte ich es ja geschafft ein Programm auf 
meine Mikrocontroller zu bekommen.

Nun zeigt mir Bascom aber immer Error, und wenn ich versuche ein Error 
zu beheben, dann kommen 2 andere hinzu???!??!?!!???!?!?!?
Ich komme einfach nicht weiter....
Hier das Programm und im Anhang ist meine Vorstellung vom Programm in 
SPS S7 Sprache.....

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
        $regfile = "m16def.dat"
$framesize = 16
$swstack = 16
$hwstack = 16
$crystal = 1000000

Config Porta.0 = Input
 S1 Alias Porta.0

Config Porta.1 = Input
 S2 Alias Porta.1

Config Porta.2 = Input
 S34 Alias Porta.2

Config Porta.4 = Input
 S5 Alias Porta.4

Config Porta.5 = Output
 K1 Alias Porta.5

Config Porta.6 = Output
 H1 Alias Porta.6


 Do




 If S1 = 1

 Then
 Waitms 1000
  K1 = 1

If S2 = 1 And Merker0 = 0                                   'Positive 
Flanke
Then Merker0 = 1
If S2 = 0
Then Merker0 = 0

If S2 = 1 And Merker0 = 0                                   'Alarm 
scharf schalten, Positive Flanke
Then Merker1 = 1

If S1 = 1 And S2 = 1                                        'Entschärfen
Then Merker1 = 0

If S5 = 1                                                   'Entschärfen
Then Merker1 = 0

If Merker1 = 1 And S34                                      'Alarm 
ausgelöst
Then
H1 = 1
K1 = 1
Waitms 5000
K1 = 0
H1 = 1                                                      'Hupe und 
Klingel abwechselnd
Waitms 5000
H1 = 0
K1 = 1
Waitms 5000
K1 = 0
H1 = 1
Waitms 5000
H1 = 0
K1 = 1
Waitms 5000
K1 = 1
H1 = 1
Waitms 5000
H1 = 0
K1 = 1
Waitms 5000
K1 = 0
H1 = 0
Waitms 100000
H1 = 1
Waitms 5000
H1 = 0
K1 = 1
Waitms 5000
K1 = 0
H1 = 1
Waitms 5000
H1 = 0
K1 = 1
Waitms 5000
K1 = 0
H1 = 1
Waitms 5000
H1 = 0
K1 = 1
Waitms 5000
K1 = 0
H1 = 0
Merker1 = 0


Loop

End

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

Vielleicht kann ja einer von euch Profis schnell mal ein Blick drüber 
werfen.

Danke


MfG Andi

Autor: Andi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier das richtige Bild

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andi schrieb:

> Vielleicht kann ja einer von euch Profis schnell mal ein Blick drüber
> werfen.

Tu dir selbst einen Gefallen und such dir ein BASCOM-Tutorial im Web. DU 
kannst dir nicht einfach syntaxmässig irgendwelche Dinge ausdenken 
sonder musst nach den Regeln spielen

Autor: Maik M. (myco)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da sind so einige Fehler drin, zB. sind merker0 und merker1 nicht 
deklariert, da solltest du vor der do...loop irgendwo so etwas einfügen
Dim merker0 As Bit
Dim merker1 As Bit

das Wort "Then" muss immer in die selbe Zeile wie "If"
vor Loop fehlt ein "End If"
Waitms 100000 geht nicht, weil 100000 ausserhalb des möglichen liegt

> If Merker1 = 1 And S34
da fehlt ein Vergleich wie zB. "S34 = 1"

Bascom ist sehr pingelig, am besten man kompiliert nach jeder kleinen 
Änderung, und erst wenn das funktioniert schreibt man weiter. Irgendwann 
hat man dann einen gewissen Erfahrungswert, und man kann größere 
Schritte machen.

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe schon mehrere Tuts angeschaut, aber die haben ja fast immer den 
selben Inhalt mit Hello World und so:


Hier der neue Entwurf:


        $regfile = "m16def.dat"
$framesize = 16
$swstack = 16
$hwstack = 16
$crystal = 1000000

Config Porta.0 = Input
 S1 Alias Porta.0

Config Porta.1 = Input
 S2 Alias Porta.1

Config Porta.2 = Input
 S34 Alias Porta.2

Config Porta.4 = Input
 S5 Alias Porta.4

Config Porta.5 = Output
 K1 Alias Porta.5

Config Porta.6 = Output
 H1 Alias Porta.6

 Dim merker0 As Bit
Dim merker1 As Bit

 Do




 If S1 = 1   Then


 Waitms 1000
  K1 = 1

If S2 = 1 And Merker0 = 0 Then Merker0 = 1
If S2 = 0 Then Merker0 = 0

If S2 = 1 And Merker0 = 0 Then Merker1 = 1

If S1 = 1 And S2 = 1 Then Merker1 = 0

If S5 = 1 Then Merker1 = 0

If Merker1 = 1 And S34 = 1 Then
H1 = 1
K1 = 1
Waitms 5000
K1 = 0
H1 = 1
Waitms 5000
H1 = 0
K1 = 1
Waitms 5000
K1 = 0
H1 = 1
Waitms 5000
H1 = 0
K1 = 1
Waitms 5000
K1 = 1
H1 = 1
Waitms 5000
H1 = 0
K1 = 1
Waitms 5000
K1 = 0
H1 = 0
Waitms 9999
H1 = 1
Waitms 5000
H1 = 0
K1 = 1
Waitms 5000
K1 = 0
H1 = 1
Waitms 5000
H1 = 0
K1 = 1
Waitms 5000
K1 = 0
H1 = 1
Waitms 5000
H1 = 0
K1 = 1
Waitms 5000
K1 = 0
H1 = 0
Merker1 = 0


End If
Loop

End




Allerdings sind immer noch 2 Errors vorhanden, welche ich aber nicht per 
Doppelklick anzeigen lassen kann:

Error: 7 Line: 0 IF THEN expected [98] , in File:
Error: 123 Line: 0 END IF expected , in File:


Mfg ........d........e...........r........Andi

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andi schrieb:
> Ich habe schon mehrere Tuts angeschaut, aber die haben ja fast immer den
> selben Inhalt mit Hello World und so:

Dann musst du auch weiter lesen.

Alternativ kanmn man, wenn man erst mal ein wenig Übung hat, auch die 
BASCOM Hilfe zu rate ziehen.

zb steht dort, dass die Syntax lautet

   IF   Bedingung   THEN

      Anweisung, auch mehrere Anweisungen

   ENDIF


>  If S1 = 1   Then
>
>
>  Waitms 1000
>   K1 = 1

Wo ist hier das ENDIF?


Und rück deinen Code ein, damit nicht alles an der linken Kante klebt.
Dein Code hat eine Struktur. Einrückungen können die Struktur zeigen! 
Aber dazu muss man sie auch machen

Autor: Matthias S. (mat-sche)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Andi,

mein Vorredner hat es schon richtig gesagt. Schau mal in die Hilfe unter 
Language Fundamentals. Hier nen paar Tips:

1. if-Anweisung

* if a= 0 then B = 1 => wenn nur eine dann-Bedingung in eine Zeile
* if a= 0 then
     b = 1
     c = 1
  end if => wenn mehrere Bedingungen erfüllt werden sollen, dann immer 
mit ein end if beenden.

2. alle Variablen sind zu deklarieren:
* dim a as bit
* dim b as byte.......

Eine gute Seite für den Start ist hier: 
http://www.rn-wissen.de/index.php/Kategorie:Quellcode_Bascom

und hier das Forum, was ich sehr 
schätze:http://www.roboternetz.de/phpBB2/viewforum.php?f=32

Da wird Dir geholfen :)

Grüße Matthias

Autor: zuDummZu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
entweder Du schreibst den Teil nach "Then" in die gleiche Zeile, oder Du 
schreibst ein EndIf.

Kommentier einfach alles aus, bis keine Kompilierfehler mehr kommen, und 
nimm dann die Kommentare zeilenweise wieder weg.

statt waitms 5000 geht auch wait 5..

;-)

Autor: peterfido (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es fehlt noch ein "end if" vor dem loop

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:

> Und rück deinen Code ein, damit nicht alles an der linken Kante klebt.
> Dein Code hat eine Struktur. Einrückungen können die Struktur zeigen!
> Aber dazu muss man sie auch machen

Verlgeich mal hiermit
$regfile = "m16def.dat"
$framesize = 16
$swstack = 16
$hwstack = 16
$crystal = 1000000

Config Porta.0 = Input
 S1 Alias Porta.0

Config Porta.1 = Input
 S2 Alias Porta.1

Config Porta.2 = Input
 S34 Alias Porta.2

Config Porta.4 = Input
 S5 Alias Porta.4

Config Porta.5 = Output
 K1 Alias Porta.5

Config Porta.6 = Output
 H1 Alias Porta.6

Dim Merker0 As Bit
Dim merker1 As Bit

Do
  If S1 = 1 Then
    Waitms 1000
    K1 = 1
  End If

  If S2 = 1 And Merker0 = 0 Then Merker0 = 1
  If S2 = 0 Then Merker0 = 0

  If S2 = 1 And Merker0 = 0 Then Merker1 = 1

  If S1 = 1 And S2 = 1 Then Merker1 = 0

  If S5 = 1 Then Merker1 = 0

  If Merker1 = 1 And S34 = 1 Then
    H1 = 1
    K1 = 1
    Waitms 5000

    K1 = 0
    H1 = 1
    Waitms 5000

    H1 = 0
    K1 = 1
    Waitms 5000

    K1 = 0
    H1 = 1
    Waitms 5000

    H1 = 0
    K1 = 1
    Waitms 5000

    K1 = 1
    H1 = 1
    Waitms 5000

    H1 = 0
    K1 = 1
    Waitms 5000

    K1 = 0
    H1 = 0
    Waitms 9999

    H1 = 1
    Waitms 5000

    H1 = 0
    K1 = 1
    Waitms 5000

    K1 = 0
    H1 = 1
    Waitms 5000

    H1 = 0
    K1 = 1
    Waitms 5000

    K1 = 0
    H1 = 1
    Waitms 5000

    H1 = 0
    K1 = 1
    Waitms 5000

    K1 = 0
    H1 = 0
    Merker1 = 0
  End If
Loop

End

durch die Einrückung ist genau ersichtlich, welcher Code von welchem if 
abhängt, wo ein if anfängt und wo es endet, welche Anweisungen davon 
betroffen sind.

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ahhhhh, jetzt habe ich das mit dem End If und dem einrücken und alles 
andere auch verstanden.

Hab grade richtig klick in der Birne gehört.

Danke, sorry, dass ich hier solche Anfänger fragen stelle.
Hab gestern auch noch ewig gegooogelt aber kam einfach nicht vorran.

Auf jeden Fall ein riesen Dank an euch.


MfG der Andi

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.