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