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

Program zamka cyfrowego ATMEGA 8

wojlej 28 Paź 2009 21:18 3054 14
  • #1 7187214
    wojlej
    Poziom 17  
    Witam.
    Zaprojektowałem schemat, wykonałem płytki, polutowałem, napisałem program na bazie innych i nie działa.

    Poniżej przedstawiam schemat:
    Zdjęcia należy wklejać tak:
    https://www.elektroda.pl/rtvforum/topic1229082.html
    Proszę poprawić.
    /prezeswal/.


    O to schematy

    Program zamka cyfrowego ATMEGA 8Program zamka cyfrowego ATMEGA 8
    Program:

    '**********************************************************
    'Lejkowski Wojciech
    'Projekt zamka cyfrowego
    'Procesor ATmega 8
    'Kompilator BASCOM AVR
    '**********************************************************
    $regfile = "m8def.dat"
    $crystal = 8000000
    
    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
    
    Portd = 255
    Portb = &B000100
    Licznik = 0
    Licznik1 = 0
    Kod0 = "[\]"
    Kod1 = ""
    Wynik = 0
    Adm = 0
    
    '**********************************************************
    'Petla glowna
    '**********************************************************
    
    Do
      Reset Pind.3
      Klawisz = 60
      Gosub Kolumna
    
      Reset Pind.4
      Klawisz = 70
      Gosub Kolumna
    
      Reset Pind.5
      Klawisz = 80
      Gosub Kolumna
    
      Reset Pind.6
      Klawisz = 90
      Gosub Kolumna
    Loop
    
    '**********************************************************
    'podprogram kolumna
    '**********************************************************
    Kolumna:
    
      If Pind.0 = 0 Then
         Pinb.4 = 1
         Klawisz = Klawisz + 1
         Waitms 20
         Bitwait Pind.0 , Set
         Waitms 100
         Pinb.4 = 0
         Gosub Kod
      End If
    
      If Pind.1 = 0 Then
         Pinb.4 = 1
         Klawisz = Klawisz + 2
         Waitms 20
         Bitwait Pind.1 , Set
         Waitms 100
         Pinb.4 = 0
         Gosub Kod
      End If
    
      If Pind.2 = 0 Then
         Pinb.4 = 1
         Klawisz = Klawisz + 3
         Waitms 20
         Bitwait Pind.2 , Set
         Waitms 100
         Pinb.4 = 0
         Gosub Kod
      End If
    
    Portd = 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)
        Incr Licznik1
        If Licznik1 = 10 Then
           Adm = 0
           Kod0 = ""
           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 = ""
            Licznik1 = 0
         End If
      Return
      End If
    
      Kod1 = Kod1 + Chr(klawisz)
      Incr 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 = ""
      Licznik = 0
      Wynik = 0
    Return
    
    '**********************************************************
    'podprogram przekaznik
    '**********************************************************
    
    Przekaznik:
      If Pinb.3 = 0 Then
         Pinb.2 = Not Pinb.2
         Pinb.5 = Not Pinb.5
         Return
      End If
    
      Pinb.2 = 1
      Pinb.5 = 1
      Wait 4000
      Pinb.2 = 0
      Pinb.5 = 0
    Return


    Otóż, po naciśnięciu przycisku powinie piszczeć głośnik, jednak nic się nie dzieje. Po wpisaniu kodu 123* powinien zaskoczyc przekaźnik, nic. Do uP dochodzi napięcie, dokładnie 4,85V. Jak zewre emiter z kolektorem tranzystora głośnika to piszczy, tak samo z przekaźnikiem.

    Generalnie proszę o sprawdzenie programu, czy ma on prawo działać.

    Pozdrawiam i dzięki.

    EDIT:

    Sprawdziłem napięcie między bazą tranzystora a masą w momencie wciśnięcia przycisku. Żadne napięcie się nie pojawia, więc sugeruje, żę to może być wina programu.

    Proszę o sprawdzenie, Dziękuje z góry
  • #2 7188123
    gucio1
    Poziom 12  
    sprawdz

    Portb = &B000100 - ??
    czy ustawiłeś pb3 na wejście


    ta procedura to chyba niepotrzebna ?? później i tak ustawiasz bity na konkretne wartości
    Przekaznik:
    If Pinb.3 = 0 Then
    Pinb.2 = Not Pinb.2
    Pinb.5 = Not Pinb.5
    Return
    End If


    czy klawisze mają jakieś zasilanie? lub są zwarte do masy?
  • #3 7190557
    wojlej
    Poziom 17  
    Cytat:
    czy klawisze mają jakieś zasilanie? lub są zwarte do masy?


    Nie, to jest klawiatura martrycowa jak widać na schemacie, odczytuje wartości wiersz-kolumna.

    Cytat:
    czy ustawiłeś pb3 na wejście


    PB3 ma wartość 1, od zworki zależy tryb pracy? Czy to jest nie tak?
  • #4 7190607
    ATPAW
    Poziom 20  
    Dziwnie masz wykonany układ resetu.
  • #5 7190632
    gucio1
    Poziom 12  
    wolę sie upewnić czy liczysz bity od 0 czy od 1...
    bo wynika mi że ustawiony na wejście jest 3 licząc od 1

    Dodano po 36 [minuty]:

    nie widze zeby było sprawdzenie "klawisz=62" jest dwa razy 61 i 63
    poza tym - na początek pomiń kombinacje z kodem - zrób proste sprawdzenie i otwieranie zamka przyciskiem np.1 - i już - sprawdzisz czy procek daje sygnały na wyjście - a później kombinuj z klawiaturą.
    powodzenia
  • #6 7192181
    wader_669
    Poziom 28  
    nie chce mi sie sprawdzac kodu. Stawiam na to, ze nie przestawilem fusebitow
  • #7 7193668
    gucio1
    Poziom 12  
    jeszcze raz sie upre bo coś mi tu śmierdzi...

    pb2 pb4 pb5 wejście (zamek,głośnik dioda)

    pb3 wejście (nie wiem co to ...) sprawdzenie masy

    i jedziemy pb7 pb6 pb4 pb3 pb2 pb1 pb0
    ? ? 0 1 0 ? ?

    no to chyba powinno byc tak PB=B0001000 lub =8

    a Ty masz
    Portb = &B000100 - ??


    ja tu widze o jedno zero za mało ... :)
  • #8 7195116
    wojlej
    Poziom 17  
    OK, ale PORTB ma 6 wyjść. PB5, PB4, PB3, PB2, PB1, PB0

    Założenie jest takie, normalnie PB3 ma ustawione 1. Jeśli założona jest zworka to na wyjściu PB3 jest 0 i przekaźnik załącza się do momentu wpisania ponownie kodu, jeśli zworki nie ma to jest 1 i przekaźnik załącza się na 4s

    Cytat:
    Dziwnie masz wykonany układ Resetu


    Tam est tylko zworka która jest założona cały czas, no i szeregowo rezystor
  • #9 7195375
    xury
    Specjalista automatyka domowa
    Nie widzę deklaracji pamięci na stosy, a program potrzebuje sporo pamięcina nie, bo co chwila jest skok do jakiegoś podprogramu. Nie chce mi sie go kopiowac i i emulować, ale założę sie, że za chwilę ujrzałbym na standardowych ustawieniach stosu taki fajny napis "...stack overlaped".
  • #10 7195472
    wojlej
    Poziom 17  
    W niedziele myślę, spróbuje wgrać prosty program do załączania przekaźnika za pomocą przycisku. To mój pierwszy projekt z uC. Xury? Czyli muszę zadeklarować wielkość stosu?

    gucio1? Czy dalej widzisz błąd w konfiguracji portów?

    Dzięki wszystkim i czekam dalej, w niedzielę myślę, dam znać.

    Pozdrawiam
  • #11 7196082
    xury
    Specjalista automatyka domowa
    Musisz posprawdzać sobie ile potrzeba Ci pamięci na stosy. Każde polecenie gosub odkłada dwa bajty na stos. Pamięć ta jest zwracana przy wyjściu z podprogramu, ale jeśli z tego podprogramu uruchamiany jest następny podprogram, to nie dość że pamięć nie jest zwracana (bo nie ma prawidłowego wyjścia z podprogramu) to jeszcze następne dwa bajty są odkładane na stos. Jeśli z tego podpogramu uruchamiany jest następny itd. to można sobie łatwo wyobrazić że po pewnym czasie pamięć zadeklarowana na stos zapełni się i wejdzie na inny stos lub jeszcze dalej czyli na zmienne.
    Poczytaj sobie polskiego helpa do Bascoma - instrukcja STCHECK. Nie chodzi mi o samą instrukcję jak o opis działania stosów.
    Pisząc programy staraj się unikać zagnieżdżania podprogramów, a jeśli już musisz to staraj się to robić tak by po pewnym czasie zagnieżdżania prawidłowo opuszczały podprogramy. Pobieżnie analizując Twój program wygląda na prawidłowo wychodzący, ale stos można zwiększyć, bo i tak masz mało zmiennych więc można.
    Ajajaj teraz się dopatrzyłem:

    Przekaznik: 
      If Pinb.3 = 0 Then 
         Pinb.2 = Not Portb.2 
         Pinb.5 = Not Portb.5 
         Return 
      End If 
    
      Pinb.2 = 1 
      Pinb.5 = 1 
      Wait 4000 
      Pinb.2 = 0 


    Czyli próbujesz ustawiać piny - błąd bo powinno być:
    Przekaznik: 
      If Pinb.3 = 0 Then 
         Portb.2 = Not Pinb.2         'a nie lepiej Toggle Portb.2 ?
         Portb.5 = Not Pinb.5 
         Return 
      End If 
    
      Portb.2 = 1 
      Portb.5 = 1 
      Wait 4000 
      Portb.2 = 0 


    I wszędzie tam gdzie próbujesz ustawiać np. Pinb.2 = 1 jest źle, bo za pomocą takiej konstrukcji można tylko odczytać stan końcówki.
    Aby ustawić trzeba użyć Portb.2 = 1.
    Pozmieniaj Pinx.x na Portx.x wszędzie tam gdzie chcesz ustawić stan logiczny. Pozostaw wszedzie tam gdzie odczytujesz czyli na przykład w instrukcjach IF

    A i jeszcze jedno - nie widzę konfiguracji wyjść. O ile po restarcie wszystkie końcówki są wejściami pływającymi to nie ani jedna nie jest wyjściem.
    Według schematu wyjściami są końcówki od PB2 do PB5 a nie widzę skonfigurowanych bitów DDRB.
    Jeszcze lepiej jakby też wejścia skonfigurować - no chyba że mogą być pływające.
    Jedyne co jest to:
    Portd = 255 
    Portb = &B000100
    

    Co oznacza mniej więcej podciągnięcie wszystkich wejść portu D i co za tym idzie nie rozumiem jak ma działać klawiatura podpięta pod port D ? Wogóle nie rozumiem tej klawiatury. po naciśnięciu powinien się zmieniać stan na końcówkach ,ale jak skoro wszystkie są na jednakowym stanie? Wg mnie oprócz tego, że są zwierane ze sobą to powinny być także zwierane do masy.

    Druga linia to podciągnięcie PB.2 ale żada końcówka portu B nie jest wyjściem, bo nie zostały ustawione bity DDRB.

    Polecam skorzystanie z opcji config port lub config pin, bo są łatwiejsze niż ustawianie bitów w rejestrach DD
    I... jeszcze jedno.
    Budując klawiaturę matrycową to bym zrobił tak, że wiersze matrycy skonfigurowałbym jako wejścia, a kolumny jako wyjścia. Tak jak w książce Wiązani na stronie 230.
    Druga wersja to mniej więcej podobna do twojej z tym, że trzeba by określić tablicę konwersji stanu końcówek portu zwieranych z masą. Czyli np. stan niski na PD0 i PD7 to cyfra 1, stan niski na PD1 i PD7 to cyfra 2 itd.
    W tym momencie Twoja klawiatura nie ma prawa działać.
  • #12 7232057
    wojlej
    Poziom 17  
    Więc tak, przerobiłem schemat teraz wgralem program ze strony:
    http://www.mcselec.com/index.php?option=com_content&task=view&id=160&Itemid=57

    Wpisywanie kodu 5060 działa. Jednak nie można wpisać nowego. Po wpisaniu *506 już zaczyna wykonywać procedurę ERROR. Nie widzę w tym programie nawet żadnej procedury wpisania nowego kodu do zmiennej Mycode.

    Czy w tym programie powinienem móc wpisać nowy kod?
  • #14 7238316
    wojlej
    Poziom 17  
    Już powoli tracę cierpliwość. Zmieniłem oryginalny kod ale nie działa. Przypominam, że moim celem jest aby miał możliwość wpisania nowego kodu w taki sposób:

    *stary_kod#nowy_kod#

    No i w oryginalnym programie jest tak, że kod jest akceptowany po wpisaniu 4 cyfr, a ja chce, żeby trzeba było zatwierdzić kod #. Poniżej przedstawiam oryginalny kod, niżej zmodyfikowany:

    $regfile = "m8def.dat"
    $crystal = 8000000
    
    Dim Keyread As Byte
    Dim Key As Byte
    Dim Code As Word
    Dim Mycode As Word
    Dim Digits As Byte
    Dim Point As Byte
    
    Ddrb = 255
    Portb = 0
    
    Relay Alias Portb.2
    Beep Alias Portb.4
    
    Config Kbd = Portd , Debounce = 40
    
    
    Mycode = 5060
    
    
    
    
    Do
    
    
        Set Beep
        Waitms 100
        Reset Beep
        Waitms 100
    
    Begin:
        Code = 0
        Digits = 0
        Point = 0
    
    
    Do
        Keyread = Getkbd()
            If Keyread <> 16 Then Gosub Gotkey
            Waitms 100
                If Digits = 4 Then
     If Code = Mycode Then
     Goto Opendoor
     Else
     Goto Error
     End If
                End If
    Loop
    
    Loop
    
    
    
    Gotkey:
        Ddrb = 255
        Set Beep
        Waitms 100
        Reset Beep
        Waitms 100
    
        Key = Lookup(keyread , Dta)
    
        Incr Digits
        Point = Digits + 6
    
    
        Code = Code * 10
        Code = Code + Key
    Return
    
    Dta:
        Data 12 , 9 , 6 , 3 , 0 , 8 , 5 , 2 , 11 , 7 , 4 , 1
    
    Error:
    
    
        Waitms 100
        Set Beep
        Wait 3
        Reset Beep
        Wait 20
        Goto Begin
    
    Ok:
        Waitms 100
        Set Beep
        Waitms 200
        Reset Beep
        Waitms 200
        Set Beep
        Waitms 200
        Reset Beep
        Return
    
    Opendoor:
    
        Gosub Ok
    
    
        Waitms 300
        Set Relay
        Wait 1
        Reset Relay
        Wait 1
        Goto Begin


    Zmodyfikowany:

    $regfile = "m8def.dat"
    $crystal = 8000000
    
    Dim Keyread As Byte
    Dim Key As Byte
    Dim Code As Word
    Dim Mycode As Word
    Dim Digits As Byte
    Dim Point As Byte
    
    Ddrb = 255
    Portb = 0
    
    Relay Alias Portb.2
    Beep Alias Portb.4
    
    Config Kbd = Portd , Debounce = 40
    
    
    Mycode = 5060
    
    
    
    
    Do
    
    
        Set Beep
        Waitms 100
        Reset Beep
        Waitms 100
    
    Begin:
        Code = 0
        Digits = 0
        Point = 0
    
    
    Do
        Keyread = Getkbd()
            If Keyread <> 8 And Keyread <> 16 Then Gosub Gotkey
            Waitms 100
                If Keyread = 10 Then
     If Code = Mycode Then
     Goto Opendoor
     Else
     Goto Error
     End If
                End If
         If Keyread = 8 Then Gosub Newcode
    
    Loop
    
    Loop
    
    
    
    Gotkey:
        Ddrb = 255
        Set Beep
        Waitms 100
        Reset Beep
        Waitms 100
    
        Key = Lookup(keyread , Dta)
    
        Incr Digits
        Point = Digits + 6
    
    
        Code = Code * 10
        Code = Code + Key
    Return
    
    Dta:
        Data 12 , 9 , 6 , 3 , 0 , 8 , 5 , 2 , 11 , 7 , 4 , 1
    
    Error:
    
    
        Waitms 100
        Set Beep
        Wait 3
        Reset Beep
        Wait 20
        Goto Begin
    
    Ok:
        Waitms 100
        Set Beep
        Waitms 200
        Reset Beep
        Waitms 200
        Set Beep
        Waitms 200
        Reset Beep
        Return
    
    Opendoor:
    
        Gosub Ok
    
    
        Waitms 300
        Set Relay
        Wait 1
        Reset Relay
        Wait 1
        Goto Begin
    
    Newcode:
    
        Waitms 200
        Set Beep
        Waitms 200
        Reset Beep
        Waitms 500
        Set Beep
        Waitms 200
        Reset Beep
    
        Gosub Gotkey
        Waitms 100
        If Keyread = 10 Then
                If Code = Mycode Then
                Gosub Gotkey
                Waitms 100
                   If Keyread = 10 Then
                   Mycode = Code
    
        End If
                  Else
                   Gosub Error
                   End If
                   End If


    Moja klawiatura dla * zwraca wartość 8 a dla # wartość 10

    Proszę o pomoc. Dzięki

    EDIT:

    Dzisiaj siedzę dalej nad kodem, udało mi się zrobić akceptacje kodu po wciśnięciu kratki. Dokładnie po wciśnięciu kratki zmiennej D przypisuje wartość 1. Wtedy jest warunek, że jeśli D = 1 to program ma wykonać sprawdzenie kodu.

    Poniżej kod:
    $regfile = "m8def.dat"
    $crystal = 8000000
    
    Dim Keyread As Byte
    Dim Key As Byte
    Dim Code As Word
    Dim Mycode As Word
    Dim Digits As Byte
    Dim Point As Byte
    Dim D As Byte
    
    Ddrb = 255
    Portb = 0
    
    Relay Alias Portb.2
    Beep Alias Portb.4
    
    Config Kbd = Portd , Debounce = 40
    
    
    Mycode = 5067
    
    
    
    
    Do
    
    
        Set Beep
        Waitms 100
        Reset Beep
        Waitms 100
    
    Begin:
        Code = 0
        Digits = 0
        Point = 0
        D = 0
    
    Do
    
        Keyread = Getkbd()
            If Keyread <> 16 Then Gosub Gotkey
            Waitms 100
                If D = 1 Then
     If Code = Mycode Then
     Goto Opendoor
     Else
     Goto Error
     End If
            End If
    
    
    
    
    Loop
    
    Loop
    
    
    
    Gotkey:
        Ddrb = 255
        Set Beep
        Waitms 100
        Reset Beep
        Waitms 100
    
        Key = Lookup(keyread , Dta)
    
        If Key = 12 Then
        D = 1
        Return
        Else
        Incr Digits
        Point = Digits + 6
    
    
        Code = Code * 10
        Code = Code + Key
        End If
    
    Return
    
    Dta:
        Data 12 , 9 , 6 , 3 , 0 , 8 , 5 , 2 , 11 , 7 , 4 , 1
    
    Error:
    
    
        Waitms 100
        Set Beep
        Wait 3
        Reset Beep
        Wait 20
        Set Beep
        Waitms 200
        Reset Beep
        Goto Begin
    
    Ok:
        Waitms 100
        Set Beep
        Waitms 200
        Reset Beep
        Waitms 200
        Set Beep
        Waitms 200
        Reset Beep
        Return
    
    Opendoor:
    
        Gosub Ok
    
    
        Waitms 300
        Set Relay
        Wait 1
        Reset Relay
        Wait 1
        Goto Begin


    Teraz myślę, jak rozwiązać możliwość wpisania nowego kodu. Może ma ktoś jakiś pomysł?

    Pozdrawiam


    Dodano:

    Działa, po ciężkich trudach udało mi się.
    Może trochę mało przejrzysty kod, ale działa. Jest to mój pierwszy projekt na uC, więc jestem z siebie zadowolony. Panu przedmówcy daje pomógł bo na prawdę pomógł.

    Przypominam. Pierwszy kod 1234 i akceptacja #.
    Ponowne wpisanie to *stary kod#nowy kod#

    Pozdrawiam

    $regfile = "m8def.dat"
    $crystal = 8000000
    
    Dim Keyread As Byte
    Dim Key As Byte
    Dim Code As Word
    Dim Mycode As Word
    Dim Digits As Byte
    Dim Point As Byte
    Dim D As Byte
    Dim K As Byte
    Dim C As Byte
    Dim E As Byte
    
    Ddrb = 255
    Portb = 0
    
    Relay Alias Portb.2
    Beep Alias Portb.4
    Led Alias Portb.5
    
    Config Kbd = Portd , Debounce = 40
    
    
    Mycode = 1234
    
    
    
    
    Do
    
    
        Set Beep
        Waitms 100
        Reset Beep
        Waitms 100
    
    Begin:
        Code = 0
        Digits = 0
        Point = 0
        D = 0
        K = 0
        C = 0
        E = 0
    
    Do
    
        Keyread = Getkbd()
    
            If Keyread <> 16 Then Gosub Gotkey
            Waitms 100
                If K = 1 Then
                Goto Checkcode
                End If
                If D = 1 Then
     If Code = Mycode Then
     Goto Opendoor
     Else
     Goto Error
     End If
            End If
    
    
    
    
    Loop
    
    Loop
    
    
    
    Gotkey:
        Ddrb = 255
        Set Beep
        Waitms 100
        Reset Beep
        Waitms 100
    
        Key = Lookup(keyread , Dta)
    
        If Key = 12 Then
        D = 1
        Return
    
        Elseif Key = 11 Then
        K = 1
        Return
    
        Else
        Incr Digits
        Point = Digits + 6
    
    
        Code = Code * 10
        Code = Code + Key
        End If
    
    Return
    
    Oldcode:
        Ddrb = 255
    
        Set Beep
        Waitms 100
        Reset Beep
        Waitms 100
    
        Key = Lookup(keyread , Dta)
    
        If Key = 12 Then
        C = 1
        Return
        Else
        Incr Digits
        Point = Digits + 6
    
    
        Code = Code * 10
        Code = Code + Key
        End If
    
    Return
    
    New_code:
        Ddrb = 255
    
        Set Beep
        Waitms 100
        Reset Beep
        Waitms 100
    
        Key = Lookup(keyread , Dta)
    
        If Key = 12 Then
        E = 1
        Return
        Else
        Incr Digits
        Point = Digits + 6
    
    
        Code = Code * 10
        Code = Code + Key
        End If
    
    Return
    
    Dta:
        Data 12 , 9 , 6 , 3 , 0 , 8 , 5 , 2 , 11 , 7 , 4 , 1
    
    Error:
    
    
        Waitms 100
        Set Beep
        Wait 3
        Reset Beep
        Set Led
        Wait 20
        Set Beep
        Reset Led
        Waitms 200
        Reset Beep
        Goto Begin
    
    Ok:
        Waitms 100
        Set Beep
        Waitms 200
        Reset Beep
        Waitms 200
        Set Beep
        Waitms 200
        Reset Beep
        Return
    
    Opendoor:
    
        Gosub Ok
    
    
        Waitms 300
        Set Relay
        Set Led
        Wait 5
        Reset Relay
        Reset Led
        Wait 1
        Goto Begin
    
    
    Checkcode:
    
       Waitms 100
       Set Beep
       Waitms 200
       Reset Beep
       Waitms 50
       Set Beep
       Waitms 200
       Reset Beep
       Waitms 50
       Set Beep
       Waitms 200
       Reset Beep
       C = 0
       Code = 0
       Digits = 0
       Point = 0
    Do
    
        Keyread = Getkbd()
       If Keyread <> 16 Then Gosub Oldcode
          Waitms 100
                If C = 1 Then
                   If Code = Mycode Then
    
                         E = 0
                         Code = 0
                         Digits = 0
                         Point = 0
                         Do
                         Keyread = Getkbd()
                         If Keyread <> 16 Then Gosub New_code
                            Waitms 100
                               If E = 1 Then
                               Mycode = Code
                               Goto Begin
                         End If
                         Loop
    
    
    
                   Else
                   Goto Error
                   End If
    
       End If
    Loop
REKLAMA