| |
Краткая информация
по 16 битным инструкциям для
семейства микроконтроллеров
PIC18XXXX
Набор команд
МК семейства PIC18XXX состоит из 69
команд. Команды состоят из 16-ти
битных слов, разделенных на OPCODE
(часть кода команды), которая
указывает на тип исполняемой
команды, и один или несколько
операндов определяющие
дальнейшее выполнение
инструкции. Краткая информация
о командах дана в
таблице 1-2.
Все команды
подразделяются на:
- байт-ориентированные;
- бит-ориентированные;
- символьные;
- табличные;
- команды
управления.
В
байт-ориентированных командах
'f' представляет собой
указатель регистра в файле, 'd'
определяет назначение
результата, и 'a' правила
доступа к памяти. Если 'd'=0 результат
записывается в регистр W, иначе
в регистр файла 'f'
Для
бит-ориентированных команд, 'b'
обозначает номер бита, который
указывает изменяемый в
результате исполнения команды
бит, 'f' указывает регистр файла,
в котором находится этот бит, 'a'
правила доступа к памяти.
Для
символьных команд и команд
управления 'k' обозначает 8-ми
битную константу или символьное
значение.
Табличные
команды используются для передачи
данных между памятью программ
и памятью данных. В 21-битном
регистре TLBPTR указывается адрес
в памяти программ.
Чтение/запись в память
программ производится с
использованием буферного
8-битного регистра TABLAT.
В командах
управления 8-битное значение 'n'
используется для указания
относительного знакового
перехода, кроме команд BRA; RCALL
где используется 21-битное
значение 'n'. В командах GOTO; CALL
20-битное значение 'n' указывает
абсолютный адрес для перехода.
Все команды
выполняются за один командный
цикл, кроме тех, которые
проверяют различные условия,
изменяющие программный
счетчик или операции
чтения/записи таблиц. В этом
случае выполнение команды
растягивается на два командных
цикла. Команда выполняется за 3
цикла, если по условию,
необходимо пропускать команду
состоящую из 2-х слов. Один
командный цикл состоит из 4-х
периодов тактового генератора.
Т.е. если частота тактового
генератора равна 40МГц, то
обычная команда выполнится за
100 нс, команда проверяющая
условия, изменяющая
программный счетчик,
работающая с таблицами
выполнится за 200 нс.
1.1
Использование Регистров
Специального Назначения в
качестве операнда
Набор команд
PIC позволяет осуществлять
чтение/запись в любой регистр
файла, в том числе и в регистры
специального назначения. Есть
несколько особых случаев, в
которых надо соблюдать
осторожность.
1.1.1 Регистр
ALUSTA в качестве приемника
Если
использовать этот регистр в
качестве регистра назначения,
то надо иметь ввиду, что
некоторые команды после своего
выполнения изменяют биты этого
регистра, такие как Z, C, DC, OV, N.
Эти биты могут быть очищены или
установлены, а затем изменены в
результате выполнения команд,.
Например, команда CLRF ALUSTA должна
по идее очистить регистр ALUSTA,
что в принципе вначале и
происходит, но после очистки
устанавливается бит Z, и в итоге
вместо ожидаемого 0000 0000b мы
получаем 0000 0100b в этом регистре.
1.1.2 PCL в
качестве регистра назначения
или источника
Операции
чтения, записи или
чтения-изменения-записи с PCL
могут привести к следующим
результатам:
- Чтение PCL:
- PCL->dest
PCH->PCLATH
- Запись PCL:
- PCLATH->PCH
- 8-ми битное
значение dest -> PCH
- Чтение-Изменение-Запись:
- PCL->операнд
АЛУ
- PCLATH->PCH
- 8-ми битный
результат -> PCL
Где PCH -
старший байт программного
счетчика (не адресуемый
регистр),
PCLATH - буфер программного
счетчика, dest - приемник.
1.1.3
Манипуляция с битами
Все битовые
команды работают одинаково.
Сначала считывается весь
регистр, далее изменяются
необходимые биты и результат
записывается целиком обратно в
регистр
(чтение-изменение-запись).
Нужно это всегда помнить когда
работаете со специальными
регистрами, такими как порты.
1.2 Разбивка по
тактам
Каждый
командный цикл (Tcy) состоит из
четырех периодов тактового
генератора (T1-T4). В общем, по
функциональности эти периоды
можно классифицировать
следующим образом:
- T1:
Декодирование команды или
вынужденная NOP (пустая
команда)
- T2: Чтение
или NOP
- T3:
Выполнение команды и
обработка данных
- T4: Запись
или NOP
Список
операндов
| Операнд | Описание |
| |
| a |
Бит
доступа к памяти:
a = 0: прямая адресация
памяти (содержимое
регистра BSR игнорируется)
a = 1: банк памяти выбирается
при помощи регистра BSR |
| b |
Биты
адресуются внутри
8-битного регистра (0-7) |
| BSR |
Регистр
выбора банка памяти |
| d |
Бит
выбора источника для
пересылки результата
d = 0: результат сохраняется
в регистре W
d = 1: результат сохраняется
в регистре f |
| dest |
Цель
назначения √ WREG или
соответствующий регистр |
| f |
8-битный
адрес регистра (0x00 до 0хFF) |
| fs |
12-битный
адрес регистра источника
(0x000 до 0хFFF) |
| fd |
12-битный
адрес регистра назначения
(0x000 до 0хFFF) |
| k |
Поле
литерала, содержит данные
или метку (также может быть
8-,12- или 20-битное значение) |
| label |
Имя метки |
| mm |
Режим
работы TBLPTR регистра при
выполнении операций
табличного чтения/записи.
Может использоваться
только в операциях
табличного чтения/записи.
* значение не изменяется
*+ инкрементируется после
выполнения команды
*- декрементируется после
выполнения команды
+* инкрементируется перед
выполнением команды |
| n |
Адрес для
выполнения инструкций
относительного перехода,
или непосредственный
адрес при выполнении
инструкций вызова
подпрограмм/перехода. |
| PRODH |
Старший
байт результата после
выполнения операции
умножения |
| PRODL |
Младший
байт результата после
выполнения операции
умножения |
| s |
Бит
режима быстрого вызова/возврата |
| u |
Не
используется или не
изменяется |
| W |
Рабочий
регистр (аккумулятор) |
| x |
Не важно
(0 или 1) |
| TBLPTR |
21-битный
табличный указатель (указывает
на адрес в памяти
программы) |
| TABLAT |
8-битная
табличная защелка |
| TOS |
Вершина
стека |
| PC |
Программный
счетчик |
| PCL |
Младший
байт программного
счетчика |
| PCH |
Старший
байт программного
счетчика |
| PCLATH |
Старший
байт защелки программного
счетчика |
| PCLATU |
Младший
байт защелки программного
счетчика |
| GIE |
Бит
глобального включения
прерывания |
| WDT |
Сторожевой
таймер |
| TO |
Бит Time-Out |
| PD |
Бит Power-Down |
| C,DC,Z,OV,N |
Биты
статуса ALU, перенос,
перенос цифры, нуль ,
переполнение,
отрицательное значение |
| [
] |
Необязательно |
| (
) |
Содержимое |
| -> |
Назначение
(направление) |
| <
> |
Регистровое
битное поле |
|
Сводная таблица команд
|
 |