'INTX

BASCOM

Jak wykonać obliczenia po wystąpieniu przerwania.
Objaśnienia pod programem.

'INTX.bas

 'Przykład zastosowania INT0.

 'Opracował Henryk Wydmuch

 'Program zajmuje 20% pamięci.

 

$crystal = 160000000                                        'Deklarujemy częstotliwość zewnętrzną 16MHz.

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

Config Lcd = 16 * 2                                         'Podajemy jaki użyjemy wyświetlacz.

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

'Iformujemy do jakich Pinów będzie podłączony wyświetlacz.

 

Config Timer0 = Timer , Prescale = 256                      'Konfigurujemy Timer0 jako dzielnik przez 256 (dla Led migającej).

Config Int0 = Low Level                                     'Konfiguracja przerwania, od niskiego poziomu.

 

Config Pind.0 = Output                                      'Pind.6 jako wyjście (dioda migająca).

Config Pind.5 = Input                                       'Pind.5 - wejście.

Config Pinb.1 = Output                                      '

Config Pind.2 = Input                                       '

Config Pinb.6 = Output                                      '

Config Pind.4 = Output                                      '

     Set Portd.4                                            '

     Set Portb.1                                            '

     Set Portd.0                                            '

     Set Portd.2                                            '

 

 On Timer0 Sekunda                                          'Podprogram do wykonania o nazwie Sekunda (dioda migająca).

 

   Dim Licz As Word                                         'Licz, zmienna Timera0.

   Dim Jest_lcd As Bit                                      'Jednobitowa zmienna dla Lcd.

   Dim Wa As Long                                           'Zmienne matematyczne.

   Dim Dy As Long                                           '

   Dim Bh As Long                                           '

   Dim Ia As Long                                           '

   Dim Lo As Long                                           '

   Dim My As Long                                           '

 

 Enable Interrupts                                          'Zezwalaj na wszystkie przerwania.

 Enable Timer1                                              'Odblokuj przerwanie Timera1.

 Enable Timer0                                              'Odblokuj przerwanie Timera0.

 Enable Int0                                                'Zezwalaj na przerwanie.

 

 On Int0 Wykonaj                                            'Włącz podprogram przerwania.

 

 Licz = 0                                                   '

 Locate 2 , 2                                               'Druga linia Lcd, czwarta pozycja od lewej.

 Lcd "Przerwanie INT0 "                                     'Wpisz tekst w cudzysłowie.

 Jest_lcd = 0                                               'Zatrzymaj pracę Timera1.

 Timer1 = 0                                                 '

 Stop Timer0

  Cls                                                       'Czyść Lcd.

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

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

   If Jest_lcd = 1 Then                                     '

   Home                                                     '

   Lcd Wa ; "," ; Dy ; "," ;                                '

   Locate 2 , 1                                             '

   Lcd Bh ; "," ; Ia ; "," ; Lo ; "," ; My                  '

   End If                                                   '

   Loop                                                     'Powtórz pętlę.

End                                                         'Tu jest koniec pętli.

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

Sekunda:                                                    'Podprogram Tim0 Sekunda (Led miga).

   Incr Licz                                                'Poiększ zawartość Licz o jeden.

   If Licz = 100 Then                                       'Jeśli zawartość Licz wynosi 100, to...

   Licz = 0                                                 'Wyzeruj zmienną Licz.

   Toggle Portd.0                                           'Zmień stan Portd.0 na przeciwny.

    End If                                                  'Koniec uwarunkowania.

Return                                                      'Wróć do programu.

 

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

 Wykonaj:                                                   'Podprogram przerwania.

  Reset Portd.4                                             '

  Toggle Portb.1                                            '

  Start Timer0                                              '

   Wa = 23451.34                                            '

   Dy = Wa / 3.14                                           '

   Bh = Wa - Dy                                             '

   Ia = 188.3 * Bh                                          '

   Lo = Bh * Bh                                             '

   My = Lo - 10                                             '

  Jest_lcd = 1                                              '

 Return                                                     '

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

'Objaśnienie:

'Program pokazuje, jak wykonać obliczenia matematyczne po przyjściu impulsu z zewnątrz.

'Przyciskiem P rozładujemy kondensator 470pF. Impuls rozładowania jest impulsem Int0.

'Wejście Int0, to Portd.2.

'Po przyjściu impulsu, zmienna bitowa Jest_Lcd zmieni stan na 1 w podprogramie przerwania Wykonaj.

'Wcześniej wykonane zostaną wszystkie instrukcje w podprogramie.

'Pętla Do sprawdza, czy zmienił się stan zmiennej bitowej.

'Jeśli się zmienił wyświetli wszystkie wyniki liczenia w podprogramie Wykonaj.

'Impuls przerwania zostanie pokazany przez Led D3, zmieni się też stan Portb.1.

'Podprogram Sekunda miga diodą Led D2.

'Koniec