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


von Andi (Gast)


Angehängte Dateien:

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

von Andi (Gast)


Angehängte Dateien:

Lesenswert?

Hier das richtige Bild

von Karl H. (kbuchegg)


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

von Maik M. (myco)


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.

von Andi (Gast)


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

von Karl H. (kbuchegg)


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

von Matthias S. (mat-sche)


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

von zuDummZu (Gast)


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

;-)

von peterfido (Gast)


Lesenswert?

Es fehlt noch ein "end if" vor dem loop

von Karl H. (kbuchegg)


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
1
$regfile = "m16def.dat"
2
$framesize = 16
3
$swstack = 16
4
$hwstack = 16
5
$crystal = 1000000
6
7
Config Porta.0 = Input
8
 S1 Alias Porta.0
9
10
Config Porta.1 = Input
11
 S2 Alias Porta.1
12
13
Config Porta.2 = Input
14
 S34 Alias Porta.2
15
16
Config Porta.4 = Input
17
 S5 Alias Porta.4
18
19
Config Porta.5 = Output
20
 K1 Alias Porta.5
21
22
Config Porta.6 = Output
23
 H1 Alias Porta.6
24
25
Dim Merker0 As Bit
26
Dim merker1 As Bit
27
28
Do
29
  If S1 = 1 Then
30
    Waitms 1000
31
    K1 = 1
32
  End If
33
34
  If S2 = 1 And Merker0 = 0 Then Merker0 = 1
35
  If S2 = 0 Then Merker0 = 0
36
37
  If S2 = 1 And Merker0 = 0 Then Merker1 = 1
38
39
  If S1 = 1 And S2 = 1 Then Merker1 = 0
40
41
  If S5 = 1 Then Merker1 = 0
42
43
  If Merker1 = 1 And S34 = 1 Then
44
    H1 = 1
45
    K1 = 1
46
    Waitms 5000
47
48
    K1 = 0
49
    H1 = 1
50
    Waitms 5000
51
52
    H1 = 0
53
    K1 = 1
54
    Waitms 5000
55
56
    K1 = 0
57
    H1 = 1
58
    Waitms 5000
59
60
    H1 = 0
61
    K1 = 1
62
    Waitms 5000
63
64
    K1 = 1
65
    H1 = 1
66
    Waitms 5000
67
68
    H1 = 0
69
    K1 = 1
70
    Waitms 5000
71
72
    K1 = 0
73
    H1 = 0
74
    Waitms 9999
75
76
    H1 = 1
77
    Waitms 5000
78
79
    H1 = 0
80
    K1 = 1
81
    Waitms 5000
82
83
    K1 = 0
84
    H1 = 1
85
    Waitms 5000
86
87
    H1 = 0
88
    K1 = 1
89
    Waitms 5000
90
91
    K1 = 0
92
    H1 = 1
93
    Waitms 5000
94
95
    H1 = 0
96
    K1 = 1
97
    Waitms 5000
98
99
    K1 = 0
100
    H1 = 0
101
    Merker1 = 0
102
  End If
103
Loop
104
105
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.

von Andi (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.