Page 268 - 4503
P. 268
DELAY_К100MS
movwf К; збереження К в реґістрі h’35’
; Задача1.ФОРМУВАННЯ 100-МС ЗАТРИМКИ--------
DK_LOOP
call DELAY_100MS
; Задача2.Декрементування К ----------------
decfsz К,f
; Задача3. Допоки К>0 ----------------------
goto DK_LOOP ;повторення декрементування К
;поки К>0
return
Увага! Можливі проблеми при використанні програми
8.5. Припустимо, що для збереження параметра К був
вибраний регістр h’34’, а не К equ h’35. У той самий час, як
ми знаємо, адреса h’34’ використовується підпрограмою
DELAY_100MS для збереження лічильника циклу. Це
означає, що після повернення із підпрограми DELAY_100MS
змінна К завжди б дорівнювала 0, а наступне декрементування
завжди б видавало ненульовий результат. У результаті
затримка виявилася б нескінченою. І все це можна було б
уникнути, простою заміною адреси h’34’ на h’35’. Однак це
свідчить тільки про обов’язкову злагодженість усіх членів
команди, що розробляють основну програму і розробляють
чи долучають до неї підпрограми.
8.8 Підпрограма (функція з вхідними параметрами і
вихідним значенням) формування показників 7–
сегментного індикатора.
Підпрограма, код котрої приведений у програмі 8.5, все
ще має тип void, тобто не повертає в основну програму
268