
- •ВВЕДЕНИЕ
- •Библиографический список
- •Приложение 1. Схема лабораторного макета
- •Приложение 2. Краткое описание набора инструкций PIC16
- •ADDLW – Сложение рабочего регистра W и константы k
- •ADDWF – Сложение рабочего регистра W и регистра f
- •ANDLW – Побитное «И» рабочего регистра W и константы k
- •ANDWF – Побитное «И» рабочего регистра W и регистра f
- •BCF – Очистка бита b регистра f
- •BSF – Установка бита b регистра f в единицу
- •BТFSC – Условный переход при нулевом бите b регистра f
- •BТFSS – Условный переход при единичном бите b регистра f
- •CALL – Вызов подпрограммы
- •CLRF – Обнуление регистра f
- •CLRW – Обнуление рабочего регистра W
- •CLRWDT – Сброс сторожевого таймера
- •COMF – Инверсия регистра f
- •DECF – Декремент регистра f
- •DECFSZ – Декремент регистра f и пропуск в случае нулевого результата
- •GOTO – Переход по адресу
- •INCF – Декремент регистра f
- •INCFSZ – Декремент регистра f и пропуск в случае нулевого результата
- •IORLW – Побитное «ИЛИ» W и константы k
- •IORWF – Побитное «ИЛИ» W и регистра f
- •MOVF – Пересылка регистра f
- •MOVLW – Пересылка константы k
- •MOVWF – Пересылка из регистра W в регистр f
- •NOP – Простой
- •RETFIE – Возврат из подпрограммы с включением прерываний
- •RETLW – Выход из подпрограммы с загрузкой в регистр W константы k
- •RETURN – Выход из подпрограммы
- •RLF – Циклический сдвиг регистра f влево через флаг переноса С
- •RRF – Циклический сдвиг регистра f вправо через флаг переноса С
- •SLEEP – Перейти в спящий режим
- •SUBLW – Вычитение W из константы k
- •SUBWF – Вычитание W из регистра f
- •SWAPF – Обмен местами ниблов в регистре f
- •XORLW – Побитное «Исключающее ИЛИ» W и константы k
- •XORWF – Побитное «Исключающее ИЛИ» W и регистра f

