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