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.

Proszę o pomoc w kompilacji

07 Jul 2009 12:26 969 2
  • Level 12  
    Witam
    Mam problem ze skompilowaniem kodu w Bascomie. Cały czas wywala błąd:
    ERROR :344 Line: 108 Program will overwrite bootloader [4 to long].
    Z tego co ja zrozumiałem to kod jest za duży, niestety nie znam się na programowaniu i nie bardzo wiem co można by zrobić żeby go zmniejszyć.

    Code:
    $regfile = "attiny13.dat"
    
    $crystal = 9600000
    $hwstack = 16
    $swstack = 8
    $framesize = 16

    Dim Timer_main As Byte                                      'zegar zliczajacy 2s
    Dim Timer_signal As Byte                                    'zegar zliczajacy 10ms
    Dim Flag_1_overflow As Bit                                  'flaga pierwszego przepelnienia Timer_signal
    Dim Signal_start As Byte                                    'poczatek impulsu
    Dim Signal_width As Byte                                    'szerokosc impulsu
    Dim Mask As Byte                                            'maska swiatla ladowania
    Dim Flag_idle As Bit                                        'flaga pracy w trybie AWARIA


    Config Portb = &B111101                                     'ustawienie wejsc i wyjsc
    Portb = &B011101                                            'zapalenie diodek

    Flag_1_overflow = 0
    Flag_idle = 0
    Mask = &B000010


    Config Int0 = Change                                        'zewnetrzne przerwanie na zmiane stanu PB1

    Config Timer0 = Timer , Prescale = 64                       'wystartowanie timera zliczajacego 100us
    Timer0 = 241                                                'ustawienie stanu poczatkowego timera

    Enable Int0                                                 'uruchomienie przerwania zewnetrznego
    Enable Timer0                                               'uruchomienie przerwania od timera
    Enable Interrupts                                           'odblokowanie przerwan
    On Int0 Signal_int                                          'wskazanie procedury obslugi przerwania
    On Timer0 100us                                             'wskazanie procedury obslugi przerwania



    Do                                                          'poczatek programu

      If Timer_signal = 100 Then                                'jesli minelo 10ms
        Timer_signal = 0                                        'wyzeruj zegar zliczajacy 10ms
        Incr Timer_main                                         'dodaj 1 do zegara zliczajacego 2s
        If Flag_1_overflow = 0 Then                             'jesli zegar 10ms nie przepelnil sie
          Flag_1_overflow = 1                                   'oznacz flage przepelnienia zegara 10ms 1 raz
        End If
      End If

      If Timer_main = 200 Then                                  'jesli minely 2s
        Timer_main = 0                                          'wyzeruj zegar zliczajacy 2s
        If Flag_idle = 0 Then                                   'jesli program nie pracuje w trybie AWARIA
          If Signal_width < 15 Then                             'jesli impuls krotszy niz 1,5ms
            Mask = &B110111                                     'ustaw maske gaszacej swiatlo ladowania
          Else                                                  'jesli impuls dluzszy niz 1,5ms
            Mask = &B111111                                     'ustaw maske zapalajacej swiatlo ladowania
          End If
          If Signal_width < 9 Then                              'jesli impuls krotszy niz 0,9ms
            Flag_idle = 1                                       'oznacz flage pracy w trybie AWARIA
          End If
          If Signal_width > 21 Then                             'jesli impuls dluzszy niz 2,1ms
            Flag_idle = 1                                       'oznacz flage pracy w trybie AWARIA
          End If
        End If
        Signal_width = 0                                        'wyzerowanie odczytanego stanu
      End If

      If Flag_idle = 0 Then                                     'jesli program nie pracuje w trybie AWARIA
        Select Case Timer_main
          Case 0 To 1 : Portb = &B011100 And Mask
          Case 30 To 31 : Portb = &B011001 And Mask
          Case 100 To 101 : Portb = &B011100 And Mask
          Case Else : Portb = &B011000 And Mask
        End Select
      Else                                                      'jesli program pracuje w trybie AWARIA
        Select Case Timer_main
          Case 0 To 1 : Portb = &B010100
          Case 25 To 26 : Portb = &B010001
          Case 40 To 41 : Portb = &B010001
          Case 100 To 101 : Portb = &B010100
          Case Else : Portb = &B010000
        End Select
      End If

    Loop
    End                                                         'koniec programu



    100us:                                                      'procedura obslugi przerwania od timera
    Timer0 = 241                                                'ustawienie stanu poczatkowego timera
    Incr Timer_signal                                           'zwiekszenie stanu zegara zliczajacego 10ms
    Return



    Signal_int:                                                 'procedura obslugi przerwania zewnetrznego
      If Pinb.1 = 1 Then                                        'jesli przerwanie rozpoczynajace impuls
        Signal_start = Timer_signal                             'zapamietanie stanu zegara 10ms na przerwaniu
        Flag_1_overflow = 0                                     'wyzerowanie flag przepelnienia zegara 10ms
        Flag_idle = 0                                           'wyzerowanie flagi pracy w trybie AWARIA
      Else                                                      'jesli przerwanie konczace impuls
        If Flag_1_overflow = 0 Then                             'jesli zegar 10ms nie przepelnil sie
          Signal_width = Timer_signal - Signal_start
        Else                                                    'jesli zegar 10ms przepelnil sie 1 raz
          Signal_width = 149 + Timer_signal
          Signal_width = Signal_width - Signal_start
          Flag_1_overflow = 0
        End If
      End If
    Return

    Jeśli ktoś byłby tak dobry i skompilował mi to, to będę bardzo wdzięczny
    [Szkolenie 22.06.2021, g.9.30] Zabezpieczenia Internetu Rzeczy (IoT) programowe i sprzętowe. Zarejestruj się za darmo
  • Helpful post
    Level 37  
    Witam !
    Kod jest dobry, kompiluje się w Bascomie AVR 1.11.7.9.
    Może kompilujesz w Bascomie 8051 ?
    Pozdrawiam. Stefan
    W piku ZIP masz pliki HEX i BIN
  • Level 12  
    Wszystko poszło ok, dziękuję za pomoc.