Приложение 2. Краткое описание набора инструкций PIC16
Мнемокод |
Описание |
Циклов |
Изменяемые |
|||
команды |
флаги |
|||||
|
|
|
||||
|
|
Команды пересылки |
|
|
|
|
MOVF |
f,d |
Переслать f * |
1 |
|
Z |
|
MOVWF f |
Переслать W в f |
1 |
|
- |
||
MOVLW k |
Переслать константу в W |
1 |
|
- |
||
SWAPF |
f,d |
Обмен полубайтов в f * |
1 |
|
- |
|
|
|
Арифметические команды |
|
|
|
|
ADDWF |
f,d |
Сложение W и f * |
1 |
|
C,CD,Z |
|
ADDLW |
k |
Сложить константу с W |
1 |
|
C,CD,Z |
|
SUBWF |
f,d |
Вычесть W из f * |
1 |
|
C,CD,Z |
|
SUBLW |
k |
Вычесть W из константы |
1 |
|
C,CD,Z |
|
INCF |
f,d |
Прибавить 1 к f * |
1 |
|
Z |
|
INCFSZ |
f,d |
Прибавить 1 к f и пропустить если 0 * |
1(2) |
** |
- |
|
DECF |
f,d |
Вычесть 1 из f * |
1 |
|
Z |
|
DECFSZ f,d |
Вычесть 1 из f и пропустить если 0 * |
1(2) |
** |
- |
||
|
|
Логические команды |
|
|
|
|
ANDWF |
f,d |
Побитное "И" W и f * |
1 |
|
Z |
|
ANDLW |
k |
Побитное "И" константы и W |
1 |
|
Z |
|
IORWF |
f,d |
Побитное "ИЛИ" W и f * |
1 |
|
Z |
|
IORLW |
k |
Побитное "ИЛИ" константы и W |
1 |
|
Z |
|
XORWF |
f,d |
Побитное "Исключающее ИЛИ" W и f * |
1 |
|
Z |
|
XORLW |
k |
Побитное "Исключающее ИЛИ" константы и W |
1 |
|
Z |
|
COMF |
f,d |
Инвертировать f * |
1 |
|
Z |
|
CLRF |
f |
Очистить f |
1 |
|
Z |
|
CLRW |
f |
Очистить W |
1 |
|
Z |
|
CLRWDT |
Очистить WDT |
1 |
|
-TO,-PD |
||
RLF |
f,d |
Циклический сдвиг f влево через перенос * |
1 |
|
C |
|
RRF |
f,d |
Циклический сдвиг f вправо через перенос * |
1 |
|
C |
|
|
|
Битовые операции |
|
|
|
|
BCF |
f,b |
Сбросить бит b в регистре f |
1 |
|
- |
|
BSF |
f,b |
Установить бит b в регистре f |
1 |
|
- |
|
BTFSC |
f,b |
Проверить бит b в регистре f и пропустить если 0 |
1(2) |
** |
- |
|
BTFSS |
f,b |
Проверить бит b в регистре f и пропустить если 1 |
1(2) |
** |
- |
|
|
|
Команды передачи управления |
|
|
|
|
GOTO |
k |
Безусловный переход |
2 |
|
- |
|
CALL |
k |
Вызов подпрограммы |
2 |
|
- |
|
RETURN |
Возврат из подпрограммы |
2 |
|
- |
||
RETLW |
k |
Возврат из подпрограммы с загрузкой константы в W |
2 |
|
- |
|
RETFIE |
|
Возврат из подпрограммы и разрешение прерывания |
2 |
|
- |
|
SLEEP |
|
Переход в спящий режим |
1 |
|
-TO,-PD |
|
NOP |
|
Нет операции |
1 |
|
- |
*Если d=0, то результат сохраняется в рабочем регистре W, если d=1, - то в регистре общего назначения f.
**Если условие не выполняется, то команда выполняется за 1 цикл, если условие выполняется, то за 2 цикла.
87

Приложение 3. Список команд PIC16 и их подробное описание
В описании команд используются следующие условные обозначения:
( X ) |
|
– регистр X. |
( X |
y ) |
– бит y регистра X. |
( X |
y : z ) |
– биты с y по z регистра X. |
операция| условие |
– операция выполняется лишь тогда, когда усло- |
вие верно.
Строчные латинские буквы операндов в графе «синтаксис», обычно обозначают следующее:
f – номер регистра в регистровом файле; d – указатель направления;
k – константа-литерал;
b – номер бита в регистре.
ADDLW – Сложение рабочего регистра W и константы k
Синтаксис |
ADDLW k |
Операнды |
k | 0 £ k £ 255 |
Операция |
(W ) + k ® (W ) |
Измен. |
C, DC, Z |
флаги |
|
Описание |
Содержимое регистра W складывается с константой k. Результат по- |
|
мещается в регистр W. |
Пример |
; w = 10 |
|
addlw 12 |
|
; w = 22 |
|
addlw 342 ; ошибка, константа k больше 255 |
ADDWF – Сложение рабочего регистра W и регистра f |
|
Синтаксис |
ADDWF f, d |
Операнды |
f , d | 0 £ f £127 и d Î[0,1] |
Операция |
(W ) + ( f ) ® (W ) | d = 0 |
|
(W ) + ( f ) ® ( f ) | d =1 |
Измен. C, DC, Z
флаги
Описание Содержимое регистра W складывается c содержимым регистра f. Результат помещается в регистр W, при d = 0, или в f при d=1.
Пример ; w = 10 f(11)=14 addwf 11,1
;w = 10, f(11)=24 addwf 11,0
;w = 34, f(11)=24
ANDLW – Побитное «И» рабочего регистра W и константы k
Синтаксис ANDLW k
88

