BASCOM

Liczenie czasu przez Timer0


Timer0 zliczający sekundy i minuty. Możliwość załączenia Portu po upływie czasu. Włącznikiem startujemy Timer.

'Przerwanie9.bas

 'Program poglądowy, liczenie czasu przez Timer0.

 'Można załączyć i wyłączyć Port, ale nie tylko oczywiście.

 'Opis pod programem.

 'Opracował Henryk Wydmuch

 'Program zajmuje 10% pamięci.

 

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

$crystal = 16000000                                         'Informujemy kompilator o kwarcu 16MHz.

 

 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                       'Timer1 jako licznik.

 

 Config Pind.1 = Output                                     'Port wykonawczy.

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

 Config Pinb.0 = Input                                      'Włącznik startu.

 

 Dim Przerw0 As Word                                          'Deklaracja zmiennej.

 Dim Zm As Byte                                             'Deklaracja zmiennej.

 On Timer0 Licz                                             'Podprogram.

 

 Enable Interrupts                                          'Zezwalaj na wszystkie przerwania.

 Enable Timer0                                              '

 Stop Timer0                                                '

 Timer0 = 0                                                 '

 Cls                                                        'Wyczyść Lcd.

 

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

Do                                                          'Początek pętli głównej programu.

   Home                                                     'Wyświetlaj wynik w jednym miejscu.

  Lcd Zm                                                    'Zmienna do sekund.

  If Pinb.0 = 1 Then                                        'Jeśli w Portb.0 jest 1...

   Start Timer0                                             '

  End If                                                    '

  If Zm = 60 Then                                           'Jeśli w Zm jest 60 sek...

  Reset Portd.1                                             'Włącz Port.

    End If

 Loop                                                       'Powtórz pętlę.

End                                                         'Koniec pętli.

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

Licz:                                                       'Podprogram.

  Incr Przerw0                                              'Po każdym impulsie powiększaj zawartość zmiennej.

  If Przerw0 = 62500 Then                                   '

  Incr Zm                                                   '

  Przerw0 = 0                                               '

  End If                                                    '

Return                                                      'Wróć do programu.

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

 

'Objaśnienie:

'Zajmujemy się timer0.

'Zmienna Przerw0 zawiera liczbę, która wynika z następującego działania:

'kwarc 16MHz, to 16000000Hz. Przepełnienie Timer0, to 256 impulsów.

'16000000/256=62500, są to przerwania Timer0.

'Po 62500 przerwaniach upływa 1sek.

'Zmienna Zm zlicza 60 sek i mamy 1min.

'If Zm = 60 Then    Reset Portd.1 , czyli po minucie załącz Portd.1.

'Ile czasu trwa jedno przerwanie: 1sek/62500=0.000016sek.

'Jedno przerwanie trwa 16uS (mikrosekund).

'Koniec.