Все, что сказано выше, относится и к команде BTFSS. Единственное различие в том, что следующая за ней команда пропускается, если указанный бит установлен.
Ниже приведено несколько примеров работы:
Пример 1. Управление режимом работы светодиода, подключенного к PORTB<4>. Если светодиод погашен, то он зажигается, а если горит, то гаснет:
START
BTFSS PORTB,4 ; ЕСЛИ светодиод погашен
GOTO ON ; ТО перейти к ON
GOTO OFF ; ИНАЧЕ к метке OFF
ON
BSF PORTB,4 ; включить
GOTO START ;
OFF
BCF PORT,4 ; выключить
GOTO START ; к началу
Пример 2. Преобразование двоичного числа в BCD формат. Микроконтроллеры PIС среднего уровня не имеют команд умножения и деления. Для реализации этих задач можно использовать сложение и вычитание.
При делении числа на 10 формируется частное от 0 до 9 и остаток. Частное представляет собой число десятков, а остаток – число единиц.
В регистре будет подсчитываться количество операций вычитания, выполненных до генерации заёма, -исходное число десятков на единицу меньше подсчитанного значения. Прибавив к оставшемуся значению число 10, получим остаток от деления, т.е. число единиц.
Рис. 8.5. Преобразование десятичного числа (0…99) в BCD число
Для реализации задачи используются команды циклического сдвига RLF и условного перехода BTFSS. Алгоритм программы «Бегущий огонь» представлен на Рис. 7.11.
Инициализация порта В выполняется командой сброса CLRF TRISB. Далее происходит установка флага C (BSF STATUS,С). Командой циклического сдвига влево (RLF) он вдвигается в 0-й бит регистра PORTB, а 7-й бит помещается на место флага С.
Команда BTFSS PORTB,7 проверяет наличие единицы на выходе RB7 (горит ли крайний левый светодиод) и если она отсутствует (светодиод не горит), то исполнение программы переходит на команду с меткой AGAIN и сдвиги продолжаются до тех пор, пока высокий уровень не появится выходе RB7 (загорелся крайний левый светодиод).
В этом случае при выполнении команды BTFSS PORTB,7 следующая за ней команда GOTO LOOP пропускается, светодиод гаснет BCF PORTB,7 и управление передается команде, помеченной меткой START.
Шапка программы
Start
Настройка порта В
на вывод
Установка флага C
Again
Погасить светодиод
Циклический сдвиг влево
Rb7=1?
нет
да
Рис. 8.6. Алгоритм программы «Бегущий огонь»
;*********************************************
; AVTOMAT - Программа автомат Бегущий огонь
;*********************************************
; PORTB - подключение светодиодов
; Определение рабочих регистров ------------
COUNT EQU 10H ; Счетчик времени
; Установка направления работы порта В - на выход.
START
BSF STATUS,RP0 ; Перейти в 1-й банк
CLRF TRISB ; настроить порт В на выход .
BSF STATUS,RP0.. ; Перейти в 0-й банк
; Формирование бегущ
RLF PORTB,f ; зажечь следующий светодиод
CALL DELAY ; задержка
BTFSS PORTB,7 ; ЕСЛИ крайний левый погашен
GOTO LOOP ; ТО продолжить сдвиг
BCF PORTB,7 ; ИНАЧЕ погасить
GOTO START ; переход на новый полный цикл программы