
- •СведенИя о процессоре pic16. Система команд Архитектура процессоров семейства pic16
- •Распределение областей памяти процессоров pic16
- •Система команд процессоров pic16
- •Программирование на Ассемблере
- •Синтаксис числовых значений в различных системах счисления
- •Практическая часть Процесс подготовки программ для процессоров pic16 Методические указания
- •Ход работы
- •Лабораторная работа № 1
- •Теоретические сведения
- •Ход работы
- •Лабораторная работа № 2.
- •Теоретические сведения
- •Ход работы
- •Лабораторная работа № 3.
- •Теоретические сведения
- •Ход работы
- •Лабораторная работа № 4
- •Теоретические сведения
- •Ход работы
- •Лабораторная работа № 5
- •Теоретические сведения
- •Ход работы
- •Лабораторная работа № 6
- •Теоретические сведения
- •Ход работы
- •Лабораторная работа № 7
- •Теоретические сведения
- •Ход работы
- •Лабораторная работа № 8
- •Теоретические сведения
- •Ход работы
- •Список литературы
Система команд процессоров pic16
Каждая команда PIC16 представляет собой 14-разрядное слово, содержащее поле кода операции COM и поле аргументов ARG, условные обозначения которых приведены в таблице 2. Система команд PIC16 приведена в таблице 3.
Система команд включает в себя команды работы с байтами (арифметические и логические, команды пересылок), команды работы с битами, команды управления и операции с константами.
Для команд работы с байтами ‘f‘ обозначает регистр, с которым производится действие, а бит ‘d’ определяет регистр назначения. При ‘d’=0 результат помещается в регистр W, при ‘d’=1 результат помещается в регистр ‘f’, заданный в команде.
Для команд работы с битами ‘b’ обозначает номер бита, участвующего в команде, а ‘f’- регистр, в котором этот бит расположен.
Для команд управления и операций с константами ‘k’ обозначает 8‑битовую константу, ‘addr’ – адрес перехода.
Все команды выполняются в течение одного такта, кроме случаев модификации счетчика команд:
безусловного перехода или вызова подпрограммы;
возврата из подпрограммы;
перехода в результате проверки условия;
изменения счётчика команд в результате выполнения команд.
В этих случаях команда выполняется за два такта.
Таблица 2. Описание полей команд
Поле |
Описание |
f |
Адрес регистра в области памяти данных |
w |
Рабочий регистр W (Word) |
u |
Скрытый регистр для хранения промежуточных результатов (Unvisible) |
b |
Номер бита в 8-разрядном регистре |
k |
8-битная константа для команд работы с данными |
addr |
11-битный адрес перехода для команд GOTO и CALL |
d |
Регистр назначения: d=0 или d=w – результат пересылается в регистр W d=1 или d=f – результат пересылается в регистр с адресом f. По умолчанию d=1 |
GIE |
Global Interrupt Enable – разрешение прерываний |
PC |
Program Counter Счетчик команд |
TOS |
Top Of Stack Вершина стека |
SP |
Stack Pointer Указатель стека |
TO |
Time-Out Тайм-аут |
PD |
Power Down Выключение питания |
[] |
Необязательные параметры |
( ) |
Содержимое |
→ |
Присвоение |
|
Обмен |
Таблица 3. Система команд PIC16
Мнемокод |
Описание команды |
Циклы |
Биты состояния |
Прим. |
Команды работы с регистрами |
||||
ADDWF f, d |
Сложение W с f (w) + (f) → (d) |
1 |
C ,DC ,Z |
1, 2 |
ANDWF f, d |
Логическое И W и f (w) AND (f) → (d) |
1 |
Z |
1, 2 |
CLRF f |
Сброс регистра f 00 → (f) |
1 |
Z |
2 |
CLRW |
Сброс регистра W 00 → (w) |
1 |
Z |
|
COMF f, d |
Инверсия регистра f NOT (f) → (d) |
1 |
Z |
1, 2 |
DECF f, d |
Декремент регистра f (f) – 1 → (d) |
1 |
Z |
1, 2 |
DECFSZ f, d |
Декремент f, пропустить команду, если 0 (f) – 1 → (u) → (d) (PC) + 1 → (PC) при (u)=00 |
1(2) |
|
1, 2, 3 |
INCF f, d |
Инкремент регистра f (f) + 1 → (d) |
1 |
Z |
1, 2 |
INCFSZ f, d |
Инкремент f, пропустить команду, если 0 (f) + 1 → (u) → (d) (PC) + 1 → (PC) при (u)=00 |
1(2) |
|
1, 2, 3 |
IORWF f, d |
Логическое ИЛИ W и f (w) OR (f) → (d) |
1 |
Z |
1, 2 |
MOVF f, d |
Пересылка регистра f (f) → (u) → (d) |
1 |
Z |
1, 2 |
MOVWF f |
Пересылка W в f (w) → (f) |
1 |
|
|
RLF f, d |
Сдвиг f влево через С (f) → (u)
(u) → (d) |
1 |
C |
1, 2 |
RRF f, d |
Сдвиг f вправо через С (f) → (u)
|
1 |
C |
1, 2 |
Таблица 2. Продолжение
Мнемокод |
Описание команды |
Циклы |
Биты состояния |
Прим. |
|
SUBWF f, d |
Вычитание W из f (f) – (w) → (d) |
1 |
C,DC,Z |
1, 2 |
|
SWAPF f, d |
Обмен тетрад в f (f) → (u)
(u) → (d) |
1 |
|
1, 2 |
|
XORWF f, d |
Исключающее ИЛИ W и f (w) XOR (f) → (d) |
1 |
Z |
1, 2 |
|
Команды работы с константами |
|||||
ANDLW k |
Логическое И константы и W k AND (w) → (w) |
1 |
Z |
|
|
ADDLW k |
Сложение W и константы k + (w) → (w) |
1 |
C, DC, Z |
|
|
CLRW |
Сброс регистра W 00 → (w) |
1 |
Z |
|
|
IORLW k |
Логическое ИЛИ константы и W k OR (w) → (w) |
1 |
Z |
|
|
MOVLW k |
Пересылка константы в W k → (w) |
1 |
|
|
|
SUBLW k |
Вычитание W из константы k – (w) → (w) |
1 |
C, DC, Z |
|
|
XORLW k
|
Исключающее ИЛИ константы и W k XOR (w) → (w) |
1 |
Z |
|
|
Команды работы с битами |
|||||
BCF f, b |
Сброс бита b в регистре f 0 → (fb) |
1 |
|
1, 2 |
|
BSF f, b |
Установка бита b в регистре f 1 → (fb) |
1 |
|
1, 2 |
|
BTFSC f, b |
Пропустить команду, если бит b в f равен 0 (PC) + 1 → (PC) при (fb)=0 |
1(2) |
|
|
|
BTFSS f, b |
Пропустить команду, если бит b в f равен 1 (PC) + 1 → (PC) при (fb)=1 |
1(2) |
|
|
Таблица 2. Окончание
Мнемокод |
Описание команды |
Циклы |
Биты состояния |
Прим. |
|
Команды управления и структурирования программ |
|||||
CLRWDT |
Сброс сторожевого таймера WDT |
1 |
TO, PD |
|
|
NOP |
Холостая команда |
1 |
|
|
|
SLEEP |
Переход в режим SLEEP |
1 |
TO, PD |
|
|
GOTO addr |
Переход по адресу addr → (PC) |
2 |
|
|
|
CALL addr |
Вызов подпрограммы (PC) → (TOS) (SP) + 1 → (SP) addr → (PC) |
2 |
|
|
|
RETLW k
|
Возврат из подпрограммы с загрузкой константы в W k → (w) (SP) – 1 → (SP) (TOS) → (PC) |
2 |
|
|
|
RETURN |
Возврат из подпрограммы (SP) – 1 → (SP) (TOS) → (PC) |
2 |
|
|
|
RETFIE |
Возврат из подпрограммы прерывания и разрешение прерывания (SP) – 1 → (SP) (TOS) → (PC) GIE=1 |
2 |
GIE=1 |
|
Примечания:
Если модифицируется регистр ввода/вывода (например, MOVF PORTB, 1), то используется значение, считываемое с выводов. Например, если в выходной защелке порта, включённого на ввод, находится ‘1’, а внешнее устройство формирует на этом выводе ‘0’, то в этом разряде данных будет записан ‘0’.
Если операндом команды является регистр TMR0 (и, если допустимо, d=1), то предварительный делитель, если он подключён к TMR0, будет сброшен.
Если в результате выполнения команды изменяется счетчик команд или выполняется переход по проверке условия, то команда выполняется за два цикла. Второй цикл выполняется как NOP.