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