Page 266 - 4503
P. 266
DELAY_1MS
movlw N; ініціалізація внутрішнього
; циклу
D_LOOP
addlw -1 ; декрементується лічильник
btfss STATUS,Z ; перевірка чи вміст W
; досяг 0
goto D_LOOP ;якщо ні то
; повторюється цикл
decfsz COUNT, f;декрементується
; лічильник 100-МС циклу
goto DELAY_1MS ;повторення до
; досягнення НИМ 0
; ДЕКРЕМЕНТУВАННЯ К-------------------------
decfsz К,f
; Допоки К>0 -------------------------------
goto DELAY_100MS; повторення
; декрементування К
;(тобто 100 мс затримку) поки К>0
FINI
return
Дана програма просто копіює значення параметра із W у
реґістр h’35’, перш ніж приступити до виконання коду, що
ідентичний програмі 8.3 (100–мілісекундна затримка). Після
формування вказаної затримки, регістр котрий містить
значення К, декрементується, цей блок виконується знову, і
так доти, поки К не прирівняється до нуля. Отож код, що
формує 100–мілісекундну затримку, виконуватиметься К
разів.
Оскільки перевірка величини К на 0 відбувається після
100–мілісекундної затримки, то значення К = 0
сприйматиметься як 256, а відповідно діапазон затримок, які
266