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.

przeróbka programu - błedy podczas kompilacj

piotrek-zki 15 Sie 2013 16:04 699 3
  • #1 15 Sie 2013 16:04
    piotrek-zki
    Poziom 9  

    Witam.
    Mam pewien problem z kompilacją programu (nie mojego) i po przeróbce z 8051 na AVR.
    Wyskakuje error 35 i nie wiem czemu. Mógłby ktoś podpowiedzieć, co może być nie tak. Wrzucam cały listing:

    Spoiler:
    $regfile = "m8def.dat"
    $crystal = 8000000

    Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.2 , Rs = Portd.3
    Config Lcd = 16 * 2


    Config Debounce = 10ms




    'konfiguracja magistrali I2C

    Config Scl = Portd.0
    Config Sda = Portd.1


    'przypisanie nazw przyciskom

    P_1 Alias Portb.0
    Ok Alias Portb.1
    Esc Alias Portb.2

    Oswietl Alias Portb.3
    Filtr Alias Portb.4
    Grzalka Alias Portb.5



    Declare Sub Zapis

    '-------------------------------------------------------------
    'DEKLARACJA ZMIENNYCH





    Dim M As Byte
    Dim S As Byte
    Dim H As Byte
    Dim Czas As Integer


    Dim T As Byte 'temperatura ustawiona

    Dim T0 As Byte







    Dim C_fon As Integer 'czas wlaczenia filtra
    Dim C_oon As Integer 'czas wlaczenia oswietlenia
    Dim C_fof As Integer 'czas wylaczenia filtra
    Dim C_oof As Integer 'czas wylaczenia oswietlenia



    Dim H_ As Byte 'zmienne pomocnicze przy ustawianiu czasu
    Dim M_ As Byte





    'konfiguracja magistrali dla termometru
    Config 1wire = Portb.6


    'konfiguracja zmiennych termometru
    Dim Temp As Integer

    Dim C3 As Integer
    Dim Zmienna_temp(8) As Byte



    Oswietl = 1
    Filtr = 1
    Grzalka = 1







    '===============================================================================



    I2cstart
    I2cwbyte 160
    I2cwbyte 15
    I2cstart
    I2cwbyte 161
    I2crbyte H_ , Ack
    I2crbyte M_ , Ack
    C_fon = H_ * 100
    C_fon = C_fon + M_
    I2crbyte H_ , Ack
    I2crbyte M_ , Ack
    C_fof = H_ * 100
    C_fof = C_fof + M_
    I2crbyte H_ , Ack
    I2crbyte M_ , Ack
    C_oon = H_ * 100
    C_oon = C_oon + M_
    I2crbyte H_ , Ack
    I2crbyte M_ , Ack
    C_oof = H_ * 100
    C_oof = C_oof + M_
    I2crbyte T , Nack
    I2cstop

    Deflcdchar 0 , 2 , 5 , 2 , 32 , 32 , 32 , 32 , 32 'znaczek stopnia
    Cursor Off

    Main:





    Do



    '*******************************************************************************
    '===============================================================================
    'tu się zaczyna procedura odczytu i konwersji wyniku temperatury

    1wreset
    1wwrite &HCC
    1wwrite &H44

    Waitms 750


    1wreset
    1wwrite &HCC
    1wwrite &HBE

    Zmienna_temp(1) = 1wread(8)
    C3 = Zmienna_temp(1) And 1

    If C3 = 1 Then Decr Zmienna_temp(1)

    Temp = Makeint(zmienna_temp(1) , Zmienna_temp(2))
    Temp = Temp * 50 : Temp = Temp - 25
    C3 = Zmienna_temp(8) - Zmienna_temp(7) : C3 = C3 * 100
    C3 = C3 / Zmienna_temp(8) : Temp = Temp + C3
    Temp = Temp / 100 ' np 20,5=250

    '******************************************************************************
    'porownanie temperatur odczytanej i nastawionej i wlaczenie lub wylaczenie grzalki

    T0 = T - 2

    If Temp > T Then
    Grzalka = 1
    End If

    If Temp <= T0 Then
    Grzalka = 0
    End If

    If Temp <= 100 Then
    Grzalka = 1
    End If
    '________________________________________
    'konwersja temp na wynik na lcd
    C3 = Temp Mod 10
    C3 = Abs(c3)
    Temp = Temp / 10
    'koniec procedury, temperatura pod zmienna "temp"

    '_______________________________________________________________________________


    '******************************************************************************
    'ODCZYT CZASU



    I2cstart
    I2cwbyte 160
    I2cwbyte 2


    I2cstart
    I2cwbyte 161
    I2crbyte S , Ack
    I2crbyte M , Ack
    I2crbyte H , Nack


    I2cstop




    '*******************************************************************************
    '===============================================================================

    'wyswietl temperature i czas

    Cls

    Lcd " TEMP:" ; Temp ; "," ; C3 ; Chr(0) ; "C"
    Lowerline
    Lcd " " ; Bcd(h) ; ":" ; Bcd(m) ; ":" ; Bcd(s)


    '_______________________________________________________________________________
    'porównanie czasu filtra i oswietlenia

    M = Makedec(m)
    H = Makedec(h)

    Czas = H * 100
    Czas = Czas + M


    If Czas => C_fon And Czas < C_fof Then
    Filtr = 0
    Else
    Filtr = 1
    End If

    If Czas = C_fof Then
    Filtr = 1
    End If

    If Czas => C_oon And Czas < C_oof Then
    Oswietl = 0
    Else
    Oswietl = 1
    End If
    If Czas = C_oof Then
    Oswietl = 1
    End If

    '##############################################################################
    'przewijanie menu
    '_______________________________________________________________________________

    Debounce P_1 , 0 , Ust_czasu , Sub

    Debounce Ok , 0 , Status , Sub
    Debounce Esc , 0 , Main , Sub



    Loop

    '_______________________________________________________________________________
    Ust_czasu:
    Cls
    Lcd "UST. ZEGARA"
    Do

    Debounce P_1 , 0 , Ust_temp , Sub
    Debounce Ok , 0 , Nastaw_czas , Sub
    Debounce Esc , 0 , Main , Sub

    Loop


    '_______________________________________________________________________________

    Ust_temp:
    Cls
    Lcd "UST.TEMPERATURY"
    Lowerline
    Lcd T

    Do

    Debounce P_1 , 0 , Ust_filtra , Sub
    Debounce Ok , 0 , Nastaw_temp , Sub
    Debounce Esc , 0 , Main , Sub
    Loop


    '_______________________________________________________________________________

    Ust_filtra:

    Cls
    Lcd "UST. FILTRA"
    Lowerline
    Lcd "WL:" ; C_fon ; " WYL:" ; C_fof

    Do

    Debounce P_1 , 0 , Ust_oswietl , Sub
    Debounce Ok , 0 , Nastaw_filtr , Sub
    Debounce Esc , 0 , Main , Sub
    Loop


    '_______________________________________________________________________________

    Ust_oswietl:

    Cls
    Lcd "UST. OSWIETLENIA"
    Lowerline
    Lcd "WL:" ; C_oon ; " WYL:" ; C_oof

    Do

    Debounce P_1 , 0 , Main , Sub
    Debounce Ok , 0 , Nastaw_oswietl , Sub
    Debounce Esc , 0 , Main , Sub
    Loop
    '_______________________________________________________________________________



    Nastaw_czas:


    M = Makebcd(m)
    H = Makebcd(h)
    S = 0



    Do
    Debounce Esc , 0 , Main , Sub
    If P_1 = 0 Then
    Incr H
    End If

    If H > 23 Then
    H = 0
    End If


    Cls
    Lcd "GODZINA: " ; H
    Waitms 500

    If Ok = 0 Then
    Waitms 500
    Exit Do
    End If

    Loop

    'minuta
    Do

    If P_1 = 0 Then
    Incr M
    End If


    If M > 59 Then
    M = 0
    End If


    Cls
    Lcd "MINUTA: " ; M
    Waitms 500

    If Ok = 0 Then
    Waitms 500
    Exit Do
    End If

    Loop


    'zapis ustawień
    M = Makebcd(m)
    H = Makebcd(h)
    S = 0



    I2cstart
    I2cwbyte 160
    I2cwbyte 0
    I2cwbyte 8
    I2cstop
    I2cstart
    I2cwbyte 160
    I2cwbyte 2
    I2cwbyte S
    I2cwbyte M
    I2cwbyte H

    I2cstop

    Debounce P_1 , 0 , Ust_temp , Sub

    Debounce Esc , 0 , Main , Sub

    Zapis
    Goto Main
    '_______________________________________________________________________________
    Nastaw_temp:
    T = 0


    Do
    Debounce Esc , 0 , Main , Sub

    If P_1 = 0 Then
    T = T + 10
    End If
    If T > 250 Then
    T = 0
    End If
    T0 = T \ 10
    Cls
    Lcd "TEMP.:" ; T0 ; Chr(0) ; "C"
    Waitms 500


    If Ok = 0 Then
    Waitms 400
    Exit Do
    End If
    Loop

    I2cstart
    I2cwbyte 160
    I2cwbyte 23
    I2cwbyte T
    I2cstop

    Zapis
    Goto Main




    '_______________________________________________________________________________

    Nastaw_filtr:


    M_ = C_fon Mod 100
    H_ = C_fon \ 100


    'godzina
    Do
    Debounce Esc , 0 , Main , Sub

    If P_1 = 0 Then
    Incr H_
    End If

    If H_ > 23 Then
    H_ = 0
    End If



    Cls
    Lcd "GODZ. WL: " ; H_

    Waitms 500

    If Ok = 0 Then
    Waitms 500
    Exit Do
    End If

    Loop

    'minuta
    Do


    If P_1 = 0 Then
    Incr M_
    End If


    If M_ > 59 Then
    M_ = 0
    End If


    Cls
    Lcd "MIN. WL: " ; M_
    Waitms 500

    If Ok = 0 Then
    Waitms 500
    Exit Do
    End If

    Loop

    I2cstart
    I2cwbyte 160
    I2cwbyte 15
    I2cwbyte H_
    I2cwbyte M_
    I2cstop


    C_fon = H_ * 100
    C_fon = C_fon + M_

    Zapis

    M_ = C_fof Mod 100
    H_ = C_fof \ 100



    'godzina

    Do
    Debounce Esc , 0 , Main , Sub

    If P_1 = 0 Then
    Incr H_
    End If

    If H_ > 23 Then
    H_ = 0
    End If


    Cls
    Lcd "GODZ. WYL: " ; H_
    Waitms 500

    If Ok = 0 Then
    Waitms 500
    Exit Do
    End If

    Loop

    'minuta
    Do


    If P_1 = 0 Then
    Incr M_
    End If


    If M_ > 59 Then
    M_ = 0
    End If


    Cls
    Lcd "MIN. WYL: " ; M_
    Waitms 500

    If Ok = 0 Then
    Waitms 500
    Exit Do
    End If

    Loop

    I2cstart
    I2cwbyte 160
    I2cwbyte 17
    I2cwbyte H_
    I2cwbyte M_
    I2cstop

    C_fof = H_ * 100
    C_fof = C_fof + M_

    Zapis
    Goto Main


    '_______________________________________________________________________________

    Nastaw_oswietl:

    M_ = C_oon Mod 100
    H_ = C_oon \ 100


    'godzina
    Do

    Debounce Esc , 0 , Main , Sub

    If P_1 = 0 Then
    Incr H_
    End If

    If H_ > 23 Then
    H_ = 0
    End If


    Cls
    Lcd "GODZ. WL: " ; H_
    Waitms 500

    If Ok = 0 Then
    Waitms 500
    Exit Do
    End If

    Loop

    'minuta
    Do

    If P_1 = 0 Then
    Incr M_
    End If


    If M_ > 59 Then
    M_ = 0
    End If


    Cls
    Lcd "MIN. WL: " ; M_
    Waitms 500

    If Ok = 0 Then
    Waitms 500
    Exit Do
    End If

    Loop

    I2cstart
    I2cwbyte 160
    I2cwbyte 19
    I2cwbyte H_
    I2cwbyte M_
    I2cstop

    C_oon = H_ * 100
    C_oon = C_oon + M_

    Zapis

    M_ = C_oof Mod 100
    H_ = C_oof \ 100






    'godzina
    Do
    Debounce Esc , 0 , Main , Sub
    If P_1 = 0 Then
    Incr H_
    End If

    If H_ > 23 Then
    H_ = 0
    End If


    Cls
    Lcd "GODZ. WYL: " ; H_
    Waitms 500

    If Ok = 0 Then
    Waitms 500
    Exit Do
    End If

    Loop

    'minuta
    Do

    If P_1 = 0 Then
    Incr M_
    End If


    If M_ > 59 Then
    M_ = 0
    End If


    Cls
    Lcd "MIN. WYL: " ; M_
    Waitms 500

    If Ok = 0 Then
    Waitms 500
    Exit Do
    End If

    Loop

    I2cstart
    I2cwbyte 160
    I2cwbyte 21
    I2cwbyte H_
    I2cwbyte M_
    I2cstop

    C_oof = H_ * 100
    C_oof = C_oof + M_

    Zapis
    Goto Main


    '______________________________________________________________________________
    Status:
    Cls


    Lcd "F " ; "WL" ; C_fon ; " WYL" ; C_fof
    Lowerline
    Lcd "O " ; "WL" ; C_oon ; " WYL" ; C_oof

    Do
    Debounce Esc , 0 , Main , Sub

    Loop

    '______________________________________________________________________________
    Sub Zapis
    H_ = 0
    M_ = 0
    Cls
    Lcd "ZAPIS USTAWIEN"
    Waitms 750

    Return
    End Sub
    [/syntax]

    Błedy zaznaczyłem pogrubieniem

    http://scr.hu/0oku/5xgp7


    Jeśli ktoś coś doradzi, to chetnie bede próbował dalej coś działać, niestety mam płytkę ZL2AVR, wiec nie mogłem potestować na procesorze z rodziny 8051, na który to pisany był ten program.

    Pozdrawiam wszystkich
    i liczę, że ktoś pomoże!

    Piotrek.

    0 3
  • Pomocny post
    #2 15 Sie 2013 17:29
    wiewioor222
    Poziom 13  

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0
  • #3 16 Sie 2013 18:36
    piotrek-zki
    Poziom 9  

    Witam,
    Wiewioor wielkie dzięki, skompilowalo sie :) teraz może w końcu coś sie uda zdziałać.
    Jeśli możesz to powiedz dlaczego w tamtym kodzie wystepowały błedy bo tego nie rozumiem?

    pozdrawiam

    Piotrek

    0
  • #4 17 Sie 2013 09:19
    wiewioor222
    Poziom 13  

    Odczytywał "_" jako kolejny parametr. Dlatego H_ i M_ poprawiłem na H2 i M2 i jest ok :D Dlaczego tak jest ciężko powiedzieć nie wczytywałem się nigdy w notę Bascoma ale z reguły nie kończę nazwy zmiennej znakiem tylko literą bądź liczbą.

    0
  Szukaj w 5mln produktów