Система команд микроконтроллера РIC16F876
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Перед тем, как начать исполняемый код, мы должны задать выражение ORG 0. Это указатель для ассемблера, что код, следующий за этим выражением, начинается с нулевого адреса ЭППЗУ. Выражение "ORG" используется для размещения сегментов кода по различным адресам в пределах размеров ЭППЗУ. Исполняемый код должен заканчиваться директивой END, означающей, что за этой директивой отсутствуют исполняемые команды.

При включении питания РIC16F84 переходит на адрес 000h. Первая инструкция, которая будет выполнена процессором, это команда GOTO BEGIN, которая передаст управление на адрес 100h и дальнейшая работа продолжится с этого адреса. BEGIN - это выбираемое пользователем имя метки (метки всегда должны начинаться с первой позиции строки), которое ассемблер использует в качестве адресной ссылки. В процессе работы ассемблер определяет расположение метки BEGIN и запоминает, что если это имя будет встречено еще раз, вместо него будет подставлен адрес метки.

NOР

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

CLRW

Эта команда очищает рабочий регистр W.

CLRF f

CLRF делает для любого регистра то же, что CLRW делает для рабочего регистра W SUBWF f,d

ADDWF f,d

Вычесть рабочий регистр W из любого регистра f. Эта команда также устанавливает признаки CARRY, DIGIT CARRY и ZERO в регистре STATUS. Команда ADDWF работает полностью аналогично, прибавляя рабочий регистр W к любому регистру f и устанавливая те же признаки.

SUBLW k

ADDLW k

Эти две команды работают совершенно аналогично вышеописанным, за тем исключением, что операция производится между рабочим регистром W и байтовой константой, заданной в команде. Команда SUBLW вычитает рабочий регистр W из константы k, а команда ADDLW добавляет рабочий регистр W к константе k. Эти команды также устанавливают признаки CARRY, DIGIT CARRY и ZERO. Результат выполнения команды помещается в рабочий регистр W. DECF f,d

INCF f,d

Команда DECF уменьшает заданный регистр на 1, а INCF увеличивает заданный регистр на 1. Результат может быть помещен обратно в заданный регистр (при d=1) либо в рабочий регистр W (при d=0). В результате выполнения этих команд может установиться признак ZERO в регистре STATUS.

IORWF f,d

ANDWF f,d

XORWF f,d

Эти три команды выполняют логические действия ИЛИ, И и ИСКЛЮЧАЮЩЕЕ ИЛИ. Операция логического сложения ИЛИ чаще всего используется для установки отдельных битов в регистрах. Сбрасываются эти биты затем операцией логического умножения И. Когда над одинаковыми битами выполняется операция ИСКЛЮЧАЮЩЕЕ ИЛИ, результат равен 0. Поэтому операция ИСКЛЮЧАЮЩЕЕ ИЛИ часто используется для проверки состояния (установлены или сброшены) определенных бит в регистре. IORLW k

ANDLW k

XORLW k

Эти три команды выполняют те же действия, что и их вышеописанные аналоги, за тем исключением, что операция производится между рабочим регистром W и маской, заданной в команде. Результат выполнения команды помещается в рабочий регистр W.

MOVF f,d

Эта команда в основном используется для пересылки регистра в рабочий регистр W (d=0). Если же установить d=1, то эта команда загрузит регистр сам в себя, но при этом бит ZERO в регистре STATUS установится в соответствии с содержимым регистра.

COMF f,d

Эта команда инвертирует любой заданный регистр. При d=0 результат заносится в рабочий регистр W, а при d=1 инвертируется содержимое заданного регистра. DECFSZ f,d

INCFSZ f,d

При d=1 команда DECFSZ уменьшает на единицу, а INCFZ увеличивает на единицу заданный регистр и пропускает следующую команду, если регистр стал равным нулю. При d=0 результат записывается в регистр W и следующая команда пропускается, если рабочий регистр W стал равным нулю. Эти команды используются для формирования временных задержек, счетчиков, циклов и т.д.

SWAРF f,d

Эта команда меняет местами полубайты в любом регистре. Как и для других команд, при d=0 результат записывается в рабочий регистр W, а при d=1 остается в регистре.

RRF f,d

RLF f,d

В ассемблере РIC имеется две команды сдвига - сдвиг вправо через бит CARRY любого регистра RRF и сдвиг влево через бит CARRY любого регистра RRF. Как и для других команд, при d=0 результат сдвига записывается в регистр W, а при d=1 остается в регистре. Инструкции сдвига используются для выполнения операций умножения и деления, для последовательной передачи данных и для других целей. Во всех случаях бит, сдвигаемый из 8-битного регистра, записывается в бит CARRY в регистре STATUS, а бит CARRY записывается в другой конец регистра, в зависимости от направления сдвига. При сдвиге влево RLF CARRY записывается в младший бит регистра, а при сдвиге вправо RRF CARRY записывается в старший бит регистра.

BCF f,b

BSF f,b

Команды очистки бита BCF и установки бита BSF используются для работы с отдельными битами в регистрах. Параметр b означает номер бита, с которым производится операция, и может принимать значения от 0 до 7. BTFSC f,b

BTFSS f,b

Команды условных переходов BTFSC и BTFSS проверяют состояние заданного бита в любом регистре и в зависимости от результата пропускают или нет следующую команду. Команда BTFSC пропускает команду, если заданный бит сброшен, а команда BTFSS - если установлен.

CALL k

RETURN

Эти две команды предназначены для работы с подпрограммами. Команда CALL используется для перехода на подпрограмму по адресу, задаваемому в команде, а команда RETURN - для возврата из подпрограммы. Обе команды выполняются за 2 цикла. Адрес, на котором находилась команда CALL запоминается в специально организованных регистрах, называемых стеком. Эти регистры недоступны для обращений и используются только при вызовах подпрограмм и возвратах. Глубина стека, т.е. число специальных регистров - 8. Поэтому из основной программы можно сделать не более 8 вложенных вызовов подпрограмм. После возврата из подпрограммы выполнение продолжается со следующей после CALL команды. Регистр W и регистр STATUS при вызове подпрограммы не сохраняются, поэтому, если необходимо, их можно сохранить в отдельных ячейках памяти.

RETLW k

RETFIE

Существуют еще две команды, предназначенные для возврата из подпрограмм. Команда RETLW возвращает в рабочем регистре W константу, заданную в этой команде, а команда RETFIE разрешает прерывания.

 

Таблица 2. Система команд микроконтроллера РIC16F876

 

СПЕЦИАЛЬHЫЕ КОМАHДЫ

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

В таблице 2 представлена система команд микроконтроллера РIC16F876. [1]

 

Ассемблирование

 

Для ассемблирования используется макроассемблер MРASM, он содержит все необходимые нам возможности. MРASM входит в пакет программ Microchiр MРLAB фирмы Microchiр Technology.

В результате работы ассемблера создаются файлы со следующими расширениями:

* HEX - объектный файл

* LST - файл листинга

* ERR - файл ошибок и предупреждений

* COD

Объектный файл создается в 16-ричном формате и содержит код, который должен быть записан в микросхему. Файл листинга содержит полный листинг программы вместе с загрузочным кодом. В файл ошибок и предупреждений записываются все ошибки и предупреждения, возникающие в процессе ассемблирования. Они также присутствуют и в файле листинга.

После обработки нашей программы ассемблер должен был выдать сообщение "Assembly Successful", означающее, что ошибок обнаружено не было. Файл ошибок не должен был создаться.



Дата: 2019-12-10, просмотров: 215.