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

attiny2313[bascom] - Błąd w kodzie do zamka szyfrowego

05 Paź 2015 19:18 1062 9
  • Poziom 8  
    Witam
    Mam pewien problem z tym kodem

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Alarm ma się załączyć za trzecim błędnym wpisanym kodem i tu pojawia się problem, bo nie reaguje. Tzn nie przechodzi do podprogramu "alarmowanie".
    Gdy ustawię załączanie alarmu za drugim razem
    Cytat:
    If Alarm = 2 Then
    Goto Alarmowanie
    Alarm = 0
    End If

    to wszystko działa.

    Zmienną definiuję następująco:
    Cytat:
    dim alarm as byte


    Nie mam pomysłu co robię źle.
  • Relpol
  • Pomocny post
    Poziom 28  
    1. Daj sprawdzanie szyfru w pętli bo zajeździsz BASCOM'a tak długim warunkiem ;-)

    Kod: BASCOM
    Zaloguj się, aby zobaczyć kod


    2. Zamiast Goto Alarmowanie powinno być Gosub Alarmowanie ponieważ Alarm = 0 nigdy nie zostanie wykonane.
  • Relpol
  • Poziom 8  
    Zamieniłem goto na go sub i nic nie dało. Nadal nie przechodzi w podprogram "alarmowanie". Ale gdy ustawie
    Cytat:
    If Alarm = 2 Then
    działa wyśmienicie.
    Do zmiennej alarm można przypisać od 0 do 255, więc czemu nie może zliczyć do 3?

    Ta pętla działa tak, że sprawdza czy jest jakiś błąd i zwraca zmienną valid = 0? A jeśli wszystko się zgadza to valid = 1?
  • Poziom 37  
    Zmienna jest zadeklarowana, ale nie jest zainicjowana. Nie wiem czy bascom dokonuje autoinicjalizacji z wartością zero, ale jeśli nie to przy/po deklaracji najlepiej zainicjować domyślną/startową wartością każdą użytą zmienną, oprócz indeksowych z For bo są tak czy siak tam inicjowane.
    Wybrany fragment z tutoriala BASCOM-AVR
    Cytat:
    Notice that a LOCAL variable is not initialized. It will contain a value that will depend on the value of the FRAME data. So you can not assume the variable is 0. If you like it to be 0, you need to assign it.
  • Poziom 28  
    Możesz wrzucić tu kompletny kod programu ?
  • Poziom 8  
    Oczywiście mam przypisane wartości początkowe do zmiennych.

    Oto kod:

    Spoiler:
    Kod: bascom
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    Poziom 28  
    Wywal Goto przy Sprawdzanie i Gosub przy Alarmowanie. Ma zostać samo Sprawdzanie i Alarmowanie ponieważ teraz masz je jako procedury a nie jak wcześniej etykiety skoków.
  • Poziom 8  
    Wyrzuciłem i działa. Myślałem, że trzeba wstawiać "goto" i "gosub" i to mnie zmyliło.
  • Poziom 35  
    aarrreeeekkkkk napisał:
    Wyrzuciłem i działa. Myślałem, że trzeba wstawiać "goto" i "gosub" i to mnie zmyliło.


    Instrukcje GOSUB i GOTO robią w zasdzie to samo; z tą różnicą że GOSUB przed skokiem do określonego miejsca w programie (etykieta) processor odkłada na stos adress ostatniej instrukcji po to aby po wykonaniu tam zadań i napotkaniu RETURN mógł powrócic w to samo miejsce i kontynuowac dalej program. Dla odmiany, instrukcja GOTO nie niesie ze sobą adresu powrotu i z tego powodu programista musi zadbac o dalszą ciągłośc programu.
    W programie mogą wystąpic obie instrukcje lecz nie związane ze sobą.

    Jeżeli stosujesz zadeklarowane Sub to wywołanie skoku do SUB dokonujesz instrukcją CALL na przykład:
    Call Sprawdzanie - lub zwyczajnie Sprawdzanie - zamiast Gosub

    e marcus
  • Poziom 8  
    Dziękuję bardzo za rady. Teraz będę trochę mądrzejszy.