Princip výpočtu
Pokud naplnění vychází 15,2, musíme opakovat 16x (zaokrouhlíme nahoru).
15 x 65 536 = 983040 mikrosekund
naplníme časovač 16 x 65536 =1048576 mikrosekund
a rozdíl mezi sekundou a výsledkem uložíme do registrů časovače TL0 a TH0. Potom program jednou dojede naplnění a 15x se naplní plně oba registry.
Výpočet: 1048576 – 1000000 = 48576 – převedeme do hexadecimální soustavy na BDC0 h - tedy v TL0 = C0 h a TH0 = BD h.
Pokud provedeme animaci, skutečný čas tohoto podprogramu je 1,000012 s. Program trvá 12 μs. Protože chceme čas úplně přesně, zvýšíme dolní registr o 12 – tedy na CC h. Nyní nám hodiny při animaci ukážou přesně 1 s.
Podprogram nyní dostává tuto podobu:
S1: MOV TMOD,#00000001B ;nastavení módu 16-bitového
MOV TL0,#0CCH ;přednastavení dolního registru
MOV TH0,#0BDH ;přednastavení horního registru
SETB TR0 ;spuštění časovače 0
MOV R1,#16 ;počet, kolikrát se registr naplní (16x)
HOP: CLR TF0 ;vynulování bitu naplnění
SEM: JNB TF0,SEM ;testuje nulovost registru časovače
DJNZ R1,HOP ;dokud není registr R1 rovný nule
CLR TR0 ;zastaví časovač 0
RET ;návrat z podprogramu
Podprogramy různých časových smyček se budou lišit jen v nastavení módu registru a ve výpočtu přednastavení. Máme-li 8-bitový registr (mód 2), přednaplňujeme pouze registr TL0, protože TH0 vůbec v tomto módu není využit. Pro výpočty a převody soustav používáme vědeckou kalkulačku v PC.