BASCOM


Program procesora sterującego dla miernika częstotliwości 95MHz


'MierCzestSterujacy.bas, (dla: MierCzest06.bas).

'Procesor, miernik częstotliwości, sterujący U2 - 74151 oraz U6 - 74151..

'Przesyła informację do pierwszego procesora, który podział został wybrany.

'Bez podziału wstępnego mierzy do 7MHz.

'Pobiera sygnał z ostatniego dzielnika wstępnego o podziale przez 64.

'Atmega8 z kwarcem 16MHz.

'Patrz schemat: 271107.

'Fusebit ustawiony na kwarc zewnętrzny 1111.

'Opracował Henryk Wydmuch.

'Pamięć zajęta w 18%.

 

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

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

 

 Config Pinc.2 = Output                                     'Steruje S2 74AC151-U6.

 Config Pinc.3 = Output                                     'Steruje S1 74AC151-U6.

 Config Pinc.4 = Output                                     'Steruje S0 74AC151-U6.

 Config Pind.5 = Input                                      'Konfiguruj Portd.5 jako wejście.

 

 Set Portc.2                                                'Dołącz rezystor podciągający.

 Set Portc.3                                                'Dołącz rezystor podciągający.

 Set Portc.4                                                'Dołącz rezystor podciągający.

 Set Portd.5                                                'Dołącz rezystor podciągający.

 

 S2 Alias Portc.2                                           'Steruje S2 74AC151-U6.

 S1 Alias Portc.3                                           'Steruje S1 74AC151-U6.

 S0 Alias Portc.4                                           'Steruje S0 74AC151-U6.

 

 Config Pinb.2 = Output                                     'Led = S0.

 Config Pinb.3 = Output                                     'Led = S1.

 Config Pinb.4 = Output                                     'Led = S2.

 

 Set Portb.2                                                'Dołącz rezystor podciągający.

 Set Portb.3                                                'Dołącz rezystor podciągający.

 Set Portb.4                                                'Dołącz rezystor podciągający.

 

 Config Timer0 = Timer , Prescale = 1                       'Timer0 jako Timer z podziałem przez 1.

 Config Timer1 = Counter , Edge = Falling                   'Timer1 jako licznik działający od zbocza opadającego.

 

 Dim Liczba_przerwan_tim0 As Word                           'Rezerwujemy dwa bajty w pamięci dla zmiennej Liczba_przerwan_tim0. Tu załadujemy liczbę przerwań Timera0.

 Dim Lczba_przep_tim1 As Byte                               'Rezewujemy jeden bajt dla zmiennej Liczba_przep_tim1. Tu załadujemy liczbę przerwań Timera1.

 Dim Flaga_aktual_lcd As Bit                                'Rezerwujemy jeden bit na aktualizację wyświetlacza Lcd.

 Dim Wynik_pomiaru As Single                                'Rezerwujemy cztery bajty dla zmiennej Wynik_pomiaru. Tu znajdzie się wynik pomiaru.

 

 On Timer0 Odmierz_1s                                       'Podprogramdla Timera0 o nazwie Odmierz_1s.

 On Timer1 Zlicz_przep_tim1                                 'Podprogram dla Timera1.

 

 Enable Interrupts                                          'Zezwalaj na wszystkie przerwania.

 Enable Timer0                                              'Odblokowujemy przerwanie Timera0.

 Enable Timer1                                              'Odblokowujemy przerwanie Timera1.

 

 Stop Timer0                                                'Zatrzymujemy Timer0.

 Stop Timer1                                                'Zatrzymujemy Timer1.

 

 Timer1 = 0                                                 'Zerujemy Timer1.

 Wynik_pomiaru = 0                                          'Zerujemy zmienną Wynik_pomiaru.

 Liczba_przerwan_tim0 = 0                                   'Zerujemy zmienną zawierającą liczbę przerwań Timera0.

 Lczba_przep_tim1 = 0                                       'Zerujemy zmienną zawierającą liczbę przerwań Timera1.

 Start Timer1                                               '

 Start Timer0                                               '

 

 Do                                                         'Start pętli głównej.

 

  If Wynik_pomiaru <= 109375 Then                           'Jeśli wynik pomiaru będzie do 7MHz.

  S0 = 1                                                    '

  Set Portb.2                                               '

  S1 = 1                                                    '

  Set Portb.3                                               '

  S2 = 0                                                    '

  Reset Portb.4                                             '

  Start Timer1                                              '

  Start Timer0                                              '

 

