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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.