Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КУРС ЛЕКЦИЙ ПО МИКРОПРОЦЕССОРНОЙ ТЕХНИКЕ.doc
Скачиваний:
253
Добавлен:
13.02.2015
Размер:
1.4 Mб
Скачать

5.3.3. Команды работы с битами

Отличительной особенностью данной группы команд является то, что они оперируют с однобитными операндами, в качестве которых используются отдельные биты регистров МК.

Установка и сбросотдельных битов производится командамиBSF f, bиBCF f, b. Любой доступный для записи бит в регистровой памяти может быть модифицирован таким способом. При этом гарантируется, что ни один из остальных битов регистра не будет изменен.

Однако при работе с портами ввода/вывода последнее утверждение не всегда справедливо. Связано это с тем, что значение числа, считываемого из регистра порта, зависит от конфигурацииего выводов в качестве входов или выходов данных.

В системе команд, рассматриваемых PIC МК, отсутствуют команды условного перехода. Вместо них имеются такие, которые позволяют пропустить выполнение следующей команды. В частности, рассмотренные выше командыINCFSZ f, dиDECFSZ f, dудобны для организации циклов в программе.

Для управления процессом выполнения программы используются команды работы с битами BTFSC f, bиBTFSS f, b, позволяющие пропустить выполнение следующей команды программы в зависимости от состояния определенного бита в заданном регистре.

Если в качестве заданного регистра используется регистр STATUS, то можно организовать управление переходами программы в зависимости от состояния битов признаков результата операции, как предусмотрено в микропроцессорах стандартной архитектуры.

5.3.4. Команды управления и работы с константами

Команды работы с константами используют при выполнении операции явно заданные операнды, которые являются частью команды.

Команда MOVLW kиспользуется для записи константыkв рабочий регистрw. Содержимое регистраSTATUSпри этом не изменяется.

Команда ADDLW kприбавляет непосредственно заданную величину к содержимому регистраw. Эта команда изменяет значения битов нуля, переноса и десятичного переноса таким же образом, как и командаADDWF f, d.

Команда SUBLW kвычитает содержимое регистраwиз заданного значения константыk. В отличие отSUBWF f, d, результат выполнения командыSUBLW kможно представить в следующем виде:w = k + (w ^ 0x0FF) + 1. С помощью этой команды удобно изменять знак содержимого регистраw, используя ее следующим образом:SUBLW 0.

Команды логических операций ANDLW k,IORLW kиXORLW kвыполняют побитно соответствующие операции над содержимым регистраwи непосредственно заданной константойk. Эти команды, как и команды работы с байтами, устанавливают только бит нуля в регистреSTATUSв соответствии с результатом операции. Полученный результат сохраняется в регистреw.

С помощью команды IORLW 0удобно определять равенство нулю содержимого регистраw. В зависимости от результата этой операции бит нуля будет установлен в 1 или сброшен в 0.

Команда RETLW kиспользуется для возврата из подпрограммы с установкой начальных условий в регистрw, а также для реализации табличных преобразований, что будет описано ниже. Перед возвращением из подпрограммы эта команда осуществляет загрузку непосредственно заданной величины в рабочий регистрw.

Команды GOTO k,CALL k,RETURNиRETFIEиспользуются для управления программой.

Команды GOTO kиCALL kмогут явно задавать адрес перехода в пределах определенной страницы, размер которой зависит от типа МК: 256/512 адресов для младших моделей, 2К адресов для PIC МК среднего уровня (включая PIC16F8X) и 8К адресов для старших моделей МК. Если адрес перехода выходит за пределы страницы, то регистрPCLATHдолжен содержать правильную информацию о новой странице.

Команда CALL kвыполняется практически так же, как иGOTO k, за исключением того, что указатель на следующую страницу сохраняется в стеке счетчика команд.

Для PIC МК средней группы существует три различных способа возврата из подпрограммы, определяемые командами RETLW k,RETURNиRETFIE. При каждом из этих способов значение адреса извлекается из вершины стека и загружается в счетчик команд. Эти адреса используются для возврата из подпрограмм или прерываний.

Обычное использование команды RETURNприводит к восстановлению адреса команды, следующей за командой вызова подпрограммы. При этом содержимое каких-либо регистров не изменяется, как и значения отдельных битов.

Команда RETFIEиспользуется для возврата из прерывания. Она реализуется аналогично командеRETURNза исключением того, что при ее выполнении устанавливается в 1 битGIEв регистре управления прерываниямиINTCON. Это позволяет после выполнения данной команды немедленно перейти к обработке прерываний, ожидающих своей очереди. В противном случае перед окончанием обработки потребовалась бы проверка наличия запросов других прерываний, и, в случае их поступления, переход к их обработке.

Существует всего две команды, служащие для непосредственного управления функционированием МК. Первая из них – CLRWDT– используется длясбросасторожевого таймера. Вторая –SLEEP– обеспечивает сохранение текущего состояния МК врежиме ожидания, пока не произойдет какое-либо внешнее событие, которое позволит PIC МК продолжить выполнение программы.

Команда CLRWDTсбрасывает в 0 содержимоесторожевого таймераWDTи пределителя (если он используется для установки интервала времени срабатыванияWDT), запуская сначала отсчет временисторожевого таймера. Целью введения командыCLRWDTявляется предотвращение перезапуска МК при нормальном выполнении программы.

Команда SLEEPслужит для двух целей. Первой из них является отключение МК после того, как он закончит выполнение программы. Такое использование МК предполагает, что он необходим только для решения определенной задачи, например, инициализации других устройств в системе, а затем его функционирование не требуется.

Второй целью использования команды SLEEPявляется реализация в МКрежима ожиданиякакого-либо события. Существует три события, способные вывести МК изрежима ожидания. Первым из них является подача сигнала запуска на входсбросаМК, что приведет к перезапуску процессора и началу выполнения программы с нулевого адреса. Второй способ – поступление сигнала «пробуждения» МК отсторожевого таймера. Третьим способом «пробуждения» является прерывание от какого-либо внешнего источника. При любом способе «пробуждения» использование командыSLEEPпозволяет избежать необходимости организации циклов ожидания, а также снизить потребляемую системой мощность.

При этом необходимо иметь в виду, что выход МК из режима ожиданиязанимает, по меньшей мере, 1024 такта. Поэтому командуSLEEPнельзя использовать в тех случаях, когда требуется быстрая реакция на внешнее событие.