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
   256   257   258   259   260   261   262   263   264   265   266