BASCOM

Przerwanie Timer0



'Przerwanie2.bas

 'Program poglądowy, zliczanie impulsów z zewnątrz przez Timer0 i przerwanie po

 'odliczeniu określonej ilości impulsów.

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

 'Opis pod programem.

 'Opracował Henryk Wydmuch

 'Przerwanie2.png.

 'Program zajmuje 9% 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 = Counter , Edge = Rising                    'Timer0 jako licznik, od zbocza narastającego.

 

 Config Pind.1 = Output                                     'Port wykonawczy.

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

 Config Pind.4 = Input                                      '

   Set Portd.4                                              '

 

 On Timer0 Sekunda                                          'Podprogram.                                    '

 

 Enable Interrupts                                          'Zezwalaj na wszystkie przerwania.

 Enable Timer1                                              'Odblokowujemy przerwanie.

 

 Cls                                                        'Wyczyść Lcd.

 

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

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

   Home                                                     'Wyświetlaj wynik w jednym miejscu.

  Lcd Counter0                                              '

 

  If Counter0 = 12 Then                                     '

 Reset Portd.1                                              '

 Else                                                       '

  If Counter0 = 16 Then                                     '

  Set Portd.1                                               '

 

  End If                                                    '

  End If

 Loop                                                       'Powtórz pętlę.

End                                                         'Koniec pętli.

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

Sekunda:                                                    'Podprogram.

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

  Return                                                    'Wróć do programu.

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

'Objaśnienie:

'Zajmujemy się timer0.

'Wejściem Timer0 jest Portd.4.

'Trzeba z konfigurować Portd.4 jako wejście..

'Do Portd.4 będziemy podawać impulsy..

 

'Jak to działa:

'Timer0 został z konfigurowany jako licznik (counter).

'W podprogramie Sekunda ma polecenie powiększaj o 1.

'W pętli Do, Lcd pokazuje zawartość Countera.

'Jeśli ilość impulsów na wejściu przekroczy 12, Portd.1 przyjmie poziom niski.

'Jesli liczba dojdzie do 16, Portd.1 przyjmie poziom wysoki.

 

'Do czego może służyć:

'Może załączać Portd.1, ale Port ten może być również wyjściem przebiegu, którego impulsy

'będą miały określony przez nas charakter. Czasy pomiędzy wierzchołkami poziomów wysokich mogą być takie jakie chcemy.

 

'Koniec.