Page 230 - 4503
P. 230

Розвязок  задачі  очевидно  полягає    у  застосуванні
           операції циклічного зсуву, наприклад за допомогою команди
           rrf .
                Після кожної із команд слід перевірити значення ознаки
           С.  Якщо  значення  дорівнює  1,  то  слід  додати  1  до  наперед
           визначеного  регістра  —  накопичувача.  Назвемо  його
           COUNTER_ALL    і  розмістемо    наприклад  за  адресою  h’34’.
           Напишемо відповідний програмний код на асемблері.

                     COUNTER_ALL  equ  h’34’
                LOOP_1
                  rrf h’21’ ; розміщеня у С значеня біта
                  btfsc STATUS,C ; перевірка ознаки С
                  inc COUNTER_ALL ;якщо С = 1 то
                               ;збільшити
           COUNTER_ALL
                  goto  LOOP_1  ;  інакше  перейти  до
           ;розміщення у С   значення наступного біта

                Але команду rrf слід застосувати для перевірки кожного
           з восьми бітів регістра h’31’. Отже, повний код задачі матиме
           наступний вигляд.

                  movlw h’08’ ; встановлення числа 8 в w
           ;----перевірка всіх 8 бітів регістра h’21’--
           LOOP_1
                  addlw –1     ; зменшення на 1 вмісту w
                            ;  за кожний прохід по циклу
                  rrf h’21’,f
                  btfsc STATUS,C
                 inc COUNTER_ALL
                 btfss STATUS, Z; чи пройшло 8
                          ;викликів rrf h’21’
                  goto LOOP_1

                                         230
   225   226   227   228   229   230   231   232   233   234   235