- •Глава 1 позиционные системы счисления
- •Глава 2. Формат представления базовых данных
- •2. А положительное, b отрицательное и по абсолютной величине больше, чем а.
- •3. А положительное, b отрицательное и по абсолютной величине меньше, чем а.
- •4. А и в отрицательные.
- •Глава 2. Логические основы piCmicro
- •Элемент не
- •Элемент и
- •Элемент Исключающее или
- •Элемент или
- •Логические элементы в интегральном исполнении
- •Глава 3. Комбинационные устройства
- •Дешифраторы
- •Шифраторы
- •Мультиплексоры
- •Преобразователи кодов.
- •Сумматоры
- •Глава 4. Последовательностные устройства
- •Параллельные регистры
- •Последовательные (сдвиговые) регистры
- •Блок обработки информации алу/рабочий регистр
- •Счетчики импульсов
- •Глава 5. Запоминающие устройства Иерархия запоминающих устройств эвм
- •Иерархическая структура памяти
- •Структурная схема зу
- •Типы оперативных запоминающих устройств
- •Основные параметры запоминающих устройств
- •Микросхемы озу
- •Постоянные запоминающие устройства (пзу)
- •Флэш-память
- •Глава 6. Обработка хранимой программы
- •Режимы адресации
- •Устройство управления
- •Микроконтроллерная система
- •Глава 5. Архитектура микроконтроллера семейства p1c.
- •Регистр слова состояния status
- •Память данных
- •Параллельные порты ввода/вывода
- •Регистр таймера/счетчика tmr0
- •Eeprom память данных eedata, eeadr
- •Специальные регистры w, intcon, option
- •Глава 6. Требования языка ассемблер
- •Операнд
- •Комментарии в программах на ассемблере
- •Метка/Имя
- •Формат кодирования
- •Глава 7. Набор команд pic контроллера
- •Сложение
- •Очистка
- •Команды инкрементирования и декрементирования
- •Бит ориентированные команды
- •Вычитание
- •Глава 8. Логика и организация программ
- •Последовательное выполнение команд
- •Конструкция выбор пути
- •Команды передачи управления. Команда «нет операции»
- •Команда безусловного перехода
- •Команды условного перехода
- •Конструкция цикл
- •Косвенная адресация памяти данных
- •Глава 9. Модульное программирование
- •Временная задержка малой длительности.
- •Метод вложенных циклов
- •Временная задержка длительностью 1с.
- •10. Организация связи с оператором
Команды условного перехода
Команда 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Н и, в зависимости от его состояния, выполняет один из двух вариантов продолжения программы:
ЕСЛИ 7-й бит равен 0, ТО команда 7 пропускается и выполняется команда 8.
ИНАЧЕ выполняется команда 7.
Часто в качестве 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