Else                                                        '

 

  If Wynik_pomiaru <= 218750 Then                           'Jeśli wynik pomiaru będzie do 14MHz.

  S0 = 0                                                    '218750 bo: 14MHz=14000000Hz/64=218750.

  Reset Portb.2                                             '

  S1 = 1                                                    '

  Set Portb.3                                               '

  S2 = 0                                                    '

  Reset Portb.4                                             '

  Start Timer0                                              '

  Start Timer1                                              '

                                                               '

 Else                                                       '

 

  If Wynik_pomiaru <= 437500 Then                           'Jeśli wynik pomiaru będzie do 28MHz.

  S0 = 1                                                    '

  Set Portb.2                                               '

  S1 = 0                                                    '

  Reset Portb.3                                             '

  S2 = 0                                                    '

  Reset Portb.4                                             '

  Start Timer1                                              '

  Start Timer0                                              '

 

 Else                                                       '

 

  If Wynik_pomiaru <= 875000 Then                           'Jeśli wynik pomiaru będzie do 56MHz.

  S0 = 0                                                    '

  Reset Portb.2                                             '

  S1 = 0                                                    '

  Reset Portb.3                                             '

  S2 = 0                                                    '

  Reset Portb.4                                             '

  Start Timer1                                              '

  Start Timer0                                              '

 

Else                                                        '

 

  If Wynik_pomiaru <= 1750000 Then                          'Jeśli wynik pomiaru będzie 112MHz.

  S0 = 1                                                    '

  Set Portb.2                                               '

  S1 = 0                                                    '

  Reset Portb.3                                             '

  S2 = 1                                                    '

  Set Portb.4                                               '

  Start Timer1                                              '

  Start Timer0                                              '

 

Else                                                        '

 

  If Wynik_pomiaru <= 3500000 Then                          'Jeśli wynik pomiaru będzie do 224MHz.

  S0 = 0                                                    '

  Reset Portb.2                                             '

  S1 = 1                                                    '

  Set Portb.3                                               '

  S2 = 1                                                    '

  Set Portb.4                                               '

  Start Timer1                                              '

  Start Timer0                                              '

 

  Else                                                      '

 

  If Wynik_pomiaru <= 7000000 Then                          'Jeśli wynik pomiaru będzie do 448MHz.

  S0 = 1                                                    '

  Set Portb.2                                               '

  S1 = 0                                                    '

  Reset Portb.3                                             '

  S2 = 0                                                    '

  Reset Portb.4                                             '

  Start Timer1                                              '

  Start Timer0                                              '

 

End If                                                      '

End If                                                      '

End If

End If                                                      '

End If                                                      '

End If                                                      '

End If                                                      '

Loop                                                        'Powtarzaj pętlę.

 End                                                        'Koniec pętli.

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

 Odmierz_1s:                                                'Podprogram dla Timera0 (wyznaczanie 1sek).

  Timer0 = 6                                                'Do Timera0 dodaj sześć i zapamiętaj jako Timer0 (zliczy 250).

  Incr Liczba_przerwan_tim0                                 'Liczbę przerwań Timera0 powiększ o jeden.

  If Liczba_przerwan_tim0 = 51407 Then                      'Jeśli liczba przerwań Timera0 jest równa 51407, to...

  'Liczbą 51407 ustalamy dokładny pomiar.

  Liczba_przerwan_tim0 = 0                                  'Wyzeruj zmienną.

  Wynik_pomiaru = 65536 * Lczba_przep_tim1                  'Zmienną Liczba_przep_tim1 pomnóż przez 65536, a wynik wstaw do zmiennej Wynik_pomiaru.

  Wynik_pomiaru = Wynik_pomiaru + Timer1                    'Wynik powyższego działania dodaj do aktualnej zawartości Timera1 i ten wynik wpisz do zmiennej Wynik_pomiaru.

  Flaga_aktual_lcd = 1                                      'Załącz flagę aktualizacji Lcd.

  Lczba_przep_tim1 = 0                                      'Zeruj flagę przepełnień Timera1.

  Timer1 = 0                                                'Zeruj Timer1.

   End If                                                   'Koniec uwarunkowania.

 Return                                                     'Wróć do programu.

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

 Zlicz_przep_tim1:

  Enable Interrupts                                         'Podprogram Timera1 (przekroczenie zakresu).

  Incr Lczba_przep_tim1                                     'Zawartość zmiennej Liczba_przep_tim1 powiększ o jeden.

 Return                                                     'Wróć do programu.

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

'Koniec