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
   263   264   265   266   267   268   269   270   271   272   273