Операнды |
k | 0 £ k £ 255 |
Операция |
(W ) Ù k ® (W ) |
Измен. |
C, DC, Z |
флаги |
|
Описание |
Выполняется побитное «И» регистра W и 8-битной константы k. Ре- |
|
зультат помещается в регистр W. |
Пример |
; w = 3 |
|
addlw 2 |
|
; w = 1 |
ANDWF – Побитное «И» рабочего регистра W и регистра f
Синтаксис |
ANDWF f, d |
Операнды |
f , d | 0 £ f £127 и d Î[0,1] |
Операция |
(W ) Ù ( f ) ® (W ) | d = 0 |
|
(W ) Ù ( f ) ® ( f ) | d =1 |
Измен. |
C, DC, Z |
флаги |
|
Описание |
Выполняется побитное «И» регистра W c содержимым регистра f. |
|
Результат помещается в регистр W, при d=0, или в f при d=1. |
Пример |
; w = 7 = 0b111, f(4)= 3 = 0b 11 |
|
andwf 4,0 |
|
; w = 3, f(4)=3 |
BCF – Очистка бита b регистра f
Синтаксис |
BCF f,b |
|
|
Операнды |
f ,b | 0 £ f £127 и 0 £ b £ 7 |
||
Операция |
0 ® ( f |
b ) |
|
Измен. |
|
|
|
флаги |
|
|
|
Описание |
Бит b регистра f устанавливается в 0. |
||
Пример |
; f(4) |
= 7 |
= 0b111 |
|
bcf 4,1 |
= 0b101 |
|
|
; f(4) |
= 5 |
BSF – Установка бита b регистра f в единицу
Синтаксис |
BCF f,b |
|
Операнды |
f ,b | 0 £ f £127 и 0 £ b £ 7 |
|
Операция 1 ® ( f b ) |
||
Измен. |
|
|
флаги |
|
|
Описание |
Бит b регистра f устанавливается в 1. |
|
Пример |
; f(4) |
= 5 = 0b101 |
|
bsf 4,1 |
= 5 = 0b111 |
|
; f(4) |
BТFSC – Условный переход при нулевом бите b регистра f
Синтаксис BTFSC f,b
89

Операнды
Операция
Измен. флаги Описание
Пример
f ,b | 0 £ f £127 и 0 £ b £ 7
(PC) +1 ® (PC) | f b
= 0
Если бит b регистра f устанавлен в 0, инкрементируется счетчик команд PC (тем самым пропускается следующая команда), в противном случае ничего не выполняется. В случае инкремента счетчика команда выполняется за 2 машинных цикла, иначе – за 1.
;f(7) = 6 = 0b110, w = 1 btfsc 7,1
addlw 4 btfsc 7,0 addlw 9
;w = 10
BТFSS – Условный переход при единичном бите b регистра f
Синтаксис |
BTFSS f,b |
|
|
Операнды |
f ,b | 0 £ f £127 и 0 £ b £ 7 |
||
Операция |
(PC) +1 ® (PC) | f |
b =1 |
|
Измен. |
|
|
|
флаги |
|
|
|
Описание |
Если бит b регистра f |
устанавлен в 1, инкрементируется счетчик ко- |
|
|
манд PC (тем самым, пропускается следующая команда), в против- |
||
|
ном случае ничего не выпоняется. В случае инкремента счетчика ко- |
||
|
манда выполняется за 2 машинных цикла, иначе – за 1. |
||
Пример |
; f(7) = 6 = 0b110, w = 1 |
||
|
btfss |
7,1 |
|
|
addlw |
4 |
|
|
btfss |
7,0 |
|
|
addlw |
9 |
|
|
; w = |
5 |
|
CALL – Вызов подпрограммы
Синтаксис |
CALL k |
Операнды |
k | 0 £ k £ 2047 |
Операция |
(PC) +1 ®TOS; |
|
k ® (PC 10 : 0 ); |
|
(PCLATH 4 : 3 ) ® (PC 12 :11 ) |
Измен. |
|
флаги |
|
Описание |
Адрес следующей инструкции сохраняется в стеке. В 11 младших |
|
бит счетчика программы PC загружается константа k. Два старших |
|
бита загружаются в счетчик команд PC 12 :11 из регистра |
|
PCLATH. Выполнение команды занимает 2 машинных цикла. |
Пример |
; w = 0 |
|
call subprogram |
|
addlw 5 |
90