'Meteoryt

Bascom

Generator spadającego meteorytu

Generator emituje dźwięk od najwyższego do niskiego. Szybkość opadania dźwięku można regulować przy pomocy instrukcji Waitms.




'Meteoryt.bas

 'Generator spadającego meteorytu.

 'Opis pod programem.

 'Opracował Henryk Wydmuch

 'Program zajmuje 5% pamięci.

 

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

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

 

 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 Pind.1 = Input                                      'Przycisk Start .

  Set Portd.1                                               '

 Config Pind.0 = Output                                     'Led.

  Set Portd.0                                               '

 

 Dim Zm As Byte                                             '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 Byte                                             '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.

 Stop Timer0

 

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

Do                                                          'Pętla do wykonania dzielenia i wyświetlenia wyniku.

  If Pind.1 = 0 Then                                        'Przycisk Start.

  Start Timer0                                              '

 

 For Wp = 1 To 60                                           'Pętla For.

  Toggle Portd.0                                            'Led pokazująca kroki pętli.

 Waitms 14                                                  'Szybkość kroków.

  If Wp = 60 Then                                           'Ostatni krok pętli.

  Stop Timer0                                               '

  End If                                                    'Koniec warunku Wp=60.                                                                                                        

 

 End If                                                     'Koniec zadania po Start.

 Loop                                                       'Powtórz pętlę.

End                                                         'Koniec pętli.

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

Licz:                                                       'Podprogram Timer0.

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

   If Zm = Wp Then                                          'Jeśli jest tyle przerwań, ile cyfra w Wp, to Toggle.

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

   Zm = 0                                                   'Zeruj zmienną.

   End If

  Return                                                    'Wróć do programu.

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

 

'Objaśnienie:

'Kroki w pętli For-Next, zapiasne do zmiennej Wp są zarazem liczbą przepełnień Timer0.

'Jedno zapełnienie Timer0, to 256 impulsów.

'Kwarc 1024000/256=4000, to 4000 szczytów sinusoidy.

'Dwa szczyty sinusoidy, to jeden okres.

'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 Wp = 1, to generator będzie oscylował z częstotliwością właśnie 20KHz.

'Przykład: Wp=18.  20KHz/18=1,11KHz.

'Koniec.