| |
Краткая информация
по 14 битным инструкциям для
семейства микроконтроллеров
PIC14000/PIC16CXXX
Длина каждой из этого набора инструкции составляет 14-ти битное слово, разделенное на
OPCODE (часть кода команды), которая указывает на тип исполняемой команды,
и один или несколько операндов, которые в свою очередь в дальнейшем определяют
дальнейшее выполнение инструкции. Этими командами программируются такие устройства как
PIC16C74, PIC14000, PIC16C924, PIC16C554 и др.
Краткая информация о командах дана в
таблице 1-2.
Команды подразделяются на байт-ориентированные, бит-ориентированные, символьные
и команды управления. В таблице 1-1, приведено из каких составных частей состоит
код команды в зависисмотси от ее принадлежности к выше определенным группам.
Для байт-ориентированных команд, 'f' - это обозначение файлового регистра,
а 'd' обозначает место назначения. Обозначение файлового регистра используется
для указания одного из файловых регистов используемых в командах.
Обозначение места назначения используется для указания места где сохраняется
результат выполнения команды. Если 'd' равно 0, тогда результат помещается в
регистре W. Если 'd' равно 1, тогда результат помещается в
файловом регистре указанном в описании к команде.
Для бит-ориентированных команд, 'b' обозначает номер бита, который
указывает изменяемый в результате исполнения команды бит, 'f' указывает файл,
в котором находится этот бит.
Для символьных команд и команд управления 'k' обозначает 8-ми или 9-ти битную
константу или символное значение.
| Поле | Описание |
| |
| f | Адрес файлового регистра (от 0x00 до 0x7F) |
| W | Рабочий регистр (аккумулятор) |
| b | Адрес бита внутри 8-ми битного регистра |
| k | Символьное поле, константа или метка |
| x |
Любое значение(=0 или 1)
Компилятор сгенерирует код с x=0 -это нужно для совместимости со всеми
программными продуктами Microchip.
|
| d |
Выбор где сохранять результат:
d=0 (сохранять в W)
d=1 (сохранять в f)
По умолчанию d=1
|
| label | Имя метки |
| TOS | Вершина стека |
| PC | Счетчик команд (программный счетчик) |
| PCLATH | Записываемый буффер для старших 5-ти бит PC |
| GIE | Флаг разрешения глобальных прерываний |
| WDT | Сторожевой таймер |
| TO | бит Таймаута (Time-out bit) |
| PD | бит понижения питания (Power-Down bit) |
| dest | Назначение, либо регистр W либо другой регистр указанный в описании команды |
| [ ] | Опционально, т.е. необязательное использование записи, которая заключена в квадратные скобки |
| ( ) | Содержимое |
| -> | Занести в |
| < > | Битовое поле в регистре |
| E | принадлежит |
| italic | определяется пользователем |
|
Все команды выполняются за один командный цикл, кроме тех,
которые проверяют различные условия или изменяющие програмный счетчик.
В этом случае выполнение команды разтягивается на два командных цикла.
Один командный цикл состоит из 4-х периодов тактового генератора.
Т.е. если частота тактового генератора равна 4МГц, то обычная команда
выполнится за 1 мкс, команда проверяющая условия или изменяющая программный счетчик
выполнится за 2 мкс.
В таблице 1-1 показаны три формата, которые может принимать команда. Во всех примерах
для обозначения шестнадцатеричного числа используется формат: 0xhhh,
где h - шестнадцатеричное число.
| Таблица 1-1 |
Байт-ориентированные операции с файловым регистром
| 13 |
8 |
7 |
6 |
0 |
| OPCODE |
d | f(FILE #) |
|
d = 0 для записи результата в W
d = 1 для записи результата в f
f = 7-ми битный адрес файлового регистра
|
Бит-ориентированные операции с файловым регистром
| 13 |
10 |
9 |
7 |
6 |
0 |
| OPCODE |
b (BIT #) | f(FILE #) |
|
b = 3-х битный адрес
f = 7-ми битный адрес файлового регистра
|
Символьные команды и команды ветвления (общий вид)
| 13 |
8 |
7 |
0 |
| OPCODE |
k (символ) |
|
k = 8-ми битное непосредственное значение
|
Команды ветвления - GOTO и CALL
| 13 |
11 |
10 |
0 |
| OPCODE |
k (символ) |
|
k = 11-ти битное непосредственное значение
|
|
|
Использование Регистров Специального Назначения в качестве источника/назначения
1.1.1 Регистр STATUS в качестве регистра назначения
Если использовать этот регистр в качестве регистра назначения, то надо иметь ввиду, что
некоторые команды после своего выполнения изменяют биты этого регистра, такие как Z, C и DC.
Они могут быть как очищены так и установлены, так что могут пеперисать ранее установленные данные.
Например, команда CLRF STATUS должна по идее очистить регистр STATUS, что в принципе вначале и
происходит, но после очистки устанавливается бит 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 Манипуляция битами
Все битовые команды работают одинаково. Сначала считывается весь регистр, далее изменяются необходимые биты и
результат записывается целиком обратно в регистр (чтение-изменение-запись). Нужно это всегда помнить когда рабоаете
со специальными регистрами, такими как порты.
Сводная таблица команд
|
 |