
- •Глава 1. Теория, понятия, определения
- •Глава 2. Команды ассемблера
- •Глава 3. Составление текста программы на ассемблере в mplab
- •Глава 4. Макетная плата. Программатор
- •Глава 5. Элементарные базовые проекты
- •Глава 6. Инструменты mplab
- •Глава 7. Сопряжение микроконтроллера с внешними устройствами
- •Глава 1. Теория, понятия, определения
- •Банки памяти
- •Регистры специального назначения
- •Регистры общего назначения
- •Как работает микроконтроллер?
- •Глава 2. Команды ассемблера
- •Вычисляемый переход
- •Проверить бит на равенство нулю btfsc f,b
- •Проверить бит на равенство единице btfss f,b
- •; Проверка на факт переноса
- •; Проверка на факт займа
- •; Проверка на равенство нулю
- •; Проверка на равенство одного регистра другому регистру
- •; Проверка на равенство константы какому-либо регистру
- •Сдвиг вправо битов в регистре rrf f, d сдвиг влево битов в регистре rlf f, d
- •Глава 3. Составление текста программы на ассемблере в mplab
- •Структура программы
- •Описание конфигурационных битов.
- •Описание комбинаций битов выбора генератора.
- •Направления работы ножек мк и выполняемые функции задаются в регистрах специального назначения.
- •Глава 5. Элементарные базовые проекты
- •1 (Input) – работа на вход
- •0 (Output) – работа на выход
- •Глава 6. Инструменты mplab
- •Глава 7. Сопряжение микроконтроллера с внешними устройствами
- •Передача данных в сторону компьютера
- •Приём данных от пк на стороне мк
- •Это не конец
; Проверка на равенство нулю
CLRF CLOP ; обнулим регистр KLOP
BCF STATUS,Z ; опустим флаг Z в ноль
MOVF KLOP,F ; копировать из KLOP в KLOP
BTFSC STATUS,Z ; делаем бит-проверку Z-флага
; если Z=1, то выполняется следующая инструкция, иначе – пропускается
; ============================================================
Умышленная очистка регистра KLOP командой CLRF была сделана ради примера. В результате операции "MOVF KLOP,F" флаг Z из нуля поднимется в единицу, после которого мы делаем проверку и идём по одному из вариантов.
Таким образом, флаги упрощают анализ результатов математических операций и избавляют нас от сложностей, связанных с организацией в программе постоянной проверки содержимого регистров общего назначения.
Команды сравнения
Всё познается в сравнении, в том числе и содержимое регистров.
Далее две операции сравнения.
; ============================================================
; Проверка на равенство одного регистра другому регистру
в общем виде команда XORWF F,D
MOVF CLOP,W ; копировать из KLOP в W
BCF STATUS,Z ; опустим флаг Z в ноль
XORWF CLON,F ; проводим сравнение
BTFSC STATUS,Z ; делаем бит-проверку Z-флага по условию
; если Z=1, то выполняется следующая инструкция, иначе пропускается
; ============================================================
Флаг Z после выполнения команды XORWF поднимется из нуля в единицу в том случае, если число в аккумуляторе совпадет с числом, которое находится в проверяемом регистре. Проще говоря, сравнивается содержимое аккумулятора с другим регистром.
; ============================================================
; Проверка на равенство константы какому-либо регистру
в общем виде команда XORLW K
MOVF CLOP,W ; копировать из KLOP в W
BCF STATUS,Z ; опустим флаг Z в ноль
XORLW .123 ; проводим сравнение с числом 123
BTFSC STATUS,Z ; делаем бит-проверку Z-флага
; если Z=1, то выполняется следующая инструкция, иначе – пропускается
; ============================================================
В данном случае сравнивается содержимое аккумулятора с обычным числом (константой).
Команды сдвига битов в регистре
В этих командах используется знакомая вам конструкция XXXXX F,D . Рассмотрим теорию работы команд сдвига. Различают две команды – "сдвиг вправо" и, соответственно, "сдвиг влево". Под сдвигом понимается смещение на один бит (на один разряд) содержимого регистра. Закономерен вопрос: а что появляется на освободившемся месте в регистре и куда девается вытесненный бит из регистра? Логично предположить, что место освободившегося бита занимает смещенный бит. Но это не так. Для этого используется знакомый нам бит C (нулевой бит) в регистре STATUS. Именно через этот бит осуществляется сдвиг содержимого сдвигаемого регистра. На рисунках ниже схематично рассмотрен сдвиг.
Исходное состояние:
бит C (STATUS) = |
1 |
||||||
1 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
|
|
|
|
|
|
|
|
Произведен сдвиг вправо:
бит C (STATUS) = |
0 |
|||||||
1 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
|
|
|
|
|
|
|
|
|
А теперь сделано два сдвига влево:
бит C (STATUS) = |
1 |
||||||
0 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
|
|
|
|
|
|
|
|
Несложно представить ситуацию, когда регистр пуст (все биты равны нулю), а бит C в регистре STATUS равен единице, то с помощью команды сдвига элементарно просто организовать бегущую единицу, что может найти применение в конструкции бегущего огня.