BASCOM

Liczenie czasu przez Timer0


Ten program pokazuje generator 20KHz z przełączanymi częstotliwościami wyjściowymi przy pomocy czternasto pozycyjnego przełącznika obrotowego. Poszczególne Porty łączone są przełącznikiem do masy. Do każdego Portu przyporządkowana jest liczba podziału. Jeśli jest to na przykład Portd.1, to Wp zawiera liczbę 13. Zatem, 20KHz/13=1,53KHz. Przy tej pozycji przełącznika generator oscyluje z częstotliwością 1,53KHz.

'Przerwanie15.bas

 'Program poglądowy, liczenie czasu przez Timer0.

 'Generator o ustawianej częstotliwości przy pomocy przełącznika obrotowego.

 'Przełącznikiem przełączamy Porty.

 'Ustawioną częstotliwość możemy zobaczyć na Lcd.

 'Opis pod programem.

 'Opracował Henryk Wydmuch

 'Program zajmuje 26% pamięci.

 

 $regfile = "m8def.dat"                                     'Info dla kompilatora.

$crystal = 10240000                                         'Informujemy kompilator o kwarcu 10.24MHz.

 

 Config Lcd = 16 * 2                                        'Konfiguracja Lcd.

Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5

 

 Config Timer0 = Timer , Prescale = 1                       'Timer0 jako licznik czasu.

 

 

 Config Pind.6 = Output                                     'Port wyjściowy częstotliwości.

  Set Portd.6                                               'Ustaw poziom wysoki na wyjściu Portd.6.

 

 Config Pinb.5 = Input

 Config Pinb.4 = Input

 Config Pinb.3 = Input

 Config Pinb.2 = Input

 Config Pinb.1 = Input

 Config Pinb.0 = Input

 Config Pind.7 = Input

 Config Pind.5 = Input

 Config Pind.4 = Input

 Config Pind.3 = Input

 Config Pind.2 = Input

 Config Pind.1 = Input

 Config Pind.0 = Input

    Set Portb.5

    Set Portb.4

    Set Portb.3

    Set Portb.2

    Set Portb.1

    Set Portb.0

    Set Portd.7

    Set Portd.5

    Set Portd.4

    Set Portd.3

    Set Portd.2

    Set Portd.1

    Set Portd.0

 

 Dim Zm As Word                                             'Zm, zmienna przerwań Timer0.

 Dim Odp As Single                                          'Odp, zmienna, która będzie zawierać odpowiedź jaka jest częstotliwość..

 Dim F As Word                                              'F, zmienna do umieszczenia w pdprogramie Licz.

 Dim Wp As Word                                             'Wp, zmienna do której będzie wpisywana liczba do podziału.

 

 On Timer0 Licz                                             'Podprogram.

 

 Enable Interrupts                                          'Zezwalaj na wszystkie przerwania.

 Enable Timer0                                              'Odblokuj przerwania Timer0.

 

 Cls

 '------------------------------------------------------------------------------------------------------

Do                                                          'Pętla.

  Wp = 1

  If Pinb.5 = 0 Then                                        'Jeśli Portb.5 = 0, to...

  Wp = 2                                                    'Zmienna Wp = 2.

Else                                                        'W przeciwnym razie...

   If Pinb.4 = 0 Then                                       '

  Wp = 3                                                    '

Else                                                        '

  If Pinb.3 = 0 Then                                        '

  Wp = 4                                                    '

Else                                                        '

   If Pinb.2 = 0 Then                                       '

  Wp = 5                                                    '

Else                                                        '

  If Pinb.1 = 0 Then                                        '

  Wp = 6                                                    '

Else                                                        '

  If Pinb.0 = 0 Then                                        '

  Wp = 7                                                    '

Else                                                        '

   If Pind.7 = 0 Then                                       '

  Wp = 8                                                    '

Else                                                        '

   If Pind.5 = 0 Then                                       '

  Wp = 9                                                    '

Else                                                        '

   If Pind.4 = 0 Then                                       '

  Wp = 10                                                   '

Else                                                        '

   If Pind.3 = 0 Then                                       '

  Wp = 11                                                   '

Else                                                        '

   If Pind.2 = 0 Then                                       '

  Wp = 12                                                   '

Else                                                        '

  If Pind.1 = 0 Then                                        '

  Wp = 13                                                   '

Else                                                        '

   If Pind.0 = 0 Then                                       '

  Wp = 14                                                   '

    End If                                                  '

     End If                                                 '

      End If                                                '

       End If                                               '

        End If                                              '

         End If                                             '

          End If                                            '

    End If                                                  '

     End If                                                 '

      End If                                                '

       End If                                               '

        End If                                              '

         End If                                             '

 

 

 Home                                                       'Pokazuj w jednym miejscu.

 Odp = 20 / F                                               '20KHz podziel przez liczbę, którą wprowadziliśmy.

 Locate 1 , 1                                               'Pierwsza linia Lcd.

 Lcd Odp ;                                                  'Pokaż odpowiedź.

 Locate 1 , 8                                               '

 Lcd " KHz     "                                            'Napisz KHz.

 Odp = 0                                                    'Zeruj zmienną.

 Locate 2 , 3                                               'Druga linia Lcd.

 Lcd "Generator"                                            'Napisz Generator.

 Waitms 800                                                 'Nie migaj na Lcd.

 Loop                                                       'Powtórz pętlę.

End                                                         'Koniec pętli.

'--------------------------------------------------------------------------------------------------------

Licz:                                                       'Podprogram Timer0.

   F = Wp                                                   'Zmienna F zawiera liczbę, którą wprowadziliśmy.

   Incr Zm                                                  'Po każdym przerwaniu powiększaj zmienną.

   If Zm = F Then                                           'Jeśli jest tyle przerwań, ile wpisaliśmy do Wp, to Toggle.

   Toggle Portd.6                                           'Zmień stan Portd.6.

   Zm = 0                                                      'Zeruj zmienną.

  End If                                                    'Koniec warunku.

Return                                                      'Wróć do programu.

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

 

'Objaśnienie:

'Budujemy generator z ustawianą częstotliwością.

'Zajmujemy się Timer0.

'Jedno przerwanie trwa 25uS (mikrosekund), jest to połowa okresu.

'Jeden okres trwa 50uS.

'Z iterfejsu Czasy.exe możemy zobaczyć, że 50uS to frekwencja 20KHz.

'Jeśli żaden Port nie dołączymy do masy, to generator będzie oscylował z częstotliwością właśnie 20KHz.

'Inną częstotliwość możemy otrzymać dołączając poszczególne Porty do masy.

'Przykładowo, do każdego Portu możemy przyporządkować dowolną liczbę..

'Tutaj, Portd.1, to liczba 13, a oscylacja 1,53KHz. (20KHz/13=1,538KHz).

'Częstotliwość naszego generatora oglądamy na wyświetlaczu Lcd.

 

'Koniec.