Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Przerobienie programu na inny rodzaj mikrokontrolera

lolcio 05 Sep 2010 17:53 1242 3
  • #1
    lolcio
    Level 16  
    Witam!
    Próbuje zrobić zegar binarny wg projektu ze strony:
    http://mirley.firlej.org/zegar_binarny
    ale jest maly problem...nie moge uzyc kontrolera jaki jest w tym projekcie (at89c2051)..mam tylko attiny2313 , czy moglby mi ktos pomoc zmienic program (bascom) tak zeby dzialal na attiny?
    Za pomoc oferuje 15 pkt na zachete ;)
    Oto kod programu:
    $large
                                      'Zmienne
    '*******************************************************************************
    Dim Flaga_praca As Bit , Wygaszenie As Bit , Stan_buzzer As Bit , Help_bit As Bit
    Dim Poz_menu As Byte , Inwersja_wysw As Bit , Kolejnosc As Bit , Buzzer_onoff As Bit
    Dim Co2ms As Byte , Co4ms As Byte , Co1sek As Byte
    Dim Sp1 As Byte , Auto_powrot As Byte , Licz_miganie As Byte
    
    Dim Sekundy As Byte , Minuty As Byte , Godziny As Byte
    Dim Minuty_buz As Byte , Godziny_buz As Byte , Sekundy_buz As Byte
    
    
    Dim Poz_wyswietlana As Byte , Ustawianie As Byte
    Dim Przycisk As Byte , Przycisk2 As Byte , Przycisk3 As Byte
    Dim P_plus As Bit , P_minus As Bit , P_menu As Bit
    '*******************************************************************************
                                     'stawienia Poczštkowe
    '*******************************************************************************
    
    Enable Interrupts
    Config Timer0 = Timer , Gate = Internal , Mode = 2
    Load Timer0 , 250                                            
    Enable Timer0
    Start Timer0
    On Timer0 Przerwanie_timer
    '*******************************************************************************
                                     'Nazwy Wyprowadzeń
    '*******************************************************************************
    Buzzer Alias P3.7
    Test_napiecia Alias P1.4
    Prz_plus Alias P1.5
    Prz_minus Alias P1.7
    Prz_menu Alias P1.6
    
    '*******************************************************************************
                                 'Wartosci poczatkowe
    '*******************************************************************************
    Buzzer = 1
    P1 = 255
    Prz_plus = 1
    Prz_minus = 1
    Prz_menu = 1
    Test_napiecia = 1
    Inwersja_wysw = 1
    Kolejnosc = 1
    
    Poz_wyswietlana = 5
    Ustawianie = 0
    Poz_menu = 0                                                  '0=czas ,1=budzik 2=ustawienia
    
    Auto_powrot = 0
    '*******************************************************************************
                                     'Program Glowny
    '*******************************************************************************
    Do
      If Test_napiecia = 1 Then
          P1 = 255
          Buzzer = 1
          Idle
      Else
       If Flaga_praca = 1 Then Gosub Praca
      End If
    Loop
    
    End
    '*******************************************************************************
                                    'Przerwanie Timera
    '*******************************************************************************
    Przerwanie_timer:
    
    Incr Co2ms
    If Co2ms = 8 Then
      Co2ms = 0
      Set Flaga_praca                                             'co 2ms
      Incr Co4ms
      If Co4ms = 2 Then
        Co4ms = 0
        Incr Co1sek
        If Co1sek = 250 Then
          Co1sek = 0
          Incr Sekundy
          If Sekundy >= 60 Then
            Sekundy = 0
            Incr Minuty
            If Minuty >= 60 Then
              Minuty = 0
              Incr Godziny
              If Godziny >= 24 Then
                Godziny = 0
              End If
            End If
          End If
        End If
      End If
    End If
    
    Return
    '*******************************************************************************
                                    'Wykonywane co 2ms
    '*******************************************************************************
    Praca:
    
    Flaga_praca = 0
    
    Incr Poz_wyswietlana
    If Poz_wyswietlana = 6 Then Poz_wyswietlana = 0               'multipleksuje cyfry
    
    Gosub Obsl_przyciskow
    Gosub Sterowanie
    
    Incr Licz_miganie
    If Licz_miganie = 125 Then
      Licz_miganie = 0
      Wygaszenie = Not Wygaszenie
    End If
    
    
    Select Case Poz_wyswietlana
      Case 0:                                                     '1 cyfra
        Set P3.5
        '************
        Select Case Poz_menu
         Case 0:
           Sp1 = Godziny / 10
         Case 1:
           Sp1 = Godziny_buz / 10
         Case 2:
           Sp1 = 1
        End Select
    
        If Inwersja_wysw = 1 Then Sp1 = Not Sp1
        Gosub Kasuj
    
        If Ustawianie = 1 Then
          If Wygaszenie = 1 Then P1 = 255 Else P1 = Sp1
        Else
          P1 = Sp1
        End If
        '************
        Reset P3.0
      Case 1:                                                     '2 cyfra
        Set P3.0
        '************
        Select Case Poz_menu
         Case 0:
           Sp1 = Godziny Mod 10
         Case 1:
           Sp1 = Godziny_buz Mod 10
         Case 2:
           Sp1 = 1
        End Select
    
        If Inwersja_wysw = 1 Then Sp1 = Not Sp1
        Gosub Kasuj
    
        If Ustawianie = 1 Then
          If Wygaszenie = 1 Then P1 = 255 Else P1 = Sp1
        Else
          P1 = Sp1
        End If
        '************
        Reset P3.1
      Case 2:
        Set P3.1
        '************
        Select Case Poz_menu
         Case 0:
           Sp1 = Minuty / 10
         Case 1:
           Sp1 = Minuty_buz / 10
         Case 2:
           Sp1 = 6
        End Select
    
        If Inwersja_wysw = 1 Then Sp1 = Not Sp1
        Gosub Kasuj
    
        If Ustawianie = 2 Then
          If Wygaszenie = 1 Then P1 = 255 Else P1 = Sp1
        Else
          P1 = Sp1
        End If
        '************
        Reset P3.2
      Case 3:
        Set P3.2
        '************
        Select Case Poz_menu
         Case 0:
           Sp1 = Minuty Mod 10
         Case 1:
           Sp1 = Minuty_buz Mod 10
         Case 2:
           Sp1 = 6
        End Select
    
    
        If Inwersja_wysw = 1 Then Sp1 = Not Sp1
        Gosub Kasuj
    
        If Ustawianie = 2 Then
          If Wygaszenie = 1 Then P1 = 255 Else P1 = Sp1
        Else
          P1 = Sp1
        End If
        '************
        Reset P3.3
      Case 4:
        Set P3.3
        '************
        Select Case Poz_menu
         Case 0:
           Sp1 = Sekundy / 10
         Case 1:
           Sp1 = Sekundy_buz / 10
         Case 2:
           If Buzzer_onoff = 1 Then Sp1 = 2 Else Sp1 = 14
        End Select
    
        If Inwersja_wysw = 1 Then Sp1 = Not Sp1
        Gosub Kasuj
    
        If Ustawianie = 3 Then
          If Wygaszenie = 1 Then P1 = 255 Else P1 = Sp1
        Else
          P1 = Sp1
        End If
        '************
        Reset P3.4
      Case 5:
        Set P3.4
        '************
        Select Case Poz_menu
         Case 0:
           Sp1 = Sekundy Mod 10
         Case 1:
           Sp1 = Sekundy_buz Mod 10
         Case 2:
           If Buzzer_onoff = 1 Then Sp1 = 7 Else Sp1 = 14
        End Select
    
    
        If Inwersja_wysw = 1 Then Sp1 = Not Sp1
        Gosub Kasuj
    
        If Ustawianie = 3 Then
          If Wygaszenie = 1 Then P1 = 255 Else P1 = Sp1
        Else
          P1 = Sp1
        End If
        '************
        Reset P3.5
    End Select
    
    Return
    '*******************************************************************************
                                'Obsluga Przyciskow
    '*******************************************************************************
    Obsl_przyciskow:
    
    If Prz_plus = 0 Then
      Incr Przycisk
      If Przycisk = 30 Then Set P_plus Else Reset P_plus
    Else
      Przycisk = 0
      Reset P_plus
    End If
    
    If Prz_minus = 0 Then
      Incr Przycisk2
      If Przycisk2 = 30 Then Set P_minus Else Reset P_minus
    Else
      Przycisk2 = 0
      Reset P_minus
    End If
    
    If Prz_menu = 0 Then
      Incr Przycisk3
      If Przycisk3 = 30 Then Set P_menu Else Reset P_menu
    Else
      Przycisk3 = 0
      Reset P_menu
    End If
    
    '****************************************
    If P_menu = 1 Then
    '********
     If Ustawianie = 0 Then
      Incr Poz_menu
      If Poz_menu = 3 Then Poz_menu = 0
     Else
      Incr Ustawianie
      If Ustawianie = 4 Then Ustawianie = 0
     End If
    '********
    End If
    
    
    If P_plus = 1 And P_minus = 0 Then
    '********
     Select Case Ustawianie
      Case 0:
       Ustawianie = 1
      Case 1:
       Select Case Poz_menu
         Case 0:
          Incr Godziny
          If Godziny = 24 Then Godziny = 0
         Case 1:
          Incr Godziny_buz
          If Godziny_buz = 24 Then Godziny_buz = 0
         Case 2:
          Kolejnosc = Not Kolejnosc
       End Select
      Case 2:
       Select Case Poz_menu
         Case 0:
          Incr Minuty
          If Minuty = 60 Then Minuty = 0
         Case 1:
          Incr Minuty_buz
          If Minuty_buz = 60 Then Minuty_buz = 0
         Case 2:
          Inwersja_wysw = Not Inwersja_wysw
       End Select
      Case 3:
       Select Case Poz_menu
         Case 0:
          Sekundy = 0
         Case 1:
          Incr Sekundy_buz
          If Sekundy_buz = 60 Then Sekundy_buz = 0
         Case 2:
          Buzzer_onoff = Not Buzzer_onoff
       End Select
     End Select
    '********
    End If
    
    
    If P_plus = 0 And P_minus = 1 Then
    '********
     Select Case Ustawianie
      Case 0:
    
      Case 1:
       Select Case Poz_menu
         Case 0:
          Decr Godziny
          If Godziny = 255 Then Godziny = 23
         Case 1:
          Decr Godziny_buz
          If Godziny_buz = 255 Then Godziny_buz = 23
         Case 2:
          Kolejnosc = Not Kolejnosc
       End Select
      Case 2:
       Select Case Poz_menu
         Case 0:
          Decr Minuty
          If Minuty = 255 Then Minuty = 59
         Case 1:
          Decr Minuty_buz
          If Minuty_buz = 255 Then Minuty_buz = 59
         Case 2:
          Inwersja_wysw = Not Inwersja_wysw
       End Select
      Case 3:
       Select Case Poz_menu
         Case 0:
          Sekundy = 0
         Case 1:
          Decr Sekundy_buz
          If Sekundy_buz = 255 Then Sekundy_buz = 59
         Case 2:
          Buzzer_onoff = Not Buzzer_onoff
       End Select
     End Select
    '********
    End If
    
    
    '****************************************
    
    Return
    '*******************************************************************************
                                       'Sterowanie buzzera
    '*******************************************************************************
    Sterowanie:
    
    
    Return
    '*******************************************************************************
                            'Resetowanie
    '*******************************************************************************
    Kasuj:
     If Kolejnosc = 1 Then
      Help_bit = Sp1.0
      Sp1.0 = Sp1.3
      Sp1.3 = Help_bit
      Help_bit = Sp1.1
      Sp1.1 = Sp1.2
      Sp1.2 = Help_bit
    
      If Poz_wyswietlana = 0 Then
        Clr c
        Rotate Sp1 , Right , 2
      End If
    
     End If
    
     Sp1.7 = 1
     Sp1.6 = 1
     Sp1.5 = 1
     Sp1.4 = 1
    Return
  • #3
    lolcio
    Level 16  
    Chetnie bym napisał ale nie mam zielonego pojecia o bascomie...znam tylko troche
    c++...a jakbym mial wiecej punktow to bym wiecej zaoferowal;)
    moze ktos chociaz powie mi co trzeba zmienic...bo nie mam zielonego pojecia...
  • Helpful post
    #4
    ZbeeGin
    Level 39  
    Musisz przerobić tylko te linie i w zasadzie tylko te wytłuszczone elementy. Czerwone wylatują.

    Quote:
    $large
    ' ... kod deklaracji bez zmian

    '*******************************************************************************
    'stawienia Poczštkowe
    '*******************************************************************************

    Enable Interrupts
    Config Timer0 = Timer , Gate = Internal , Mode = 2
    Load Timer0 , 250
    Enable Timer0
    Start Timer0
    On Timer0 Przerwanie_timer
    '*******************************************************************************
    'Nazwy Wyprowadzeń
    '*******************************************************************************
    Buzzer Alias P3.7
    Test_napiecia Alias P1.4
    Prz_plus Alias P1.5
    Prz_minus Alias P1.7
    Prz_menu Alias P1.6

    '*******************************************************************************
    'Wartosci poczatkowe
    '*******************************************************************************
    ' ...
    P1 = 255
    ' ...
    'Program Glowny
    '*******************************************************************************
    Do
    If Test_napiecia = 1 Then
    P1 = 255
    Buzzer = 1
    Idle
    ' ...
    End
    '*******************************************************************************
    'Wykonywane co 2ms
    '*******************************************************************************
    ' ...
    Select Case Poz_wyswietlana
    Case 0: '1 cyfra
    Set P3.5
    '************
    ' ...
    If Ustawianie = 1 Then
    If Wygaszenie = 1 Then P1 = 255 Else P1 = Sp1
    Else
    P1 = Sp1
    End If
    '************
    Reset P3.0
    Case 1: '2 cyfra
    Set P3.0
    '************
    ' ...
    If Ustawianie = 1 Then
    If Wygaszenie = 1 Then P1 = 255 Else P1 = Sp1
    Else
    P1 = Sp1
    End If
    '************
    Reset P3.1
    Case 2:
    Set P3.1
    '************
    '...
    If Ustawianie = 2 Then
    If Wygaszenie = 1 Then P1 = 255 Else P1 = Sp1
    Else
    P1 = Sp1
    End If
    '************
    Reset P3.2
    Case 3:
    Set P3.2
    '************
    ' ...
    If Ustawianie = 2 Then
    If Wygaszenie = 1 Then P1 = 255 Else P1 = Sp1
    Else
    P1 = Sp1
    End If
    '************
    Reset P3.3
    Case 4:
    Set P3.3
    '************
    ' ...
    If Ustawianie = 3 Then
    If Wygaszenie = 1 Then P1 = 255 Else P1 = Sp1
    Else
    P1 = Sp1
    End If
    '************
    Reset P3.4
    Case 5:
    Set P3.4
    '************
    ' ...
    If Ustawianie = 3 Then
    If Wygaszenie = 1 Then P1 = 255 Else P1 = Sp1
    Else
    P1 = Sp1
    End If
    '************
    Reset P3.5

    Return
    ' ...

    Parę linijek trzeba dodać: podać nazwę mikrokontrolera, konfiguracja częstotliwości taktowania, konfiguracja portów we/wy.