- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 5 von 5

Thema: komische Fehlermeldung ohne Zeilenangabe

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    18.07.2005
    Beiträge
    49

    komische Fehlermeldung ohne Zeilenangabe

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    ich habe gerade ein Programm mit mehreren IF-THEN-ELSE-Bedingungen geschrieben.
    Das Programm ist für eine Steuerung, mit der ich mehrere Relais, zwei PCs usw. schalten will
    Dies geschieht entweder mit der Fernbedienung (RC5) oder mit einem Bedienkästchen mit 12 Tastern. In diesem Kästchen ist auch ein AVR, der den Tastendruck als 4Bit ausgibt und auch 12 LEDs ansteuert, wenn das Signal 4Bit +1Bit ON/OFF kommt.

    Beim Kompilieren bringt er die Fehlermeldung:

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

    Ich habe Bascom neu gestartet, vorher brachte er diese Fehlermeldungen mit Zeilenangaben, dort war aber alles 100%ig in Ordnung, weil an dieser Stelle der Syntax genauso war wie weiter oben.

    Was kann das sein?

    Hier noch mein Code (Achtung, ziemlich umfangreich):
    Code:
    'Belegung:
    'PortA:
    
    $regfile = "m32def.dat"
    $crystal = 12000000
    
    Enable Interrupts
    
    Ddra = &B11111111                                           '0=Eingang 1=Ausgang
    Ddrb = &B11111111
    Ddrc = &B00000000
    Ddrd = &B11110000
    
    Porta = &B00000000
    Portb = &B00000000                                          '1=Pull Up
    Portc = &B00010000
    Portd = &B00001111
    
    Dim Address As Byte , Command As Byte , Signal As Byte
    Dim Bereit As Bit , Bit1 As Bit , Bit2 As Bit , Bit3 As Bit , Bit4 As Bit , Merker1 As Bit
    
    Config Rc5 = Pinb.4                                         'IR-Empfänger sitzt auf PB4
    
    Bereit = 1                                                  'Bereitschaft herstellen
    
    Do
    Getrc5(address , Command)                                   'IR-Empfänger abfragen
    Signal = Pind And &B00001111                                'Nur die ersten 4 Bits in Variable Signal übernehmen
    
    If Bereit = 1 Then                                          'Ausgabe der Bereitschafts-Variable an eine LED
    Portd.5 = 1
    Else
    Portd.5 = 0
    End If
    
    
    If Address < 255 Or Signal > 0 And Address = 55 Then        'wenn ein Signal von der Fernbedienung oder von PD0 bis PD3 kommt
    Command = Command And &B01111111                            'Toggle Bit entfernen
    
    
       If Command = 1 And Bereit = 1 Or Signal = 1 And Bereit = 1 Then       'Taster 1 Stromstoßrelais Zimmerlicht
       Portb.0 = 1
       Bereit = 0
       Waitms 200
       Portb.0 = 0
    
       Elseif Command = 2 And Bereit = 1 Or Signal = 2 And Bereit = 1 Then       'Taster 2 Flutlicht
       Toggle Porta.0
       Bereit = 0
       Bit1 = 0
       Bit2 = 1
       Bit3 = 0
       Bit4 = 0
          If Porta.0 = 1 Then
          Gosub Ausgeben_ein
          Else
          Gosub Ausgeben_aus
          End If
    
       Elseif Command = 3 And Bereit = 1 Or Signal = 3 And Bereit = 1 Then       'Taster 3 Schwarzlicht
       Toggle Porta.1
       Bereit = 0
       Bit1 = 1
       Bit2 = 1
       Bit3 = 0
       Bit4 = 0
          If Porta.1 = 1 Then
          Gosub Ausgeben_ein
          Else
          Gosub Ausgeben_aus
          End If
    
       Elseif Command = 4 And Bereit = 1 Or Signal = 4 And Bereit = 1 Then       'Taster 4 Strahler für Spiegelkugel
       Toggle Portb.1
       Bereit = 0
       Bit1 = 0
       Bit2 = 0
       Bit3 = 1
       Bit4 = 0
          If Portb.1 = 1 Then
          Gosub Ausgeben_ein
          Else
          Gosub Ausgeben_aus
          End If
    
       Elseif Command = 5 And Bereit = 1 Or Signal = 5 And Bereit = 1 Then       'Taster 5 Spiegelkugelmotor
       Toggle Porta.2
       Bereit = 0
       Bit1 = 1
       Bit2 = 0
       Bit3 = 1
       Bit4 = 0
          If Porta.2 = 1 Then
          Gosub Ausgeben_ein
          Else
          Gosub Ausgeben_aus
          End If
    
       Elseif Command = 6 And Bereit = 1 Or Signal = 6 And Bereit = 1 Then       'Taster 6 UFO
       Toggle Portb.2
       Bereit = 0
       Bit1 = 0
       Bit2 = 1
       Bit3 = 1
       Bit4 = 0
          If Portb.2 = 1 Then
          Gosub Ausgeben_ein
          Else
          Gosub Ausgeben_aus
          End If
    
       Elseif Command = 7 And Bereit = 1 Or Signal = 7 And Bereit = 1 Then       'Taster 7 Lichterorgel
       Toggle Porta.3
       Bereit = 0
       Bit1 = 1
       Bit2 = 1
       Bit3 = 1
       Bit4 = 0
          If Porta.3 = 1 Then
          Gosub Ausgeben_ein
          Else
          Gosub Ausgeben_aus
          End If
          '                                  Schaltmodul
       Elseif Command = 8 And Bereit = 1 And Pinc.7 = 0 Or Signal = 8 And Bereit = 1 And Pinc.7 = 0 Then       'Taster 8 Röhrenverst., Mediastation usw. EIN
       Bereit = 0
       Portb.5 = 1
       Bit1 = 0
       Bit2 = 0
       Bit3 = 0
       Bit4 = 1
       Gosub Ausgeben_ein
       Waitms 500
       Portb.5 = 0
       '                                  Schaltmodul    Mediastation
       Elseif Command = 8 And Bereit = 1 And Pinc.7 = 1 And Pinc.5 = 0 And Pinc.7 = 1 Or Signal = 8 And Bereit = 1 And Pinc.7 = 1 And Pinc.5 = 0 Then       'Taster 8 Röhrenverst., Mediastation usw. AUS, wenn Mediastation nicht läuft
       Bereit = 0
       Portb.6 = 1
       Bit1 = 0
       Bit2 = 0
       Bit3 = 0
       Bit4 = 1
       Gosub Ausgeben_aus
       Waitms 500
       Portb.6 = 0
    
       Elseif Command = 8 And Bereit = 1 And Portb.5 = 1 And Pinc.5 = 1 Or Signal = 8 And Bereit = 1 And Portb.5 = 1 And Pinc.5 = 1 Then       'Taster 8 Röhrenverst., Mediastation usw. AUS, wenn Mediastation läuft
       Merker1 = 1
       Bereit = 0
       Portb.7 = 1                                              'Taster an Mediastation simulieren
       Waitms 100                                               'Taster an Mediastation simulieren
       Portb.7 = 0                                              'Taster an Mediastation simulieren
    
       Elseif Command = 9 And Bereit = 1 And Pinc.6 = 0 Or Signal = 9 And Bereit = 1 And Pinc.6 = 0 Then       'Taster 9 PC EIN
       Porta.4 = 1
       Bereit = 0
       Bit1 = 1
       Bit2 = 0
       Bit3 = 0
       Bit4 = 1
       Gosub Ausgeben_ein
    
       Elseif Command = 9 And Bereit = 1 And Pinc.6 = 1 Or Signal = 9 And Bereit = 1 And Pinc.6 = 1 Then       'Taster 9 PC AUS
       Porta.4 = 1
       Bereit = 0
       Bit1 = 1
       Bit2 = 0
       Bit3 = 0
       Bit4 = 1
       Gosub Ausgeben_ein
    
       Elseif Command = 10 And Bereit = 1 Or Signal = 10 And Bereit = 1 Then       'Taster 10 Arbeitssteckdose
       Toggle Porta.5
       Bereit = 0
       Bit1 = 0
       Bit2 = 1
       Bit3 = 0
       Bit4 = 1
          If Porta.5 = 1 Then
          Gosub Ausgeben_ein
          Else
          Gosub Ausgeben_aus
          End If
    
       Elseif Command = 11 And Bereit = 1 Or Signal = 11 And Bereit = 1 Then       'Taster 11 Reserve
       Toggle Porta.6
       Bereit = 0
       Bit1 = 1
       Bit2 = 1
       Bit3 = 0
       Bit4 = 1
          If Porta.6 = 1 Then
          Gosub Ausgeben_ein
          Else
          Gosub Ausgeben_aus
          End If
    
       Elseif Command = 12 And Bereit = 1 Or Signal = 12 And Bereit = 1 Then       'Taster 12 Reserve
       Toggle Portb.4
       Bereit = 0
       Bit1 = 0
       Bit2 = 1
       Bit3 = 0
       Bit4 = 1
          If Portb.4 = 1 Then
          Gosub Ausgeben_ein
          Else
          Gosub Ausgeben_aus
          End If
       End If
    
    Else
    Bereit = 1                                                  'wenn kein Signal kommt, dann Bereitschaft wieder herstellen
       If Merker1 = 1 And Pinc.5 = 0 Then                       'wenn Merker gesetzt wurde und Mediastation sich ausgeschaltet hat, Relais auschalten
       Merker1 = 0
       Portb.6 = 1
       Bit1 = 0
       Bit2 = 0
       Bit3 = 0
       Bit4 = 1
       Gosub Ausgeben_aus
       Waitms 500
       Portb.6 = 0
    
    End If
    
    Loop
    
    Ausgeben_ein:
    Portd.4 = 1                                                 'Bit ON/OFF
    Portd.0 = Bit1
    Portd.1 = Bit2
    Portd.2 = Bit3
    Portd.3 = Bit4
    Waitms 500
    Portd.0 = 0
    Portd.1 = 0
    Portd.2 = 0
    Portd.3 = 0
    Portd.4 = 0
    Return
    
    Ausgeben_aus:
    Portd.4 = 0                                                 'Bit ON/OFF
    Portd.0 = Bit1
    Portd.1 = Bit2
    Portd.2 = Bit3
    Portd.3 = Bit4
    Waitms 500
    Portd.0 = 0
    Portd.1 = 0
    Portd.2 = 0
    Portd.3 = 0
    Portd.4 = 0
    Return
    
    
    End
    MfG, Dane

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Da fehlt ein "ENd if"
    Code:
    Else
       Bereit = 1                                               'wenn kein Signal kommt, dann Bereitschaft wieder herstellen
       If Merker1 = 1 And Pinc.5 = 0 Then                       'wenn Merker gesetzt wurde und Mediastation sich ausgeschaltet hat, Relais auschalten
       Merker1 = 0
       Portb.6 = 1
       Bit1 = 0
       Bit2 = 0
       Bit3 = 0
       Bit4 = 1
       Gosub Ausgeben_aus
       Waitms 500
       Portb.6 = 0
    <------------------------- end if????------------------------------------->
    End If
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    18.07.2005
    Beiträge
    49
    Danke!

    Mich hat das nur stutzig gemacht, weil erst eine falsche Zeilenangabe und dann gar keine mehr da war, jetzt scheint es zu funktionieren.

    Allerdings ist die Dateigröße für die Demo zu groß...
    Ich glaub ich schenk mir die Vollversion zu Weihnachten

    Dane

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Zitat Zitat von Dane
    Allerdings ist die Dateigröße für die Demo zu groß...
    Dein else-Baum ist ganzschön speicherfressend. Überleg' mal, wie du dein Problem zusammenschrauben kannst, vielleicht geht's ja dann.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Paß auch auf, daß deine elseif auch richtig aufgehen.
    Da ja keine Klammern da sind, ist nicht alles klar, was UND und ODER ist.
    Oder hast du das schon getestet ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress