Przerwań timerów dawno już nie używałem, ktoś zechciałby przypomnieć, w jaki sposób wyliczono w poniższym programie wartość Timer1, równą 64566?
Fragment programu do sterowania fazowego (włączanie triaka na pewien okres czasu), autorstwa Kamila Kozłowskiego:
$crystal = 10000000
(...)
Inttim1: 'co ok 97us
Portd.0 = Onofflmgl.0 'zapalanie/gaszenie lampy głównej
Timer1 = 64566 'timer1 liczy 970 cylki zegara, czyli przerwanie co ok 97us
If Licznik >= 50 Then
$asm
sbic pind, 6 'sprawdzaj stan końcówki PIND6, jeśli jest równa 1 to
$end Asm
Gosub Zero 'skocz do podprogramu Zero
End If
Incr Licznik
If Onoffall = 255 Then 'jeśłi zezwolenie globalne na włączanie lamp = 1 to
If Licznik > Lmram(1) Then Reset Portd.5 '}
If Licznik > Lmram(2) Then Reset Portd.4 ' } zapalaj odpowiednio lampy do wartości tablicy Lmram
If Licznik > Lmram(3) Then Reset Portd.3 '}
If Licznik > Lmram(4) Then Reset Portd.1 '}
End If
Return
Zero:
Licznik = 1 'przy kazdym przechodzeniu napiecia sieci przez zero zeuj licznik i
Portd = Portd Or &B1111110 'wygas wszystkie 4 lampy
Incr Timefader
Return