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

potrzeba połaczyć dwa programy bascom

29 Gru 2007 15:07 1667 2
  • Poziom 33  
    Witam jest dość początkującym w dziedzinie programowania i potrzeba mi połączyć tak aby na jednym wyświetlaczu pojawił sie zegar i licznik impulsów
    z halotrona jako obrotomierz

    zegar:
    Code:

    $regfile = "m8def.dat"                                      'informuje kompilator o pliku
          'dyrektyw mikrokontrolera
    $crystal = 8000000                                          'informuje kompilator
          'o częstotliwości oscylatora
          'taktującego mikrokontroler
    Config Pinb.3 = Input                                       'linia PB1 jako wejściowa
    Config Pinb.4 = Input                                       'linia PB2 jako wejściowa
    Config Lcd = 16 * 2                                         'konfiguracja typu wyświetlacza
          'LCD
    Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portd.4 , E = Portd.3 , Rs = Portd.2       'konfiguracja linii
          'mikrokontrolera, do których
          'dołączono wyświetlacz
          'LCD
    Config Timer1 = Timer , Prescale = 256
          'konfiguracja Timer1 jako timer
          'z podziałem preskalera przez
          '256

    Declare Sub Wysw_czas                                       'procedura wyświetlająca czas na
          'LCD w formacie gg:mm:ss
    On Timer1 Odmierz_1s                                        'przerwanie od przepełnienia
          'Timer1 o etykiecie Odmierz_1s

    Dim Sekundy As Byte                                         'zmienna zliczająca sekundy
    Dim Minuty As Byte                                          'zmienna zliczająca minuty
    Dim Godziny As Byte                                         'zmienna zliczająca godziny
    Dim Nowa_w As Bit                                           'flaga zezwolenia aktualizacji
          'czasu na LCD
    Dim Wart_bcd As Byte                                        'zmienna pomocnicza, w której
          'jest zapisywana wartość BCD
          'czasu

    S1 Alias Pinb.3                                             'przypisanie nazwie Pinb.2
          'nazwy S1
    S2 Alias Pinb.4                                             'przypisanie nazwie Pinb.1
          'nazwy S2

    Enable Interrupts                                           'odblokowanie globalnego systemu
          'przerwań
    Enable Timer1                                               'odblokowanie przerwania od
          'przepełnienia Timer1
    Counter1 = 34286                                            'wartość początkowa wpisywana do
          'Timer1 (65536 - 31250 = 34286)

    Set Nowa_w                                                  'zezwolenie na wyświetlenie
          'aktualnego czasu
    Set Portb.3                                                 'dołączenie do linii PB1
          'rezystora podciągającego
    Set Portb.4                                                 'dołączenie do linii PB2
          'rezystora podciągającego
    Do

    Cursor Off                                                  'pętla główna programu
     Call Wysw_czas                                             'wywołanie procedury
          'wyświetlającej aktualny czas
     If S1 = 0 Then                                             'jeśli przyciśnięty S1, to
      Waitms 25                                                 'opóźnienie dla eliminacji drgań
          'styków
      If S1 = 0 Then                                            'sprawdzenie, czy przycisk S1
          'dalej naciśniety, jeśli tak, to
       Incr Minuty                                              'zwiększenie wartości minut
       Sekundy = 0                                              'wyzerowanie zmiennej Sekundy
       If Minuty = 60 Then                                      'jeśli wartość Minuty = 60, to
        Minuty = 0                                              'zerowanie wartości Minuty
       End If
       Set Nowa_w                                               'zezwolenie na wyświetlenie
          'czasu
       Call Wysw_czas                                           'wywołanie procedury
          'wyświetlenia aktualnego czasu
       Waitms 200                                               'opóźnienie 200 ms
      End If                                                    'koniec instrukcji warunkowej
     End If
     If S2 = 0 Then                                             'jeśli przyciśnięty S2, to
      Waitms 25                                                 'opóźnienie dla eliminacji drgań
          'styków
      If S2 = 0 Then                                            'sprawdzenie czy przycisk S2
          'dalej naciśniety, jeśli tak, to
       Incr Godziny                                             'zwiększenie wartości Godziny
       If Godziny = 24 Then                                     'jeśli wartość Godziny = 24, to
        Godziny = 0                                             'wyzerowanie wartości Godziny
       End If
       Set Nowa_w                                               'zezwolenie na wyświetlenie
          'czasu
       Call Wysw_czas                                           'wywołanie procedury
          'wyświetlenia aktualnego czasu
       Waitms 200                                               'opóźnienie 200 ms
      End If                                                    'koniec instrukcji warunkowej
     End If
    Loop
    End                                                         'koniec programu


    Sub Wysw_czas                                               'procedura wyświetlająca czas
     If Nowa_w = 1 Then                                         'jeśli flaga Nowa_w = 1, to
      Cls                                                       'czyszczenie LCD
      Wart_bcd = Makebcd(godziny)                               'zamiana wartości Godziny na
          'wartość w kodzie BCD
      Lcd Bcd(wart_bcd) ; ":"                                   'wyświetlenie wartości godzin
          'w kodzie BCD zamienionych na
          'tekst oraz znaku :
      Wart_bcd = Makebcd(minuty)                                'zamiana wartości Minuty na
          'wartość BCD
      Lcd Bcd(wart_bcd) ; ":"                                   'wyświetlenie wartości minut
          'w kodzie BCD zamienionych na
          'tekst oraz znaku :
      Wart_bcd = Makebcd(sekundy)                               'zamiana wartości Sekundy na
          'wartość w kodzie BCD
      Lcd Bcd(wart_bcd) ;                                       'wyświetlenie wartości sekund
          'w kodzie BCD zamienionych na
          'tekst
      Reset Nowa_w                                              'zerowanie flagi Nowa_w
     End If
    End Sub                                                     'koniec procedury

    Odmierz_1s:                                                 'podprogramu obsługi przerwania
          'przepełnienia od Timer1
     Counter1 = Counter1 + 34286                                'wpisanie wartości początkowej
          'licznika
     Incr Sekundy                                               'zwiększenie o 1 wartości
          'Sekundy
     Set Nowa_w                                                 'zezwolenie na wyświetlenie
          'czasu
     If Sekundy = 60 Then                                       'jeśli Sekundy = 60, to
      Sekundy = 0                                               'wyzerowanie wartości Sekundy
      Incr Minuty                                               'zwiększenie o 1 wartości Minuty
      If Minuty = 60 Then                                       'jeśli Minuty = 60, to
       Minuty = 0                                               'zerowanie wartości Minuty
       Incr Godziny                                             'zwiększenie o 1 wartości
          'Godziny
       If Godziny = 24 Then                                     'jeśli Godziny = 24, to
        Godziny = 0                                             'zerowanie wartości Godziny
       End If                                                   'koniec warunków
      End If
     End If
    Return



    i listing z obrotomierza:
    Code:
    ' Miernik prędko�ci obrotowej
    
    'licznikiem 0...65535 jest Timer1
    Dim Wynik As Long
    Config Timer1 = Counter , Edge = Rising                     'konfiguracja Timera do zliczania impulsów
    Cls : Lcd "Obrotomierz" : Wait 1                            'powitanie

    Do                                                          'program główny - pętla
       Timer1 = 0                                               'zeruj licznik
       Start Timer1                                             'zacznij liczyć
       Wait 1                                                   'zliczaj impulsy przez 1 sekundę
       Stop Timer1                                              'przestań liczyć

       Wynik = Timer1 * 60                                      'wynik zliczania w czasie 1s mnożymy przez 60 dla otrzymania wyniku w: obr/min

       Cls                                                      'czy�cimy LCD
       Lcd "+ Obrotomierz +"                                    'w pierwszej linii wy�wietlamy napis obrotomierz
       Lowerline                                                'przej�cie do drugiej linii

       Lcd "P: " ; Wynik ; " obr/min"                           'wy�wietlamy wynik i jednostkę
       Cursor Off                                               'wyłšczamy kursor na LCD
    Loop                                                        'koniec pętli głównej programu
    End                                                         'koniec całego programu



    Oddzielnie programy działają dobrze ale nie mam pomysłu na ich połączenie tak aby zegara wyświetlał sie w górnej linii a obrotomierz w dolnej . Podpowiedzcie jak to można uczynić.
  • Użytkownik usunął konto  
  • Poziom 33  
    w ten sposób to raczej nie przejdzie chodzi o to że timer1 działa jako przerwanie a gdy wykorzystuje do obliczania impulsów drugiego tajmera czyli timer0 to dzieją się cyrki
    wyśiwetla mi np co druga sekunde itd
    wszystko to na atmega8