logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Attiny 2313 - Błąd 7 i 123 przy pisaniu programu w Bascom 2.0.7.5

harrrry 29 Paź 2014 19:03 831 4
REKLAMA
  • #1 14085068
    harrrry
    Poziom 2  
    Witam. Podczas pisania testowego programu (do płytki testowej z kursu Bascoma) do sterowania falownikiem wyskakują mi błędy 7 i 123. Korzystam z wersji demo Bascom 2.0.7.5. Oto mój program
    Dim Czestotl As Byte , Do_zaokr As Single , Do_timera As Long , Ktorapol As Bit , Odliczanie As Long , Blokada As Bit , Powitanie As Bit
    Config Pind.0 = Input , Pind.1 = Input , Pind.2 = Output , Pind.3 = Output
    Config Portd.2 = 1 , Portd.3 = 1
    Config Timer0 = Timer , Prescale = 64 : Enable Interrupts : Enable Timer0
    Ktorapol = 0
    Czestotl = 10
    Do_timera = 3125
    Powitanie = 0
    
    Do
    If Powitanie = 0 Then
       Cls : Lcd "Ladowanie orogramowania .";
       Wait 1
       Lcd ".";
       Wait 1
       Lcd ".";
       Wait 1
       Lcd ".";
       Wait 1
       Lcd ".";
       Wait 1
       Lcd ".";
       Wait 1
       Lcd "."
       Wait 1
       Cls : Lcd "Ladowanie zakonczone."
       Wait 1
       Cls : Lcd "Czestotliwość= " ; Czestotl
       powitanie=1
    End If
    If Pind.0 = 0 Or Pind.1 = 0 Then
        If Blokada = 0 Then
          If Pind.0 = 0 Then
             Waitms 20
             If Pind.0 = 0 Then
                Incr Czestotl
                If Czestotl = 101 Then
                Czestotl = 100
                Blokada = 1
             End If
          End If
          If Pind.1 = 0 Then
             Waitms 20
             If Pind.1 = 0 Then
                Decr Czestotl
                If Czestotl = 0 Then
                Czestotl = 1
                Blokada = 1
             End If
          End If
        End If
    If Pind.0 = 1 And Pind.1 = 1 Then
    If Blokada = 1 Then Blokada = 0
    Cls : Lcd "Czestotliwosc = " ; Czestotl
    Do_zaokr = 31250 / Czestotl
    Do_timera = Round(do_zaokr)
    End If
    Loop
    End
    
    Falownik:
       Incr Odliczanie
       If Odliczanie = Do_timera Then
          If Ktorapol = 0 Then
             Portd.3 = 1
             Portd.2 = 0
             Ktorapol = 1
          End If
          If Ktorapol = 1 Then
             Portd.2 = 1
             Portd.3 = 0
             Ktorapol = 0
          End If
          Odliczanie = 0
       End If
    Return


    A to kody błędów:

    
    Error:7  Line:74  IF THEN expected [74]
    Error:123  Line:74  END IF expected


    Proszę o szybką odpowiedź. Z góry dziękuję.
  • REKLAMA
  • REKLAMA
  • #3 14085087
    harrrry
    Poziom 2  
    Właśnie zmieniłem.
    Ale jak kliknę to pokazuje mi błąd w komendzie Return.
  • REKLAMA
  • Pomocny post
    #4 14085150
    mas24
    Poziom 16  
    Przeanalizuj dokładnie program, porób prawidłowe wcięcia. Musi być tyle samo IF'ów co ENDIF'ów. Tam, gdzie masz IF w 1 linii, zapisz w postaci IF-ENDIF. Bascom często pokazuje błędy w linijkach, gdzie ich nie ma, a są gdzieś wyżej.
  • #5 14085245
    harrrry
    Poziom 2  
    Cytat:
    Poza tym twoja ifologia jest porażająca.

    Nie wiem o co ci chodzi.

    Cytat:
    Przeanalizuj dokładnie program, porób prawidłowe wcięcia. Musi być tyle samo IF'ów co ENDIF'ów. Tam, gdzie masz IF w 1 linii, zapisz w postaci IF-ENDIF. Bascom często pokazuje błędy w linijkach, gdzie ich nie ma, a są gdzieś wyżej.

    Dzięki za pomoc. W kilku IF`ach zabrakło Endif`ów.

    Dodano po 35 [minuty]:

    Mam kolejny problem. Zmieniłem troche program (nie wyskakują żadne błędy), jednak gdy trzymam naciśnięty przycisk to zamiast raz zwiększyć to ciągle rośnie częstotliwość. Jak to zrobić

    Program:
    
    Dim Czestotl As Byte , Do_zaokr As Single , Do_timera As Long , Ktorapol As Bit , Odliczanie As Long , Blokada As Bit , Powitanie As Bit
    Config Pind.0 = Input , Pind.1 = Input , Pind.2 = Output , Pind.3 = Output
    Config Portd.2 = 1 , Portd.3 = 1
    Config Timer0 = Timer , Prescale = 64 : Enable Interrupts :
    Ktorapol = 0
    Czestotl = 10
    Do_timera = 3125
    Powitanie = 0
    
    Do
    If Powitanie = 0 Then
       Cls : Lcd "Czestotliwosc=" : Lowerline : Lcd Czestotl
       Powitanie = 1
       Enable Timer0
    End If
    If Blokada = 0 Then
    If pind.0 = 0 Or Pind.1 = 0 Then
       Waitms 20
       If Pind.0 = 0 Then
          Incr Czestotl
          If Czestotl = 101 Then
             Czestotl = 100
             Blokada = 1
          End If
       End If
       If Pind.1 = 0 Then
          Decr Czestotl
          If Czestotl = 0 Then
             Czestotl = 1
             Blokada = 1
          End If
       End If
       Cls : Lcd "Czestotliwosc=" : Lowerline : Lcd Czestotl
       Do_zaokr = 31250 / Czestotl
       Do_timera = Round(do_zaokr)
    End If
    End If
    If Pind.0 = 1 Then
       If Pind.1 = 1 Then
          If Blokada = 1 Then
             Blokada = 0
          End If
       End If
    End If
    Loop
    End
    
    Falownik:
       Incr Odliczanie
       If Odliczanie = Do_timera Then
          If Ktorapol = 0 Then
             Portd.3 = 1
             Portd.2 = 0
             Ktorapol = 1
          End If
          If Ktorapol = 1 Then
             Portd.2 = 1
             Portd.3 = 0
             Ktorapol = 0
          End If
          Odliczanie = 0
       End If
    Return

    Jak to zrobić żeby po jednokrotnym naciśnięciu tylko raz wzrastała lub zmniejszała się częstotliwość?

    Dodano po 10 [minuty]:

    Pomoc niepotrzebna. Znalazłem błąd. W złym miejscu dałem funkcje blokady. Temat zamknięty.
REKLAMA