Page 261 - 4503
P. 261
8.6 Підпрограма (процедура) формування затримки
тривалістю 100 мілісекунд.
Для забезпечення значно більшого проміжку затримки
варто застосувати додатковий цикл, тіло якого міститиме
базовий цикл, що реалізує затримку 1 мс. Наприклад, якщо
базовий цикл повторити 100 разів, то зреалізується затримка
100 мс.
На рисунку 8.7 зображено блок–схему підпрограми
DELAY_100MS, яка реалізує 100–мс затримку. На вході в
підпрограму регістр названий як COUNT (з англ. рахунок)
ініціалізується величиною d’100’. Далі виконується
внутрішній цикл 1–мс затримки. Коли вміст робочого регістру
стає нульовим, внутрішній цикл завершується, а регістр
COUNT декрементується за допомогою команди decfsz
COUNT, f. Вихід із зовнішнього циклу відбудеться тоді, як
тількино вміст регістра COUNT досягне 0, тобто після 100–го
звернення до внутрішнього циклу DELAY_1MS.
Поки ж вміст цього реґістра залишатиметься не
нульовим, звернення до внутрішнього циклу відбуватиметься
за щораз. Нижче представлений код підпрограми, яка
забезпечує затримку тривалістю 100 мілісекунд.
Зрозуміло, що нова програма не забезпечує абсолютну
точність величини затримки, хочаб тому, час на виконання
команди decfsz COUNT нами проігноровано. Окрім того,
команди goto D_LOOP, return у програмі 8.3, на
відміну від попередньої, є частиною зовнішнього, а не
внутрішнього циклу. Тому реальна затримка, що формується
завдяки цій програмі становить 99,905 мс, тобто на 95 мкс
менше ніж очікувано, що відповідає точності 0,1 %.
261