www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Ich finde den Fehler nicht :(


Autor: [BASCOM] If else Fehler? (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute,

ich habe vor einer Woche angefangen mit BASCOM ein bischen zu 
programmieren. So jetzt möchte ich mit 2 Tastern einen Zähler hoch und 
runter zählen lassen. Jenachdem welchen Wert der Zähler hat soll eine 
LED mehr oder weniger anfangen zu leuchten. Aber ich bekomme beim 
Compelieren
immer folgende Fehler:

Error: 7 Line: 57 IF THEN expected [57] , in File ......
Error: 123 Line: 57 END IF expected , in File ......

Das Ding ist wenn ich doppelt auf den Fehler klicke springt er in eine 
Zeile wo ich gar nichts geschrieben habe! -.-

Hier mein Code:

$regfile = "m88def.dat"
$crystal = 8000000
$hwstack = 100

' Ausgänge

Led1 Alias Portb.1
Config Led1 = Output

Led2 Alias Portb.2
Config Led2 = Output

Led3 Alias Portb.3
Config Led3 = Output

' Eingänge

Lauter Alias Pind.3
Config Lauter = Input
Lauter = 1

Leiser Alias Pind.2
Config Leiser = Input
Leiser = 1

Dim Zaehler As Byte

' Variablen

Zaehler = 2


Schritt1:

Do
  If Lauter = 0 Then
    Zaehler = Zaehler + 1
    Goto Laut
    Else
    If Leiser = 0 Then
    Zaehler = Zaehler - 1
    Goto Laut
  End If
Loop

Laut:

If Zaehler = 1 Then
 Set Led1
 Reset Led2
 Reset Led3
End If

End



Ich hoffe Ihr könnt mir helfen.
Danke

lg DistanZ

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zähle die Zahl der If und die Zahl der End If
Die sind bei deinem Programm ungleich.

Check auch ob du statt goto ein gosub/return magst, damit die 
Unterroutine Laut: auch nach do ... loop zurückkehrt

Autor: [BASCOM] If else Fehler? (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ahhh Ok vielen vielen Dank!
Fehler gefunden und danke für den Tipp hab ich mit eingebunden! =)

Dankeschön

Autor: PeterL (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fehler müssen nicht unbedingt in der angezeigten Zeile sein.

Do
  If Lauter = 0 Then
                    Zaehler = Zaehler + 1
                    Goto Laut
                Else
                    If Leiser = 0 Then
                                      Zaehler = Zaehler - 1
                                      Goto Laut
                                  endif  '!!!!!!!!!!!
                     End If

loop

Autor: [BASCOM] If else Fehler? (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm aber irgendwie will das Ganze nicht so wie ich wohl will! ^^
Wenn ich einmal auf den Taster "Lauter" drücke geht eine LED an und wenn 
ich dann auf "leiser" drücke tut sich gar nichts mehr!
Wenn ich als erstes "leiser" drücke gehen alle LEDs an und dann tut sich 
nichts mehr. :(

Woran kann das liegen?

$regfile = "m88def.dat"
$crystal = 8000000
$hwstack = 100

' Ausgänge

Led1 Alias Portb.1
Config Led1 = Output

Led2 Alias Portb.2
Config Led2 = Output

Led3 Alias Portb.3
Config Led3 = Output

' Eingänge

Lauter Alias Pind.3
Config Lauter = Input
Lauter = 1

Leiser Alias Pind.2
Config Leiser = Input
Leiser = 1

Dim Zaehler As Byte

' Variablen

Zaehler = 2


Schritt1:

Do
  If Lauter = 0 Then
    Zaehler = Zaehler + 1
    Gosub Laut
    Elseif Leiser = 0 Then
    Zaehler = Zaehler - 1
    Gosub Laut
  End If
Loop

Laut:

If Zaehler = 1 Then
 Set Led1
 Reset Led2
 Reset Led3
 Return
End If

If Zaehler = 2 Then
 Set Led1
 Set Led2
 Reset Led3
 Return
End If

If Zaehler = 3 Then
 Set Led1
 Set Led2
 Set Led3
 Return
End If

End


Dankeschön!!! :)

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Return muss hinter dem End If stehen !

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei den Input-Ports die PullUp-Widerstände aktivieren !

Oder sind externe Widerstände vorhanden ?

Autor: [BASCOM] If else Fehler? (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das geht leider irgendwie nicht! :(

$regfile = "m88def.dat"
$crystal = 8000000
$hwstack = 100

' Ausgänge

Led1 Alias Portb.1
Config Led1 = Output

Led2 Alias Portb.2
Config Led2 = Output

Led3 Alias Portb.3
Config Led3 = Output

' Eingänge

Lauter Alias Pind.3
Config Lauter = Input
Lauter = 1

Leiser Alias Pind.2
Config Leiser = Input
Leiser = 1

Dim Zaehler As Byte

' Variablen

Zaehler = 2
Goto Laut



Schritt1:
Do
  If Lauter = 0 Then
    Zaehler = Zaehler + 1
    Gosub Laut
  Elseif Leiser = 0 Then
    Zaehler = Zaehler - 1
    Gosub Laut
  End If
Loop

Laut:

If Zaehler = 1 Then
 Set Led1
 Reset Led2
 Reset Led3
End If
Return

If Zaehler = 2 Then
 Set Led1
 Set Led2
 Reset Led3
End If
Return

If Zaehler = 3 Then
 Set Led1
 Set Led2
 Set Led3
End If
Return

End

Autor: hp-freund (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bin ja nicht der BASCOM Kenner, aber sollte da nicht eine Entprellung 
der Tasten erfolgen?

Autor: Torsten K. (ago)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ähm... die Return gehören mit Sicherheit vor die End If's, sonst wird 
doch "If Zaehler = 2"... nie erreicht.
Außerdem steht da immernoch "Goto Laut" ;-)

Das Ende könnte man aber auch so schreiben:
Laut:

If Zaehler = 1 Then
 Set Led1
 Reset Led2
 Reset Led3
End If

If Zaehler = 2 Then
 Set Led1
 Set Led2
 Reset Led3
End If

If Zaehler = 3 Then
 Set Led1
 Set Led2
 Set Led3
End If
Return

Autor: hp-freund (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau mal hier:

staff.ltam.lu/feljc/electronics/bascom/BASCOM_Tutorial_1.pdf

Kapitel 10.

Autor: Stefan B. (stefan) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
> Hm aber irgendwie will das Ganze nicht so wie ich wohl will! ^^
Das ist anfangs normal.

Autor: [BASCOM] If else Fehler? (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Vielen Danke das funktioniert soweit wie ich das gerne möchte 
echt gut nur wenn ich die "leiser" taste gedrückt halte geht nach 1 
sekunde alles wieder an wenn ich aber lauter gedrückt halte gehen alle 
an und es bleibt so! Hm nun warum gehen aufeinmal alle LEDs wieder an 
wenn ich Leiser grdrückt halte?

lg

                         $regfile = "m88def.dat"
$crystal = 8000000
$hwstack = 100

' Ausgänge

Led1 Alias Portb.1
Config Led1 = Output

Led2 Alias Portb.2
Config Led2 = Output

Led3 Alias Portb.3
Config Led3 = Output

' Eingänge

Lauter Alias Pind.3
Config Lauter = Input
Lauter = 1

Leiser Alias Pind.2
Config Leiser = Input
Leiser = 1

Dim Lautstaerke As Byte

' Variablen
Lautstaerke = 2

' Ewige Hauptschleife
Do
  If Lauter = 0 Then
    Lautstaerke = Lautstaerke + 1
    Gosub Laut
    Elseif Leiser = 0 Then
    Lautstaerke = Lautstaerke - 1
    Gosub Laut
  End If
  Wait 1                                                    ' vor 
nächster Auswertung 1s Warten
Loop

'
Laut:
  If Lautstaerke < 0 Then
    Lautstaerke = 0
  End If

  If Lautstaerke > 3 Then
    Lautstaerke = 3
  End If

  If Lautstaerke = 0 Then
     Reset Led1
     Reset Led2
     Reset Led3
  End If


  If Lautstaerke = 1 Then
    Set Led1
    Reset Led2
    Reset Led3
  End If

  If Lautstaerke = 2 Then
    Set Led1
    Set Led2
    Reset Led3
  End If

  If Lautstaerke = 3 Then
    Set Led1
    Set Led2
    Set Led3
  End If
Return

End

Autor: DrSeltsam (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...weil die Variable "Lautstärke" als BYTE definiert ist, welches den 
Wertebereich von 0...255 umfasst.

Die Abfrage

"  If Lautstaerke < 0 Then
    Lautstaerke = 0
  End If"

wird daher nicht funktionieren.
Definiere (spaßeshalber) "Lautstärke" 'mal als "SINGLE"...

Autor: Weingut Pfalz (weinbauer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ein Byte kann nicht kleiner als 0 werden, das geht nur von 0 bis 255.
Negative Werte gibt es erst ab Integer und Single.

Der "kleinere" Wert von 0 ist beim Byte 255

die "+1" kannst Du auch einfach per

Incr Lautstaerke

die "-" einfach per

Decr Lautstaerke

Autor: [BASCOM] If else Fehler? (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok Supper jetzt funzt es wunderbar =)

Vielen dank für die supper Hilfe =)

Schön Abend noch!

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.