Můžeš si vytvořit několik vlastních časovačů a pomocí nich řídit program.
Tady je příklad takových časovačů.
(Ty $stacky nastavuj větší, můžou zabrat klidně čtvrtinu RAM.)
[code]’ Timer1 v módu 4 (CTC) nepočítá do 65535, ale jenom do hodnoty
’ zapsané v registru OCR1A (OCR1AH:OCR1AL). Pak se vynuluje (a počítá ovšem dál).
’ Tak můžeme cyklus čítače libovolně zkrátit.
’ V okamžiku kdy čítač dosáhne hodnoty registru OCR1A, nastaví se
’ příznak přerušení “Compare1a”. Toto přerušení povolíme a použijeme
’ pro vytvoření vlastních časovačů.
’ Pro snadné počítání nastavíme interval mezi přerušeními na 1 vteřinu.
'$sim
$regfile = “m64def.dat”
$crystal = 1000000
$hwstack = 128
$swstack = 64
$framesize = 64
$baud = 9600
Dim 10min_timer As Word, 8h_timer As Word
Dim 16h_timer As Word,
Dim 10_min_flag As Byte , 8h_flag As Byte
Dim 16h_flag As Byte
'timer1 in CTC mode 4, top=OCR1A
Config Timer1 = Timer , Prescale = 64 , Clear Timer = 1
Enable Compare1a 'povol přerušení Compare1a
On Compare1a Timer1_isr 'při přerušení jdi na Timer1_isr
'OCR1A = ($crystal / (požadovaný kmitočet * předdělič)) - 1
Ocr1a = 15624 '1 Hz (= přerušení každou vteřinu)
Enable Interrupts 'povol všechna přerušení
'------------------------------------------------------------
Do
If 10_min_flag = 1 Then
'proveď co se má udělat každých 10 minut
10_min_flag = 0 'a vynuluj flag
End If
If 8h_flag = 1 Then
'proveď co se má udělat každých 8 hodin
8h_flag = 0 'a vynuluj flag
End If
'atd...
Loop
End
'------------------------------------------------------------
Timer1_isr:
Toggle Portb.4
Incr 10min_timer
Incr 8h_timer
Incr 16h_timer
If 10min_timer >= 600 Then '600 sec
10min_timer = 0
10_min_flag = 1
End If
If 8h_timer >= 28800 Then
8h_timer = 0
8h_flag = 1
End If
If 16h_timer >= 57600 Then
16h_timer = 0
16h_flag = 1
End If
Return
[/code]
Dim Vstup1 As Word
Dim Vstup2 As Word
Dim Vstup3 As Word
Dim Vstup4 As Word
Dim Vstup5 As Word
Dim Vstup6 As Word
Dim Vstup7 As Word
Dim Vstup8 As Word
Takové řady proměnných stejného typu přímo volají po použití pole.
Tím se nejen zjednoduší deklarace, ale umožní se také použití ve smyčkách (např. FOR).
Dim Vstup(8) as word
Pak místo “x = Vstup1” bude “x = Vstup(1)” atd.