Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PIC микроконтроллеры.docx
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
22 Мб
Скачать
☆

Команды условного перехода

Команда BTFSC f,b используются для организации операции выбора следующей команды на основе анализа состояний любых битов любом регистров данных, образующих конструкцию ЕСЛИ – ТО.

В качестве регистра f используются регистры общего или специального назначения, бит b в команде представляется в виде его порядкового номера (0, 1, 7) или наименования (С. Z, INTF и т.п.). При применении этих команд критерием ветвления является значение выбранного бита.

Например, если на момент исполнения команды BTFSC f,b значение выбираемого программистом бита b в регистре f равно 0, то, следующая команда пропускается, а если значение этого бита равно 1, то следующая команда выполняется.

Пример

Шестой в памяти программ Рис. 8.4 является команда BTFSC H’20’,7. Она проверяет состояние 7го бита регистра 20Н и, в зависимости от его состояния, выполняет один из двух вариантов продолжения программы:

  1. ЕСЛИ 7-й бит равен 0, ТО команда 7 пропускается и выполняется команда 8.

  2. ИНАЧЕ выполняется команда 7.

  3. Часто в качестве 7-й команды используется команда GOTO, что позволяет перейти к другому блоку программы.

Рис 8.4. «Перескакивание» через команду при сброшенном бите регистра 20Н

BTFSS f,b

Все, что сказано выше, относится и к команде 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 число

;******************************************************

;BIN_BCD - Преобразование двоичного числа в BCD формат

;******************************************************

BINARY EQU H'10' ;исходное числа

TENS EQU H'20' ;частное (десятки)

UNITS EQU H'21' ;остаток (единицы)

;сначала делим на 10--------------------------------

CLRF TENS ;обнуляем счетчик десятков

MOVLW D'10' ;

;вычитаем 10 и считаем кол-во вычитаний до займа

LOOP

INCF TENS,f ;запомнили очередную операцию

SUBWF BINARY,f ;вычли 10

BTFSC STATUS,C ;ЕСЛИ займа нет (С=1)

GOTO LOOP ;ТО вычитаем еще раз

;корректируем лишнее вычитание и определяем число единиц

DECF TENS,f ;последняя операция вычитания - лишняя

MOVLW D'10' ;прибавляем 10

ADDWF BINARY,w ;к оставшемуся значению

MOVWF UNITS ;остаток от деления (число единиц)

;-------------------------------------------------------------

END

Пример 3. Формирование световых эффектов

Для реализации задачи используются команды циклического сдвига 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 ; переход на новый полный цикл программы

; Директива конца программы ---------------

END

его огня----------------

BSF STATUS,C ; Установить флаг С

LOOP

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]