Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Atmega8][BASCOM]Problem z dodawniem do zmiennej

Maciek4141 02 Nov 2008 18:33 1308 2
  • #1
    Maciek4141
    Level 22  
    Witam!
    Pisze właśnie program do swojej wytrawiarki i podczas pierwszych testów kodu natrafiłem na bardzo dziwny problem. Pierwszy raz się z czymś takim spotykam. Mianowicie, kiedy dodam 12 lub 13 razy "1" do zmiennej S wyskakują na LCD jakieś "pierdoły" i procesor sam się resetuje. Nie mam pojęcia co się dzieje, może ktoś jest w stanie pomóc i powiedzieć co z tym fantem zrobić? Poniżej kod, którego nie mogę rozwinąć bo mam w/w problem.

    Code:
    $crystal = 1000000
    
    Declare Sub Glowny
    Declare Sub Czas

    Config Portc = Output

    Dim Temperatura As Byte , Czas_min As Byte , T As Byte
    Dim S As Byte
    Dim Grzanie As Bit
    Dim Bombelki As Bit


    Deflcdchar 0 , 4 , 10 , 10 , 10 , 10 , 17 , 31 , 14         ' TERMOMETR
    Deflcdchar 1 , 25 , 26 , 28 , 31 , 28 , 26 , 25 , 32        ' GRZANIE
    Deflcdchar 2 , 32 , 24 , 24 , 3 , 3 , 24 , 27 , 3           ' BOMBELKI
    Deflcdchar 3 , 14 , 10 , 14 , 32 , 32 , 32 , 32 , 32        'STOPIEN
    Deflcdchar 4 , 32 , 4 , 4 , 4 , 32 , 32 , 32 , 32           'ZEGAR 1
    Deflcdchar 5 , 32 , 32 , 32 , 7 , 32 , 32 , 32 , 32         'ZEGAR 2
    Deflcdchar 6 , 32 , 32 , 32 , 4 , 4 , 4 , 32 , 32           'ZEGAR 3
    Deflcdchar 7 , 32 , 32 , 32 , 28 , 32 , 32 , 32 , 32        'ZEGAR 4
    Czas_min = 10                                               'DLA TESTÓW
    Cursor Off


    Do
    Cls
    Call Glowny
    Loop
    End



    Sub Glowny:
       Cls
       Lcd Chr(0) ; " " ; Temperatura ; Chr(3) ; "C"
       Locate 1 , 10
       Lcd Chr(1)
       If Grzanie = 0 Then
          Lcd " COLD"
       Else
          Lcd " HEAT"
       End If
       Locate 2 , 1
       Lcd Chr(2)
        If Bombelki = 0 Then
          Lcd " OFF"
       Else
          Lcd " ON"
       End If
       Locate 2 , 10
          Select Case T:
          Case 1 : Lcd Chr(4)
          Case 2 : Lcd Chr(5)
          Case 3 : Lcd Chr(6)
          Case 4 : Lcd Chr(7)
          End Select
       Lcd " " ; Czas_min
       Locate 2 , 14
       Lcd "min"




    Call Czas


    Do
    Loop
    End
    End Sub


    Sub Czas:
     Wait 1
       Incr S
       Incr T
       If T = 5 Then
          T = 1
       End If

       If S = 60 Then
          Decr Czas_min
          S = 0
       End If
       Call Glowny

    End Sub






    PS. Proszę się nie czepiać że do odliczania czasu używam wait, ale tutaj w wytrawiarce nie potrzebuję dokładności co do sekundy.

    Pozdrawiam i z góry dziękuję za pomoc
    Maciek
    [28-30.06.2022, targi] PowerUP EXPO 2022 - zasilanie w elektronice. Zarejestruj się za darmo
  • Helpful post
    #2
    BoskiDialer
    Level 34  
    Jeśli Call to wywołanie funkcji z odkładaniem adresu powrotu na stos, to doprowadzasz do przepełnienia stosu.
  • #3
    Maciek4141
    Level 22  
    Dziękuję serdecznie za prawidłową odpowiedź/pomoc.
    Temat uważam za zamknięty.
    Pozdrawiam