- •1 Лекція № 4. Система команд однокристальних 8-розрядних flash smos мікро контролерів.
- •Лекція 4. Система команд одно кристальних 8-розрядних flash smos мікроконтролерів
- •Команды управления и операций с константами
- •Примечания:
- •Побитное 'или1 константы и w
- •Sublw Вычесть w из константы
- •Subwf Вычесть w из f
- •Побитное 'исключающее или' константы и w
- •Побитное 'исключающее или' w и f
Примечания:
При выполнении операции "чтение - модификация - запись" с портом ввода/вывода исходные значения считываются с выводов порта, а не из выходных защелок. Например, если в выходной защелке было записана '1', а на соответствующем выходе низкий уровень сигнала, то обратно будет записано значение 'О'.
При выполнении записи в TMR0 (и d=1) предделитель TMR0 сбрасывается, если он подключен к модулю TMR0.
Если условие истинно или изменяется значение счетчика команд PC, то инструкция выполняется за два цикла. Во втором цикле выполняется команда NOP.
Подробное описание команд
ADDLW
Сложить константу с W
Синтаксис: Операнды: Операция: Измен, флаги: Код:
Описание:
Слов:
Циклов:
Пример:
[label] ADDLW О < k < 255 (W) + k -»(W) С, DC, Z
11 |
lllx |
kkkk |
kkkk |
Содержимое регистра W складывается с 8-разрядной
константой 'к'. Результат сохраняется в регистре W.
1
1
ADDLW 0x15
До выполнения команды
W = 0x10 После выполнения команды
W = 0x25
ADDWF
С интаксис: Операнды:
Операция: Измен, флаги: Код:
Описание:
Слов:
Циклов:
Пример:
Сложение W и f
f,d
[label] ADDWF 0<f < 127
de [0,1]
(W) + (f) -»(dest)
C, DC, Z
00 |
0111 |
dfff |
ffff |
Сложить содержимое регистров W и Т. Если d=0,
результат сохраняется в регистре W. Если d=1, результат
сохраняется в регистре Т.
1
1
FSR.0
ADDWF
ANDLW
До выполнения команды W = 0x17 FSR = 0хС2
После выполнения команды W = 0xD9 FSR = 0xC2
Побитное 'И' константы и W
Синтаксис: Операнды: Операция: Измен, флаги: Код:
Описание:
Слов:
Циклов:
Пример:
[label] ANDLW
О < k < 255
(W) .AND. k -»(W)
Z
11 |
1001 |
kkkk |
kkkk |
Выполняется побитное 'И' содержимого регистра W и
8-разрядной константы 'к'. Результат сохраняется в
регистре W.
1
1
ANDLW 0x5F
До выполнения команды
W = 0xA3 После выполнения команды
W = 0x03
ANDWF
Побитное'И1 W и f
Описание:
Слов: Циклов: Пример:
Синтаксис: |
[label] ANDWF f,d |
|||
Операнды: |
0<f < 127 de [0,1] |
|||
Операция: |
(W) .AND. (f) -»(dest) |
|||
Измен, флаги: |
Z |
|||
Код: |
00 |
0101 |
dfff |
ffff |
|
Выполняется побитное 'И' содержимого регистров W и Т. |
|||
Описание: |
Если d=0, результат сохраняется в регистре W. Если d=1, |
|||
|
результат сохраняется в регистре Т. |
|||
Слов: |
1 |
|||
Циклов: |
1 |
|||
Пример: |
ANDWF FSR.1 |
|||
|
До выполнения команды |
|||
|
W = 0x17 |
|||
|
FSR = 0хС2 |
|||
|
После выполнения команды |
|||
|
W = 0x17 |
|||
|
FSR = 0x02 |
|||
BCF |
Очистить бит b в регистре f |
|||
Синтаксис: |
[label] BCF f,b |
|||
Операнды: |
0<f<127 0<b<7 |
|||
Операция: |
0 -»(f<b>) |
|||
Измен, флаги: |
Нет |
|||
Код: |
01 |
OObb |
bfff |
ffff |
Описание: |
Очистить бит 'b' в регистре Т. |
|||
Слов: |
1 |
|||
Циклов: |
1 |
|||
Пример: |
BCF FLAG_REG,7 |
|||
|
До выполнения команды |
|||
|
FLAG_REG = 0хС7 |
|||
|
После выполнения команды |
|||
|
FLAG_REG = 0x47 |
|||
BSF |
Установить бит b в регистре f |
|||
Синтаксис: |
[label] BSF f,b |
|||
Операнды: |
0<f<127 0<b<7 |
|||
Операция: |
1 -»(f<b>) |
|||
Измен, флаги: |
Нет |
|||
Код: |
01 |
Olbb |
bfff |
ffff |
Установить бит 'Ь' в регистре Т.
1
1
BSF FLAG_REG,7
До выполнения команды
FLAG_REG = ОхОА После выполнения команды
FLAG REG = 0x8A
BTFSC
Проверить бит b в регистре f, пропустить если О
Синтаксис: |
[label] BTFSC f,b |
|||
Операнды: |
0<f < 127 0<b<7 |
|||
Операция: |
пропустить если (f<b>) = 0 |
|||
Измен, флаги: |
Нет |
|||
Код: |
01 |
lObb |
bfff |
ffff |
Если бит 'b' в регистре f равен '1', то исполняется
следующая инструкция.
Описание:
Слов:
Циклов:
Пример:
Если бит 'Ь' в регистре f равен '0', то следующая
инструкция не выполняется, команда выполняется за два
цикла. Во втором цикле выполняется NOP.
1
1(2) |
|
|
HERE |
BTFSC |
FLAG.1 |
FALSE |
GOTO |
PROCESS_CODE |
TRUE |
|
|
До выполнения команды
PC = адрес HERE После выполнения команды
PC = адрес TRUE E^hFLAG<1> = 1, PC = адрес FALSE
BTFSS
С интаксис: Операнды:
Операция: Измен, флаги: Код:
Описание:
Слов:
Циклов:
Пример:
Проверить бит b в регистре f, пропустить если 1
[label] BTFSS f,b
0<f < 127
0<b<7
пропустить если (f<b>) = 1
Нет
01 |
llbb |
bfff |
ffff |
Если бит 'b' в регистре *f равен '0', то исполняется
следующая инструкция.
Если бит 'Ь' в регистре *f равен '1', то следующая
инструкция не выполняется, команда выполняется за два
цикла. Во втором цикле выполняется NOP.
1
FLAG.1 PROCESS CODE
1(2)
HERE BTFSS
FALSE GOTO
TRUE •
До выполнения команды
PC = адрес HERE После выполнения команды
EctimFLAG<1> = 0, PC = адрес FALSE EctimFLAG<1> = 1, PC = адрес TRUE
CALL
Вызов подпрограммы
Синтаксис: Операнды:
Операция:
Измен, флаги: Код:
Описание:
Слов:
Циклов:
Пример:
[label] CALL О < k < 2047 (PC) + 1 -»TOS,
(PCLATH<4:3>) Нет
10 |
Okkk |
kkkk |
Kkkk |
Вызов подпрограммы. Адрес следующей инструкции
(РС+1) помещается в вершину стека. Одиннадцать бит
адреса загружаются из кода команды в счетчик команд
РС<10:0>. Два старших бита загружаются в счетчик
команд РС<12:11> из регистра PCLATH. Команда CALL
выполняется за два цикла.
1
2
HERE CALL THERE
До выполнения команды
PC = адрес HERE После выполнения команды
PC = адрес THERE
TOS = адрес HERE + 1
CLRF
Очистить f
Синтаксис: Операнды:
Операция:
Измен, флаги:
Код:
Описание:
Слов:
Циклов:
Пример:
[label] CLRF 0<f < 127
OOh -»(f) 1 -^Z
z
00 |
0001 |
lfff |
ffff |
Очистить содержимое регистра Т и установить флаг Z
1
1
CLRF FLAG_REG
До выполнения команды
FLAG_REG = 0х5А После выполнения команды
FLAG_REG = 0x00
Z = 1
CLRW
Очистить W
Синтаксис:
Операнды:
Операция:
Измен,
флаги: Код:
Описание:
Слов:
Циклов:
Пример:
Синтаксис: |
[label] CLRW |
|
Операнды: |
Нет |
|
Операция: |
OOh -»(W) 1 -^Z |
|
Измен, флаги: |
Z |
|
Код: |
00 0001 |
Оххх хххх |
Описание: |
Очистить содержимое регистра |
W и установить флаг Z |
Слов: |
1 |
|
Циклов: |
1 |
|
Пример: |
CLRW |
|
|
До выполнения команды |
|
|
W = 0х5А |
|
|
После выполнения команды |
|
|
W = 0x00 |
|
|
Z = 1 |
|
CLRWDT |
Очистить WDT |
|
[label] CLRWDT
Нет
00h -»WDT,
00h —> предделитель WDT,
1 -^-TO
1 -^-PD
-TO, -PD
00 |
0000 |
0110 |
0100 |
Инструкция CLRWDT сбрасывает WDT и предделитель,
если он подключен к WDT. В регистре STATUS
устанавливает биты -ТО и -PD.
1
1
CLRWDT
До выполнения команды
Счетчик WDT = ? После выполнения команды
Счетчик WDT = 0
Предделитель WDT = 0
-ТО = 1
-PD = 1
COMF
Инвертировать f
Синтаксис: Операнды:
Операция: Измен, флаги: Код:
Описание:
Слов:
Циклов:
Пример:
f ,d
[label] COMF 0 < f <127
de [0,1] (-f) -»(dest)
Z
00 |
1101 |
dfff |
ffff |
Инвертировать все биты в регистре f. Если d=0,
результат сохраняется в регистре W. Если d=1, результат
сохраняется в регистре Т.
1
1
COMF REG1.0
До выполнения команды
REG1 =0x13 После выполнения команды
REG1 =0x13
W = ОхЕС
DECF
С интаксис: Операнды:
Операция: Измен, флаги: Код:
Описание:
Слов:
Циклов:
Пример:
Вычесть 1 из f
f,d
[label] DECF 0<f < 127 de [0,1] (f)-1->(dest)
Z
00 |
0011 |
dfff |
ffff |
Декрементировать содержимое регистра Т. Если d=0,
результат сохраняется в регистре W. Если d=1, результат
сохраняется в регистре Т.
1
1
DECF CNT.1
До выполнения команды
CNT = 0x01
Z = 0 После выполнения команды
CNT = 0x00
Z = 1
DECFSZ
С интаксис: Операнды:
Операция: Измен, флаги: Код:
Описание:
Вычесть 1 из f и пропустить если 0
[label] DECFSZ f,d
0<f < 127
de [0,1]
(f) -1 -> (dest); пропустить если результат равен 0
Нет
00 |
1011 |
dfff |
ffff |
Декрементировать содержимое регистра Т. Если d=0, результат сохраняется в регистре W. Если d=1, результат сохраняется в регистре Т.
Если результат не равен '0', то исполняется следующая инструкция. Если результат равен '0', то следующая инструкция не выполняется, команда выполняется за два цикла. Во втором цикле выполняется NOP.
Слов: |
1 |
|
|
Циклов: |
1(2) |
|
|
Пример: |
HERE |
DECFSZ |
CNT,1 |
|
|
GOTO |
LOOP |
|
CONTINUE |
• |
|
До выполнения команды
PC = адрес HERE
После выполнения команды CNT = CNT -1 Если CNT = 0, PC = адрес CONTINUE Если CNT ф 0, PC = адрес HERE + 1
GOTO
Безусловный переход
Синтаксис: Операнды:
Операция:
Измен, флаги: Код:
Описание:
Слов:
Циклов:
Пример:
[label] GOTO О < k < 2047
(PCLATH<4:3>) Нет
10 |
lkkk |
kkkk |
kkkk |
Выполнить безусловный переход. Одиннадцать бит
адреса загружаются из кода команды в счетчик команд
РС<10:0>. Два старших бита загружаются в счетчик
команд РС<12:11> из регистра PCLATH. Команда GOTO
выполняется за два цикла.
1
2
GOTO THERE
После выполнения команды
PC = адрес THERE
INCF
С интаксис: Операнды:
Операция: Измен, флаги: Код:
Описание:
Слов:
Циклов:
Пример:
Прибавить 1 к f
f,d
[label] INCF 0<f < 127
de [0,1]
(f) + 1 -»(dest)
Z
00 |
1010 |
dfff |
ffff |
Инкрементировать содержимое регистра *f. Если d=0,
результат сохраняется в регистре W. Если d=1, результат
сохраняется в регистре Т.
1
1
INCF CNT.1
До выполнения команды
CNT = OxFF
Z = 0 После выполнения команды
CNT = 0x00
Z = 1
INCFSZ
С интаксис: Операнды:
Операция: Измен, флаги: Код:
Описание:
Прибавить 1 к f и пропустить если О
[label] INCFSZ f,d
0<f < 127
de [0,1]
(f) + 1 -> (dest); пропустить если результат равен О
Нет
00 |
1111 |
dfff |
ffff |
Инкрементировать содержимое регистра Т. Если d=0, результат сохраняется в регистре W. Если d=1, результат сохраняется в регистре Т.
Если результат не равен '0', то исполняется следующая инструкция. Если результат равен '0', то следующая инструкция не выполняется, команда выполняется за два цикла. Во втором цикле выполняется NOP.
Слов: |
1 |
|
|
Циклов: |
1(2) |
|
|
Пример: |
HERE |
INCFSZ |
CNT,1 |
|
|
GOTO |
LOOP |
|
CONTINUE • |
|
|
|
До выполнения команды |
|
|
|
|
PC = адрес |
HERE |
После выполнения команды CNT = CNT -1 Если CNT = О, PC = адрес CONTINUE Если CNT ф О, PC = адрес HERE + 1
IORLW