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

Błąd w programie zamka szyfrowego na procesorze 89C2051 - inicjalizacja Kod1

aismen 27 Sty 2007 21:21 2845 11
REKLAMA
  • #1 3495672
    aismen
    Poziom 14  
    Posty: 186
    Pomógł: 1
    Ocena: 12
    'Zamek Mikroprocesorowy
    'procesor 89C2051
    '*******************************
    $crystal = 12000000
    Dim Klawisz As Byte , Adm As Byte , Wynik As Byte
    Dim Licznik As Byte , Licznik1 As Byte
    Dim Kod1 As String * 10 , Kod0 As String * 10

    P1 = 255
    P3 = 255
    Licznik = 0
    Licznik1 = 0
    Kod0 = "[\]"
    Kod1 = Left(0) ????TU mi wywala błąd ???? .......pomocy ...dlaczego[/b]
    Wynik = 0
    Adm = 0


    '*******************************
    'petla glowna
    '*******************************
    Do
    Reset P1.6
    Klawisz = 60
    Gosub Kolumna

    Reset P1.5
    Klawisz = 70
    Gosub Kolumna

    Reset P1.3
    Klawisz = 80
    Gosub Kolumna

    Reset P1.1
    Klawisz = 90
    Gosub Kolumna
    Loop

    '*******************************
    'podprogram kolumna
    '*******************************
    Kolumna:
    If P1.4 = 0 Then
    P3.3 = 0
    Klawisz = Klawisz + 1
    Waitms 20
    Bitwait P1.7 , Set
    Waitms 100
    P3.3 = 1
    Gosub Kod
    End If

    If P1.7 = 0 Then
    P3.3 = 0
    Klawisz = Klawisz + 2
    Waitms 20
    Bitwait P1.7 , Set
    Waitms 100
    P3.3 = 1
    Gosub Kod
    End If

    If P1.2 = 0 Then
    P3.3 = 0
    Klawisz = Klawisz + 3
    Waitms 20
    Bitwait P1.2 , Set
    Waitms 100
    P3.3 = 1
    Gosub Kod
    End If

    P1 = 255

    Return

    '*******************************
    'podprogram kod
    '*******************************
    Kod:
    If Adm = 1 Then
    If Klawisz = 61 Then
    Adm = 0
    Wynik = 0
    Licznik1 = 0
    Gosub Kasuj
    Return
    End If
    Kod0 = Kod0 + Chr(klawisz)
    INC LICZNIK1
    If Licznik = 10 Then
    Adm = 0
    Kod0 = Left(0)
    Licznik1 = 0
    Gosub Kasuj
    End If
    Return
    End If

    If Klawisz = 61 Then
    Gosub Porownaj
    If Wynik = 1 Then
    Gosub Przekaznik
    End If
    Gosub Kasuj
    Return
    End If

    If Klawisz = 63 Then
    Gosub Porownaj
    End If

    If Klawisz = 63 Then
    If Wynik = 1 Then
    Adm = 1
    Kod0 = Left(0)
    Liczni1 = 0

    End If
    Return
    End If

    Kod1 = Kod1 + Chr(klawisz)
    INC LICZNIK

    If Licznik = 10 Then
    Gosub Kasuj
    End If
    Return

    '*********************************
    'podprogram porownaj
    '*********************************
    Porownaj:
    If Kod0 = Kod1 Then
    Wynik = 1
    End If
    Return

    '*********************************
    'podprogram kasuj
    '*********************************

    Kasuj:
    Kod1 = Left(0)
    Licznik = 0
    Wynik = 0
    Return

    '*********************************
    'podprogram przekaznik
    '*********************************
    Przekaznik:

    If P3.2 = 0 Then
    P3.4 = Not P3.4
    P3.5 = Not P3.5
    Return
    End If

    P3.4 = 0
    P3.5 = 0
    Wait 4
    P3.4 = 1
    P3.5 = 1
    Return
  • REKLAMA
  • #2 3495683
    mirekk36
    Poziom 42  
    Posty: 9195
    Pomógł: 964
    Ocena: 2289
    sorry nie zauważyłem gdzie jest pytanie - a umieściłeś je w kodzie - więc może jakoś je oznacz dokładniej

    ... a masz zdekarowany Kod1 jako string więc co ty tam podstawiasz do niego? - co robi to left(0) to jakaś funkcja która zwraca string na wyjściu czy co?
  • #3 3495705
    aismen
    Poziom 14  
    Posty: 186
    Pomógł: 1
    Ocena: 12
    kupiłem kit ......procek nie jest zapisany .....dostałem program wraz z kitem .....przepisałem go w bascomie8051 i nie mogę skompilować

    Kod1 = Left(0)
    tu wywala mi błąd.
    sory ale jestem zielony z programowania

    Dodano po 38 [minuty]:

    błędu przy przepisywaniu chyba nie zrobiłem
    proszę o pomoc
    Pozdrawiam Ais
    http://www.nikomp.com.pl/zestawyK/K-059.htm
  • #4 3496059
    yakuza_2000
    Poziom 21  
    Posty: 291
    Pomógł: 48
    Ocena: 10
    Gdybyś jeszcze podał numer, albo treść błędu to by było o wiele łatwiej.
    Spróbuj zastąpić to tak:

    kod1 = ""

    Oczywiście w podprogramie "kasuj" też to zmień :D

    Pozdrawiam Yakuza
  • REKLAMA
  • #5 3498968
    aismen
    Poziom 14  
    Posty: 186
    Pomógł: 1
    Ocena: 12
    error 12:,expected[0]
    takie cosik wypisuje

    Dodano po 7 [minuty]:

    mam jeszcze jedno pytanie ......czy można bina przekompilować na bascom ?tzn .bin na .bas
    Pozdrawiam ....Ais
  • REKLAMA
  • #7 3499153
    aismen
    Poziom 14  
    Posty: 186
    Pomógł: 1
    Ocena: 12
    Mirek już oczy wypatrzyłem ....... 20 razy sprawdzałem przepisanie tego programu i nadal nic.
    A chodzi mi tylko o to żeby czas działania przekaźnika zwiększyć 2 sekund do 4 sekund no i ciekawość jak to działa.
    Pozdrawiam Zbyszek
    Ais

    Dodano po 3 [minuty]:

    '*******************************

    $crystal = 12000000
    Dim Klawisz As Byte , Adm As Byte , Wynik As Byte
    Dim Licznik As Byte , Licznik1 As Byte
    Dim Kod1 As String * 10 , Kod0 As String * 10

    P1 = 255
    P3 = 255
    Licznik = 0
    Licznik1 = 0
    Kod0 = "[\]"
    Kod1 = Left(0) !!! ERROR 12 !!!
    Wynik = 0
    Adm = 0


    '*******************************
    'petla glowna
    '*******************************
    Do
    Reset P1.6
    Klawisz = 60
    Gosub Kolumna

    Reset P1.5
    Klawisz = 70
    Gosub Kolumna

    Reset P1.3
    Klawisz = 80
    Gosub Kolumna

    Reset P1.1
    Klawisz = 90
    Gosub Kolumna
    Loop

    '*******************************
    'podprogram kolumna
    '*******************************
    Kolumna:
    If P1.4 = 0 Then
    P3.3 = 0
    Klawisz = Klawisz + 1
    Waitms 20
    Bitwait P1.4 , Set
    Waitms 100
    P3.3 = 1
    Gosub Kod
    End If

    If P1.7 = 0 Then
    P3.3 = 0
    Klawisz = Klawisz + 2
    Waitms 20
    Bitwait P1.7 , Set
    Waitms 100
    P3.3 = 1
    Gosub Kod
    End If

    If P1.2 = 0 Then
    P3.3 = 0
    Klawisz = Klawisz + 3
    Waitms 20
    Bitwait P1.2 , Set
    Waitms 100
    P3.3 = 1
    Gosub Kod
    End If

    P1 = 255

    Return

    '*******************************
    'podprogram kod
    '*******************************
    Kod:
    If Adm = 1 Then
    If Klawisz = 61 Then
    Adm = 0
    Wynik = 0
    Licznik1 = 0
    Gosub Kasuj
    Return
    End If
    Kod0 = Kod0 + Chr(klawisz)
    INC LICZNIK1
    If Licznik1 = 10 Then
    Adm = 0
    Kod0 = Left(0)
    Licznik1 = 0
    Gosub Kasuj
    End If
    Return
    End If

    If Klawisz = 61 Then
    Gosub Porownaj
    If Wynik = 1 Then
    Gosub Przekaznik
    End If
    Gosub Kasuj
    Return
    End If

    If Klawisz = 63 Then
    Gosub Porownaj
    End If

    If Klawisz = 63 Then
    If Wynik = 1 Then
    Adm = 1
    Kod0 = Left(0)
    Liczni1 = 0

    End If
    Return
    End If

    Kod1 = Kod1 + Chr(klawisz)
    INC LICZNIK

    If Licznik = 10 Then
    Gosub Kasuj
    End If
    Return

    '*********************************
    'podprogram porownaj
    '*********************************
    Porownaj:
    If Kod0 = Kod1 Then
    Wynik = 1
    End If
    Return

    '*********************************
    'podprogram kasuj
    '*********************************

    Kasuj:
    Kod1 = Left(0)
    Licznik = 0
    Wynik = 0
    Return

    '*********************************
    'podprogram przekaznik
    '*********************************
    Przekaznik:

    If P3.2 = 0 Then
    P3.4 = Not P3.4
    P3.5 = Not P3.5
    Return
    End If

    P3.4 = 0
    P3.5 = 0
    Wait 2
    P3.4 = 1
    P3.5 = 1
    Return



    znalazłem 2 błędy ale itak mi wywala ciągle ten sam błąd
  • #9 3499353
    yakuza_2000
    Poziom 21  
    Posty: 291
    Pomógł: 48
    Ocena: 10
    A zrobiłeś to co Ci powiedziałem?

    Zamiast:

    Kod1 = Left(0)

    Wpisz

    kod1 = ""

    W podprogramie kasuj też tak zmień

    Pozdrawiam Yakuza
  • #10 3499550
    aismen
    Poziom 14  
    Posty: 186
    Pomógł: 1
    Ocena: 12
    nic to nie dało
    program nie działa
  • REKLAMA
  • #11 3499725
    vain
    Poziom 13  
    Posty: 89
    Pomógł: 8
    nie wiem jak na 51 (chyba tak samo) ale skladnia left jest inna nie?

    zmienna = LEFT( tekst , il_znaków )

    gdzie

    zmienna zmienna tekstowa, do której przepisane będą skopiowane znaki,
    tekst tekst z którego skopiowane będą znaki,
    il_znaków ilość kopiowanych znaków.
  • #12 3499868
    aismen
    Poziom 14  
    Posty: 186
    Pomógł: 1
    Ocena: 12
    Panowie ......nieznam się zupełnie na programowaniu ale opanowałem gada .
    Mianowicie problem polegał na tym że trzeba było to przekompilować w bascomie LT , a ja to robiłem w 8051 .
    zamykam temat ......mam bina z 4 sekundowym działaniem przekaźnika po wbiciu właściwego kodu .....uffffff
    Pozdrawiam Ais

Podsumowanie tematu

✨ Dyskusja dotyczy problemu z kompilacją programu zamka szyfrowego opartego na mikrokontrolerze 89C2051 w języku Bascom. Głównym błędem jest niepoprawna inicjalizacja zmiennej typu String o nazwie Kod1 za pomocą wyrażenia "Kod1 = Left(0)", co powoduje błąd kompilacji (error 12: expected [0]). Uczestnicy wskazują, że składnia funkcji Left w Bascom wymaga podania tekstu i liczby znaków, np. Left(tekst, ilość_znaków), a nie pojedynczej liczby 0. Proponowano zastąpienie inicjalizacji Kod1 pustym łańcuchem znaków (""). Ostatecznie problem wynikał z użycia niewłaściwej wersji Bascom – program należało skompilować w Bascom LT, a nie w Bascom 8051. Po poprawnym skompilowaniu uzyskano działający program z czasem działania przekaźnika wydłużonym do 4 sekund. W dyskusji pojawiły się także pytania o możliwość dekompilacji pliku binarnego (.bin) do kodu źródłowego (.bas), na co odpowiedziano, że jest to niemożliwe.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA