| |
Краткая информация
по 16 битным инструкциям для
семейства микроконтроллеров
PIC17CXXX
Набор команд МК семейства PIC17CXX состоит из 58 команд. Длина каждой из них
составляет 16-ти битное слово, разделенное на
OPCODE (часть кода команды), которая указывает на тип исполняемой команды,
и один или несколько операндов, которые в свою очередь в дальнейшем определяют
дальнейшее выполнение инструкции. Краткая информация о командах дана в
таблице 1-2.
Команды подразделяются на байт-ориентированные, бит-ориентированные, символьные
и команды управления. В таблице 1-1, приведено из каких составных частей состоит
код команды в зависисмотси от ее принадлежности к выше определенным группам.
Для байт-ориентированных команд, 'f' - это обозначение файлового регистра,
а 'd' обозначает место назначения. Обозначение файлового регистра используется
для указания одного из файловых регистов используемых в командах.
Обозначение места назначения используется для указания места где сохраняется
результат выполнения команды. Если 'd' равно 0, тогда результат помещается в
регистре WREG. Если 'd' равно 1, тогда результат помещается в
файловом регистре указанном в описании к команде.
Для бит-ориентированных команд, 'b' обозначает номер бита, который
указывает изменяемый в результате исполнения команды бит, 'f' указывает файл,
в котором находится этот бит.
Для символьных команд и команд управления 'k' обозначает 8-ми или 11-ти битную
константу или символное значение.
| Поле | Описание |
| |
| f | Адрес файлового регистра (от 0x00 до 0xFF) |
| p | Периферийный регистр (от 0x00 до 0x1F) |
| i | Управление табличным указателем. i=0 (не изменять); i=1 (увеличить после выполнения команды) |
| t | Выбор байта таблицы. t=0 (работаем с младшим байтом); t=1 (работаем со старшим байтом) |
| WREG | Рабочий регистр (аккумулятор) |
| b | Адрес бита внутри 8-ми битного регистра |
| k | Символьное поле, константа или метка |
| x |
Любое значение(=0 или 1)
Компилятор сгенерирует код с x=0 -это нужно для совместимости со всеми
программными продуктами Microchip.
|
| d |
Выбор где сохранять результат:
d=0 (сохранять в WREG)
d=1 (сохранять в f)
По умолчанию d=1
|
| u | Неиспользуется, кодируется как '0' |
| s |
Выбор где сохранять результат:
s=0 (сохранять в файловом регистре и в WREG)
s=1 (сохранять в файловом регистре)
По умолчанию s=1
|
| label | Имя метки |
| C,DC,Z,OV | Биты(флаги) статуса АЛУ |
| GLINTD | Флаг запрета шлобальных прерываний (CPUSTA<4>) |
| TBLPTR | Указатель на таблицу |
| TBLAT | Защелка таблицы, состоит из TBLATL и TBLATH |
| TBLATL | Млабший байт TBLAT |
| TBLATH | Старший байт TBLAT |
| TOS | Вершина стека |
| PC | Счетчик команд (программный счетчик) |
| PCLATH | Записываемый буффер для старших 5-ти бит PC |
| GIE | Флаг разрешения глобальных прерываний |
| WDT | Сторожевой таймер |
| TO | бит Таймаута (Time-out bit) |
| PD | бит понижения питания (Power-Down bit) |
| dest | Назначение, либо регистр W либо другой регистр указанный в описании команды |
| [ ] | Опционально, т.е. необязательное использование записи, которая заключена в квадратные скобки |
| ( ) | Содержимое |
| -> | Занести в |
| < > | Битовое поле в регистре |
| E | принадлежит |
| italic | определяется пользователем |
|
Все команды выполняются за один командный цикл, кроме тех,
которые проверяют различные условия, изменяющие програмный счетчик или операции чтения/записи таблиц.
В этом случае выполнение команды разтягивается на два командных цикла.
Один командный цикл состоит из 4-х периодов тактового генератора.
Т.е. если частота тактового генератора равна 25МГц, то обычная команда
выполнится за 160 нс, команда проверяющая условия, изменяющая программный счетчик, работающая с таблицами
выполнится за 320 нс.
В таблице 1-1 показаны три формата, которые может принимать команда. Во всех примерах
для обозначения шестнадцатеричного числа используется формат: 0xhhh,
где h - шестнадцатеричное число.
| Таблица 1-1 |
Байт-ориентированные операции с файловым регистром
| 15 |
9 |
8 |
7 |
0 |
| OPCODE |
d | f(FILE #) |
|
d = 0 для записи результата в WREG
d = 1 для записи результата в f
f = 8-ми битный адрес файлового регистра
|
Операции пересылки байт <-> байт
| 15 |
13 |
12 |
8 |
7 |
0 |
| OPCODE |
p (FILE #) | f(FILE #) |
|
p = адрес периферийного регистра
f = 8-ми битный адрес файлового регистра
|
Бит-ориентированные операции с файловым регистром
| 15 |
11 |
10 |
8 |
7 |
0 |
| OPCODE |
b (BIT #) | f(FILE #) |
|
b = 3-х битный адрес
f = 8-ми битный адрес файлового регистра
|
Символьные команды и команды ветвления (общий вид)
| 15 |
8 |
7 |
0 |
| OPCODE |
k (символ) |
|
k = 8-ми битное непосредственное значение
|
Команды ветвления - GOTO и CALL
| 15 |
13 |
12 |
0 |
| OPCODE |
k (символ) |
|
k = 13-ти битное непосредственное значение
|
|
|
1.1 Использование Регистров Специального Назначения в качестве источника/назначения
Команды позволяют напрямую работать со всеми регистрами в том числе и со специальными.
Именно при работе с этими регистрами необходимо помнить, что:
1.1.1 Регистр ALUSTA в качестве регистра назначения
Если использовать этот регистр в качестве регистра назначения, то надо иметь ввиду, что
некоторые команды после своего выполнения изменяют биты этого регистра, такие как Z, C, DC OV.
Они могут быть как очищены так и установлены, так что могут пеперисать ранее установленные данные.
Например, команда CLRF ALUSTA должна по идее очистить регистр ALUSTA, что в принципе вначале и
происходит, но после очистки устанавливается бит Z, и в итоге вместо ожидаемого 0000 0000b мы
получаем 0000 0100b в этом регистре.
1.1.2 PCL в качестве регистра назначения или источника
Операции чтения, записи или чтения-изменения-записи с PCL могут привести к следующим
результатам:
- Чтение PCL:
- CL->dest
- Запись PCL:
- PCLATH->PCH
- 8-ми битное значение dest -> PCH
- Чтение-Изменение-Запись:
- PCL->операнд АЛУ
- PCLATH->PCH
- 8-ми битный результат -> PCL
Где PCH - старший байт программного счетчика(не адресуемый регистр),
PCLATH - буффер программного счетчика, dest - назначение, WREG или f.
1.1.3 Манипуляция битами
Все битовые команды работают одинаково. Сначала считывается весь регистр, далее изменяются необходимые биты и
результат записывается целиком обратно в регистр (чтение-изменение-запись). Нужно это всегда помнить когда рабоаете
со специальными регистрами, такими как порты.
1.2 Разбивка по тактам
Каждый командный цикл (Tcy) состоит из четырех периодов тактового генератора (T1-T4).
В общем, по функциональности эти периоды можно классифицировать следующим образом:
- T1: Декодирование команды или вынужденная NOP (пустая команда)
- T2: Чтение или NOP
- T3: Выполнение команды
- T4: Запись или NOP
Сводная таблица команд
|
 |