Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Bascom - Początkujący w Bascom... Błąd

kellygrzyb3 13 Paź 2013 16:06 1122 4
  • #1 13 Paź 2013 16:06
    kellygrzyb3
    Poziom 16  

    Witam. Od paru dni uczę się programować w języku bascom. Trafiłem na błąd podczas kompilacji którego nie rozumiem. O to kod

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod
    $regfile = "m8adef.dat"
    $crystal = 16000000

    Config Portc = Output
    Config Portb = Output
    Config Portd.0 = Input
    Config Portd.1 = Input
    Config Portd.3 = Input
    Config Portd.4 = Input

    Pind.4 = 1
    Pind.1 = 1
    Pind.3 = 1
    Pind.0 = 1

    Ent Alias Pind.1
    Down Alias Pind.4
    C Alias Pind.0
    Up Alias Pind.3


    Dim Przyciskizm As Byte
    Dim Tempa As Byte
    Dim Wynik As Byte
    Dim Histereza As Byte
    Dim Tempu As Byte

    Declare Sub Histerezapr
    Declare Sub Tempna

    Config Timer0 = Timer , Prescale = 64
    On Timer0 Przyciski
    Enable Interrupts
    Enable Timer0
    Start Timer0



    Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portb.1 , Rs = Portb.0
    Config Lcd = 16 * 2
    Cursor Off

    Cls

    Histereza = 0
    Tempu = 0
    Przyciskizm = 0
    Tempu = 0


    Home

    'START STEROWNIKA---------------------------------------------------------------------------

    Lcd "STEROWNIK KLAPY"
    Lowerline
    Lcd "PIECA C.O"
    Wait 2
    Cls
    Home
    Lcd "MICHAL KUJDA"
    Lowerline
    Lcd "2013"
    Wait 2

    Cls

    'PETLA GLOWNA---------------------------------------------------------------------------------------

    Do
    Home

    If Przyciskizm = 0 Then
    Lcd "menu "
    End If

    If Przyciskizm = 1 Then
    Cls
    Lcd "Temp. Nadana"
    End If

    If Przyciskizm = 2 Then
    Cls
    Lcd "Histereza"
    End If

    If Przyciskizm = 3 Then
    Przyciskizm = 0
    End If

    Loop

    'PRZYCISKI-----------------------------------------------------------------------------------------

    Przyciski:

    If Up = 0 Then
    Decr Przyciskizm
    End If

    if Down = 0 Then
    Incr Przyciskizm
    End If

    If Przyciskizm = 1 And Ent = 0 Then
    Call Tempna
    End If

    If Przyciskizm = 2 And Ent = 0 Then
    Call Histerezapr
    End If
    Return



    .
    'HISTEREZA--------------------------------------------------------------------------------------------

    Sub Histerezapr



    If Histereza = 6 Then
    Histereza = 0
    End If

    If Up = 0 Then
    Incr Histereza
    End If

    If Down = 0 Then
    Decr Histereza
    End If

    If Histereza = 0 Then
    Lcd "HISTEREZA 0 'C"
    Elseif Histereza = 1 Then
    Lcd "HISTEREZA 1 'C"
    Elseif Histereza = 2 Then
    Lcd "HISTEREZA 2 'C"
    Elseif Histereza = 3 Then
    Lcd "HISTEREZA 3 'C"
    Elseif Histereza = 4 Then
    Lcd "HISTEREZA 4 'C"
    Elseif Histereza = 5 Then
    Lcd "HISTEREZA 5 'C"
    End If

    End Sub

    'TEMPERATURA NASTAWIONA------------------------------------------------------------------------

    Sub Tempna



    If Up = 0 Then
    Incr Tempu
    End If

    If Down = 0 Then
    Decr Tempu

    Lcd "TEMPERATURA NADANA"

    Lowerline
    Lcd Tempu

    If C = 0 Then
    Cls Lcd
    Return
    End If

    End Sub [/syntax]

    Wszystkie błędy wskazują na komende

    If Up = 0 Then
    Decr Przyciskizm
    End If

    Przypominam że jestem początkujący i z góry dziękuje za pomoc...

    0 4
  • #2 13 Paź 2013 16:12
    BlueDraco
    Specjalista - Mikrokontrolery

    A co dokładnie pisze kompilator?

    0
  • #3 13 Paź 2013 16:22
    kellygrzyb3
    Poziom 16  

    Bascom - Początkujący w Bascom... Błąd

    Przepraszam za taką formę ale nie mogłem skopiować błędów.

    Proszę także o wskazanie być może rażących błędów jakie od razu się mogą rzucić
    bardziej doświadczonym programistą.

    np; w końcowej części kodu napisałem
    Lcd tempu
    to znaczy że na wyświetlaczu pojawi się wartość zmiennej Tempu czy trzeba to zrealizować w inny sposób?

    0
  • #4 13 Paź 2013 17:40
    MArSTER_1
    Poziom 18  

    W linii nad napisem (komentarzem HISTEREZA ) masz niepotrzebnie zostawiony znak przecinka.
    W podprogramie Sub Tempna masz dwie instrukcje w jednej linii (Cls Lcd ). Zamień to na przykład tak:
    Cls
    Lcd "coś napisz"

    I znów w tym podprogramie brak ci END IF. Nie wiem gdzie chcesz to wstawić ale trzeba tam wstawić.Na przykład tak.

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0
  • #5 13 Paź 2013 18:32
    emarcus
    Poziom 35  

    kellygrzyb3 napisał:


    Przepraszam za taką formę ale nie mogłem skopiować błędów.



    np; w końcowej części kodu napisałem
    Lcd tempu
    to znaczy że na wyświetlaczu pojawi się wartość zmiennej Tempu czy trzeba to zrealizować w inny sposób?


    1. Zechcesz skopiowac tylko tabelkę błędów:
    -klikasz myszką w dowolnym miejsc na górny bar tabelki z napisem 'Errors', a następnie "Alt + print screen" i nasz skopiowaną tylko samo okno tabelki.

    2. Włączenie numeru linii pomaga w odszukaniu wypisanych błędów w kompilacji;
    - klik na 'Options/Environment/editor' - ostatnia opcja "Line numbers" - zaznacz w kwadracie.
    3. Podwójny klick na linii w okkienku 'Errors' prowadzi automatycznie do błędnej linii w listingu wymagającej korekty.
    4. Instrukcja "Cls" odnosi się tylko do Lcd , a więc 'Cls lcd' jest błedem;
    -po 'lcd' zwykle następuje treśc tego co ma byc wyświetlone

    Cytat:

    Proszę także o wskazanie być może rażących błędów jakie od razu się mogą rzucić

    Pierwsze co 'kłuje' to sposób configuracji portów a szczególnie pojedynczych pinów danego portu.
    'By default' - wszystkie Porty (ich piny) są wejściami; jeżeli nie były wcześniej konfigurowane jako wyjścia, więc nie wymagaja 'powtórnego' ich konfigurowania jako wejścia.
    Nie jest to jednak zasadniczy błąd bo to nic nie zmienia, czasem jednak pomaga w przejżystości programu.
    Natomiast dużym błędem jest stosowanie syntaxu :
    Pind.4 = 1
    Pind.1 = 1
    Pind.3 = 1
    Pind.0 = 1
    jako podciągania wewnętrznego pinów do Vcc.
    Rejestr PIN.x może byc tylko czytany a nie edytowany w programie zatem winno byc odpowiednio PORT.x = 1.

    Kompletna instrukcja warunkowa "If..." winna byc zamknieta "...End if"

    I wreszcie, pod koniec listingu w 'Sub Tempna' , w instrukcji warunkowej "If' masz wpisany "Return"; co niby miałoby to oznaczac?

    Nie mam czasu na studiowanie całosci programu, wie byc może masz wiecej błędów.

    e marcus

    0