- $regfile = "m328pdef.dat"
- $crystal = 8000000
- $hwstack = 64
- $swstack = 64
- $framesize = 128
- $baud = 115200
- Config Submode = New
- '=====Konfiguracja sprzętowa======
- Config Portb.5 = Output 'Dioda LED
- Config Timer0 = Timer , Prescale = 64 , Clear_timer = 1
- '=====Deklaracja zmiennych======
- Dim Sys_tic , Tim_led As Byte
- Dim Count As Word
- Ocr0a = 124
- Start Timer0 'Przerwanie co 1 mS przez Timer0
- On Compare0a Tim0_oc0a
- Enable Oc0a
- Enable Interrupts
- '=====Aliasy======
- Led_out Alias Portb.5
- '=====Funkcje i Procedury=====
- Function Tic_interval(byval Tic As Byte) As Byte 'Zwraca ilość ms jakie upłynęły od zapamiętanego stanu Sys_tic w zmiennej Tic do chwili obecnej.
- Tic_interval = Sys_tic - Tic
- End Function
- '=====Pętla główna=====
- Do
- If Tic_interval(tim_led) >= 200 Then
- Tim_led = Sys_tic
- Incr Count
- Print Count ; " " ; Sys_tic ; " " ; Tim_led
- Toggle Led_out
- End If
- Loop
- 'Zwiększa zmienną Sys_Tic co 1 ms.
- Tim0_oc0a:
- Incr Sys_tic
- Return
Kiedy zmienię na WORD to:
27 5400 5400
28 5600 5600
29 5632 5632
30 5832 5832
...
204 40632 40632
205 40832 40832
206 40960 40960
207 41160 41160
Wkleiłem tylko linie w których program zachowuje się dziwnie.
Kiedy zaś typ zmienię na DWORD, to już w ogóle cuda:
1 0 0
2 2 1
3 3 3
4 6 6
5 12 12
6 24 24
7 48 48
8 96 96
9 192 192
10 384 384
11 768 768
12 1536 1536
13 3072 3072
14 6144 6144
15 12288 12288
Nie jest to przypadkowe. Przeskoki po każdym resecie pojawiają się w tym samym miejscu.
Program nie robi w tym czasie nic innego, aby podejrzewać, że gubi interwał, bo jest zajęty czymś w danej chwili.
I czego ja tu nie rozumiem?
