- •ВВЕДЕНИЕ
- •Библиографический список
- •Приложение 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
Операция k ® (W )
Измен. флаги
Описание Выполняется пересылка константы k в регистр W.
Пример ; w = 3 movlw 4 ; w = 4
MOVWF – Пересылка из регистра W в регистр f
Синтаксис |
MOVWF f |
Операнды |
f | 0 £ f £127 |
Операция |
(W ) ® ( f ) |
Измен. |
|
флаги |
|
Описание |
Выполняется пересылка содержимого регистра W в регистр f. |
Пример |
; w = 4, f(2) = 12 |
|
movwf 2 |
|
; f(2) = 4, w = 4 |
NOP – Простой
Синтаксис NOP Операнды Операция
Измен. флаги
Описание В течение одного машинного цикла не выполняется никаких операций
Пример nop
RETFIE – Возврат из подпрограммы с включением прерываний
Синтаксис RETFIE Операнды
Операция (TOS ) ® (PC); 1 ® GIE
RETLW – Выход из подпрограммы с загрузкой в регистр W константы k
Синтаксис |
RETLW k |
||||
Операнды |
k | 0 £ k £ 255 |
||||
Операция |
k ® (W ); |
||||
Измен. |
(TOS) ® (PC) |
||||
|
|
|
|
|
|
флаги |
|
|
|
|
|
Описание |
В регистр W загружается константа k. В счетчик команд PC загружа- |
||||
|
ется значение с вершины стека. Команда выполняется за 2 машин- |
||||
|
ных цикла. |
||||
Пример |
; w = 6 |
||||
|
call subprogram |
||||
|
; w = 12 |
||||
|
... |
|
|
|
|
|
subprogram: |
||||
|
nop |
||||
|
retlw 12 |
||||
RETURN – Выход из подпрограммы |
|||||
Синтаксис |
RETURN |
||||
Операнды |
(TOS) ® (PC) |
||||
Операция |
|||||
Измен. |
|
|
|
|
|
флаги |
|
|
|
|
|
Описание |
В счетчик команд PC загружается значение с вершины стека. Коман- |
||||
|
да выполняется за 2 машинных цикла. |
||||
Пример |
; w = 6 |
||||
|
call subprogram |
||||
|
; w = 8 |
||||
|
... |
|
|
|
|
|
subprogram: |
||||
|
addlw 2 |
||||
|
return |
||||
RLF – Циклический сдвиг регистра f влево через флаг переноса С |
|||||
Синтаксис |
RLF f,d |
||||
Операнды |
f , d | 0 £ f £127 и d Î[0,1] |
||||
Операция |
( f 7 ) ® C; |
||||
|
( f 0 : 6 ) ® ( f 1: 7 ) |
|
|
d =1 |
|
|
|
||||
|
C ® ( f 0 ) |
|
|
||
|
|
|
|
|
|
|
( f 0 : 6 ) ® (W 1: 7 ) |
|
d = 0 |
||
|
|
||||
|
C ® (W 0 ) |
|
|||
|
|
|
|||
Измен. |
C |
||||
флаги |
Выполняется циклический сдвиг содержимого регистра f влево через |
||||
Описание |
|||||
|
флаг переноса. 0-й бит встает на место 1-го, 1-й на место 2-го и т. д. |
||||
|
96 |
7-й бит записывается в флаг переноса С, а затем из флага С в 0-й. В зависимости от операнда d результат операции записывается либо в регистре f, либо в регистре W.
Пример ; w = 12, f(4) = 135 = 0b10000111, c = 0 rlf 4,1
;w = 12, f(4) = 16 = 0b00001111, c = 1 rlf 4,0
;w = 30 = 0b00011110, f(4) = 16, c = 0
RRF – Циклический сдвиг регистра f вправо через флаг переноса С
Синтаксис
Операнды
Операция
RLF f,d
f , d | 0 £ f £127 и d Î[0,1] ( f 0) ® C;
( f 1: 7) ® ( f 0 : 6)
d =1
C ® ( f 7)
( f 1: 7) ® (W 0 : 6)
d = 0
C ® (W 7)
Измен. |
C |
флаги |
Выполняется циклический сдвиг содержимого регистра f вправо че- |
Описание |
|
|
рез флаг переноса. 7-й бит встает на место 6-го, 6-й на место 5-го и |
|
т.д. 0-й бит записывается в флаг переноса С, а затем из флага С в 7-й. |
|
В зависимости от операнда d результат операции записывается либо |
|
в регистре f, либо в регистре W. |
Пример |
; w = 12, f(4) = 7 = 0b00000111, c = 0 |
|
rrf 4,1 |
|
; w = 12, f(4) = 83 = 0b10000011, c = 1 |
|
rrf 4,0 |
|
; w = 193 = 0b11000001, f(4) = 83, c = 1 |
SLEEP – Перейти в спящий режим
Синтаксис |
SLEEP |
|||||||||
Операнды |
0 |
® (WDT ); |
||||||||
Операция |
||||||||||
|
0 |
® (Предделитель WDT ); |
||||||||
|
1 ® |
|
|
; |
|
|
|
|
|
|
|
TO |
|||||||||
|
0 |
® |
|
; |
|
|
|
|
||
Измен. |
PD |
|||||||||
|
|
|
|
|
|
|
|
|
|
|
флаги |
|
|
|
|
|
|
|
|
|
|
Описание |
Команда сбрасывает флаг таймаута |
|
и устанавливает флаг спя- |
|||||||
TO |
||||||||||
|
щего режима |
PD |
. Затем очищается регистр-счтчик сторожевого |
|||||||
|
таймера WDT и его предделитель, если он настроен. После этого |
микроконтроллер переводится в спящий режим, тактовый генератор отключается.
97
Пример sleep
SUBLW – Вычитение W из константы k
Синтаксис |
SUBLW k |
Операнды |
k | 0 £ k £ 255 |
Операция |
k - (W ) ® (W ) |
Измен. |
C, DC, Z |
флаги |
Выполняется вычитание регистра W из 8-битной константы k. Ре- |
Описание |
|
|
зультат помещается в регистр W. |
Пример |
; w = 3 |
|
sublw 5 |
|
; w = 2 |
SUBWF – Вычитание W из регистра f
Синтаксис |
SUBWF f, d |
Операнды |
f , d | 0 £ f £127 и d Î[0,1] |
Операция |
( f ) - (W ) ® (W ) | d = 0 |
|
( f ) - (W ) ® ( f ) | d =1 |
Измен. |
C, DC, Z |
флаги |
|
Описание |
Выполняется вычитание регистра W из регистра f. Результат поме- |
|
щается в регистр W, при d=0, или в f при d=1. |
Пример |
; w = 4, f(3) = 6 |
|
subwf 3,0 |
|
; w = 2 |
SWAPF – Обмен местами ниблов в регистре f
Синтаксис |
SWAPF f, d |
||||
Операнды |
f , d | 0 £ f £127 и d Î[0,1] |
||||
Операция |
( f 4 : 7 ) ® (W 0 : 3 ) |
|
d = 0 |
||
|
|||||
|
( f 0 : 3 ) ® (W 4 : 7 ) |
|
|||
|
|
|
|||
|
( f 4 : 7 ) ® ( f 0 : 3 ) |
|
|
||
|
|
||||
|
( f 0 : 3 ) ® ( f 4 : 7 ) |
|
|
d =1 |
|
|
|
|
|||
Измен. |
|
|
|
|
|
флаги |
|
|
|
|
|
Описание |
Выполняется обмен местами ниблов (четырехбитий) регистра f. Ре- |
||||
|
зультат помещается в регистр W, при d=0, или в f при d=1. |
||||
Пример |
; f(3) = 15 = 0b00001111 |
||||
|
swapf 3,1 |
||||
|
; f(3) = 240 = 0b11110000 |
XORLW – Побитное «Исключающее ИЛИ» W и константы k
Синтаксис |
XORLW k |
Операнды |
k | 0 £ k £ 255 |
98