В сети
Пользователей: 157 Из них просматривают: Аналоги: 59. Даташиты: 47. Инструкции: 9. Магазин: 1. Новости: 14. Остальное: 4. Ошибки: 3. Расчёты: 3. Форум: 16. Чат: 1.
Участников: 3
Гостей: 154
an , Google , Яндекс ,
далее...
Рекорд 2375 человек онлайн установлен 26.12.2015.
|
Контроллеры
Система команд PIC-контроллеров серии PIC16C8X
Написал MACTEP в 03.12.2008 13:00:00
( 11110 прочтений)
Каждая команда представляет собой 14-разрядное слово, содержащее поле кода операции OPCODE и поле операндов. Система команд включает в себя команды работы с байтами, команды работы с битами, команды управления и операции с константами. Для команд работы с байтами "f" обозначает регистр, с которым производится действие, а бит "d" определяет регистр назначения. При "d"=0 результат помещается в регистр W, при "d"=1 результат помещается в регистр "f", заданный в команде.
Для команд работы с битами "b" обозначает номер бита, участвющего в команде, а "f" - регистр, в котором этот бит расположен.
Для команд управления и операций с константами "k" обозначает 8- или 11-битовую константу или идентификатор.
Все команды выполняются в течение одного командного цикла, кроме следующих двух случаев:
- Переход по проверке условия, если результат проверки условия - истина.
- Изменение счетчика команд как результат выполнения команды.
В этих случаях команда выполняется за два цикла с выполнением второго цикла как NOP. Один командный цикл состоит из четырех периодов генератора. Таким образом, для генератора с частотой 4 МГц время выполнения команды составит 1 мкс. Если выполняется переход по проверке условия или в результате выполнения команды изменился счетчик команд, время выполнения этой команды при тактовой частоте 4 МГц составит 2 мкс.
Принятые обозначения
f: |
Адрес регистра |
W: |
Рабочий регистр |
b: |
Номер бита в 8-ми разрядном регистре |
k: |
Константа |
x: |
Не используется. Ассемблер формирует код с х=0 |
d: |
Регистр назначения:
d=0 - результат в регистре W
d=1 - результат в регистре f.
По умолчанию d=1 |
label: |
Имя метки |
TOS: |
Вершина стека |
РС: |
Счетчик команд |
ТО: |
Тайм-аут |
PD: |
Выключение питания |
dest: |
Регистр назначения: рабочий регистр W или регистр, заданный в команде |
[]: |
Необязательные параметры |
(): |
Содержание |
-->: |
Присвоение |
<>: |
Битовое поле |
О: |
Из набора |
Обозначение |
Функция |
Циклы |
Код команды |
Биты состояния |
Примечания |
ADDLW |
Сложение константы и W |
1 |
11 111x kkkk kkkk |
C, DC, Z |
|
ADDWF |
Сложение W c f |
1 |
00 0111 dfff ffff |
C, DC, Z |
1, 2 |
ANDLW |
Логическое И константы и W |
1 |
11 1001 kkkk kkkk |
Z |
|
ANDWF |
Логическое И W и f |
1 |
00 0101 dfff ffff |
Z |
1, 2 |
BCF |
Сброс бита в регистре f |
1 |
01 00bb bfff ffff |
|
1, 2 |
BSF |
Установка бита в регистре f |
1 |
01 01bb bfff ffff |
|
1, 2 |
BTFSC |
Пропустить команду, если бит в f равен нулю |
1 (2) |
01 10bb bfff ffff |
|
3 |
BTFSS |
Пропустить команду, если бит в f равен единице |
1 (2) |
01 11bb bfff ffff |
|
3 |
CALL |
Вызов подпрограммы |
2 |
10 0kkk kkkk kkkk |
|
|
CLRF |
Сброс регистра f |
1 |
00 0001 1fff ffff |
Z |
2 |
CLRW |
Сброс регистра W |
1 |
00 0001 0xxx xxxx |
Z |
|
CLRWDT |
Сброс сторожевого таймера WDT |
1 |
00 0000 0110 0100 |
__ __ TO, PD
|
|
COMF |
Инверсия регистра f |
1 |
00 1001 dfff ffff |
Z |
1, 2 |
DECF |
Декремент регистра f |
1 |
00 0011 dfff ffff |
Z |
1, 2 |
DECFSZ |
Декремент f, пропустить команду, если 0 |
1 (2) |
00 1011 dfff ffff |
|
1, 2, 3 |
GOTO |
Переход по адресу |
2 |
10 1kkk kkkk kkkk |
|
|
INCF |
Инкремент регистра f |
1 |
00 1010 dfff ffff |
Z |
1, 2 |
INCFSZ |
Инкремент f, пропустить команду, если 0 |
1 (2) |
00 1111 dfff ffff |
|
1, 2, 3 |
IORLW |
Логическое ИЛИ константы и W |
1 |
11 1000 kkkk kkkk |
Z |
|
IORWF |
Логическое ИЛИ W и f |
1 |
00 0100 dfff ffff |
Z |
1, 2 |
MOVF |
Пересылка регистра f |
1 |
00 1000 dfff ffff |
Z |
1, 2 |
MOVLW |
Пересылка константы в W |
1 |
11 00xx kkkk kkkk |
|
|
MOVWF |
Пересылка W в f |
1 |
00 0000 1fff ffff |
|
|
NOP |
Холостая команда |
1 |
00 0000 0xx0 0000 |
|
|
OPTION |
Загрузка регистра OPTION |
1 |
00 0000 0110 0010 |
|
|
RETFIE |
Возврат из прерывания |
2 |
00 0000 0000 1001 |
|
|
RETLW |
Возврат из подпрограммы с загрузкой константы в W |
2 |
11 01xx kkkk kkkk |
|
|
RETURN |
Возврат из подпрограммы |
2 |
00 0000 0000 1000 |
|
|
RLF |
Сдвиг f влево через перенос |
1 |
00 1101 dfff ffff |
C |
1, 2 |
RRF |
Сдвиг f вправо через перенос |
1 |
00 1100 dfff ffff |
C |
1, 2 |
SLEEP |
Переход в режим SLEEP |
1 |
00 0000 0110 0011 |
__ __ TO, PD
|
|
SUBLW |
Вычитание W из константы |
1 |
11 110x kkkk kkkk |
C, DC, Z |
|
SUBWF |
Вычитание W из f |
1 |
00 0010 dfff ffff |
C, DC, Z |
1, 2 |
SWAPF |
Обмен местами тетрад вf |
1 |
00 1110 dfff ffff |
|
1, 2 |
TRIS |
Загрузка регистра TRIS |
1 |
00 0000 0110 0fff |
|
|
XORLW |
Исключающее ИЛИ константы и W |
1 |
11 1010 kkkk kkkk |
Z |
|
XORWF |
Исключающее ИЛИ W и f |
1 |
00 0110 dfff ffff |
|
1, 2 |
Примечание:
- Если модифицируется регистр ввода/вывода (например, MOVF PORTB,1), то используется значение, считываемое с выводов. Например, если в выходной защелке порта, включенного на ввод, находится "1", а внешнее устройство формирует на этом выводе "0", то в этом разряде данных будет записан "0".
- Если операндом команды является содержимое регистра TMRO (и, если допустимо, d=1), то предварительный делитель, если он подключен к TMRO, будет сброшен.
- Если в результате выполнения команды изменяется счетчик команд, или выполняется переход по проверке условия, то команда выполняется за два цикла. Второй цикл выплняется как NOP.
Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Разное
Если у вас нет жидкого канифольного флюса, его легко изготовить самостоятельно.
|
Интересно
Паяльник в дежурном нагреве включайте через диод, этим Вы значительно продлите ему жизнь.
|
|
|