Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Справочник по среднему семейству микроконтроллеров PICmicro

.pdf
Скачиваний:
238
Добавлен:
01.05.2014
Размер:
13.35 Mб
Скачать

ООО "Микро-Чип" - поставка комплектующих Microchip тел.: (095) 737-7545

Раздел 29. Система команд

Содержание

29.1

Введение ....................................................................................................................................................

29-2

29.2

Формат команд...........................................................................................................................................

29-4

29.3

Обращение к регистрам специального назначения ...............................................................................

29-5

29.3.1 STATUS как регистр назначения при выполнении команды.........................................................

29-5

29.3.2 PCL как источник данных и регистр назначения при выполнении команды..............................

29-5

29.3.3 Битовые операции .............................................................................................................................

29-5

29.4

Такты выполнения команд........................................................................................................................

29-6

29.5

Описание команд.......................................................................................................................................

29-7

29.6

Ответы на часто задаваемые вопросы .................................................................................................

29-44

29.7

Дополнительная литература ..................................................................................................................

29-46

29

WWW.MICROCHIP.RU – поставки и техподдержка на русском языке

29-1

Раздел 29. Система команд

DS33023A

 

 

29.1 Введение

Каждая команда состоит из одного 14 - разрядного слова, разделенного на код операции (OPCODE), определяющий тип команды и один или несколько операндов, определяющие операцию команды. Полный список команд смотрите в таблице 29-1.

Система команд аккумуляторного типа, ортогональна и разделена на три основных группы:

Байт ориентированные команды;

Бит ориентированные команды;

Команды управления и операций с константами. Описание полей кода операции смотрите в таблице 29-2.

Для байт ориентированных команд 'f' является указателем регистра, а 'd' указателем адресата результата.

Указатель регистра определяет, какой регистр должен использоваться в команде. Указатель адресата определяет, где будет сохранен результат. Если 'd'=0, результат сохраняется в регистре W. Если 'd'=1, результат сохраняется в регистре, который используется в команде.

Вбит ориентированных командах 'b' определяет номер бита участвующего в операции, а 'f' - указатель регистра, который содержит этот бит.

Вкомандах управления или операциях с константами 'k' представляет восемь или одиннадцать бит константы или значения литералов.

Все команды выполняются за один машинный цикл, кроме команд условия, в которых получен истинный результат и инструкций изменяющих значение счетчика команд PC. В случае выполнения команды за два машинных цикла, во втором цикле выполняется инструкция NOP. Один машинный цикл состоит из четырех тактов генератора. Для тактового генератора с частотой 4 МГц все команды выполняются за 1мкс, если условие истинно или изменяется счетчик команд PC, команда выполняется за 2мкс.

29-2

WWW.MICROCHIP.RU – поставки и техподдержка на русском языке

ООО "Микро-Чип" - поставка комплектующих Microchip тел.: (095) 737-7545

Таблица 29-1 Список команд микроконтроллеров среднего семейства

Мнемоника

 

 

 

Описание

 

 

Циклов

14-разрядный код

Изм.

Прим.

команды

 

 

 

 

 

Бит 13

 

Бит 0

флаги

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Байт ориентированные команды

 

 

 

 

ADDWF

f,d

Сложение W и f

 

 

 

 

 

1

00 0111

dfff ffff

C,DC,Z

1,2

ANDWF

f,d

Побитное 'И' W и f

 

 

 

 

1

00 0101

dfff ffff

Z

1,2

CLRF

f

Очистить f

 

 

 

 

 

 

1

00 0001

1fff ffff

Z

2

CLRW

-

Очистить W

 

 

 

 

 

 

1

00 0001

0xxx xxxx

Z

 

COMF

f,d

Инвертировать f

 

 

 

 

 

1

00 1001

dfff ffff

Z

1,2

DECF

f,d

Вычесть 1 из f

 

 

 

 

 

1

00 0011

dfff ffff

Z

1,2

DECFSZ

f,d

Вычесть 1 из f и пропустить если 0

 

1(2)

00 1011

dfff ffff

 

1,2,3

INCF

f,d

Прибавить 1 к f

 

 

 

 

 

1

00 1010

dfff ffff

Z

1,2

INCFSZ

f,d

Прибавить 1 к f и пропустить если 0

1(2)

00 1111

dfff ffff

 

1,2,3

IORWF

f,d

Побитное 'ИЛИ' W и f

 

 

 

1

00 0100

dfff ffff

Z

1,2

MOVF

f,d

Переслать f

 

 

 

 

 

 

1

00 1000

dfff ffff

Z

1,2

MOVWF

f

Переслать W в f

 

 

 

 

 

1

00 0000

1fff ffff

 

 

NOP

-

Нет операции

 

 

 

 

 

1

00 0000

0xx0 0000

 

 

RLF

f,d

Циклический сдвиг f влево через перенос

1

00 1101

dfff ffff

C

1,2

RRF

f,d

Циклический сдвиг f вправо через перенос

1

00 1100

dfff ffff

C

1,2

SUBWF

f,d

Вычесть W из f

 

 

 

 

 

1

00 0010

dfff ffff

C,DC,Z

1,2

SWAPF

f,d

Поменять местами полубайты в регистре f

1

00 1110

dfff ffff

 

1,2

XORWF

f,d

Побитное 'исключающее ИЛИ' W и f

1

00 0110

dfff ffff

Z

1,2

 

 

 

 

 

 

 

Бит ориентированные

команды

 

 

 

 

 

BCF

f,b

Очистить бит b в регистре f

 

 

1

01 00bb bfff ffff

 

1,2

BSF

f,b

Установить бит b в регистре f

 

 

1

01 01bb bfff ffff

 

1,2

BTFSC

f,b

Проверить

бит

b

в

регистре

f,

пропустить

1(2)

01 10bb bfff ffff

 

3

если 0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BTFSS

f,b

Проверить

бит

b

в

регистре

f,

пропустить

1(2)

01 11bb bfff ffff

 

3

если 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Команды управления и операций с константами

 

 

 

 

ADDLW

k

Сложить константу с W

 

 

1

11 111x

kkkk kkkk

C,DC,Z

 

ANDLW

k

Побитное 'И' константы и W

 

 

1

11 1001

kkkk kkkk

Z

 

CALL

k

Вызов подпрограммы

 

 

 

2

10 0kkk kkkk kkkk

 

 

CLRWDT

-

Очистить WDT

 

 

 

 

 

1

00 0000

0110 0100

-TO,-PD

 

GOTO

k

Безусловный переход

 

 

 

2

10 1kkk kkkk kkkk

 

 

IORLW

k

Побитное 'ИЛИ' константы и W

 

 

1

11 1000

kkkk kkkk

Z

 

MOVLW

k

Переслать константу в W

 

 

1

11 00xx kkkk kkkk

 

 

RETFIE

-

Возврат

из

подпрограммы с

разрешением

2

00 0000

0000 1001

 

 

прерываний

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

RETLW

k

Возврат

из подпрограммы

с

загрузкой

2

11 01xx kkkk kkkk

 

 

константы в W

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

RETURN

-

Возврат из подпрограммы

 

 

2

00 0000

0000 1000

 

 

SLEEP

-

Перейти в режим SLEEP

 

 

1

00 0000

0110 0011

-TO,-PD

 

SUBLW

k

Вычесть W из константы

 

 

1

11 110x

kkkk kkkk

C,DC,Z

 

XORLW

k

Побитное 'исключающее ИЛИ' константы и W

1

11 1010

kkkk kkkk

Z

 

Примечания:

1. При выполнении операции "чтение - модификация - запись" с портом ввода/вывода (например MOVF PORTB,1) исходные значения считываются с выводов порта, а не из выходных защелок. Например, если в выходной защелке было записана '1', а на соответствующем выходе низкий уровень сигнала, то обратно будет записано значение '0'.

2.При выполнении записи в TMR0 (и d=1) предделитель TMR0 сбрасывается, если он подключен к модулю TMR0.

3.Если условие истинно или изменяется значение счетчика команд PC, то инструкция выполняется за два цикла. Во втором цикле выполняется команда NOP.

29

WWW.MICROCHIP.RU – поставки и техподдержка на русском языке

29-3

Раздел 29. Система команд

DS33023A

 

 

29.2 Формат команд

На рисунке 29-1 показано формат трех групп команд. Код команды может быть от 3 до 6 бит, что позволяет реализовать 35 команд.

Примечание 1. Любой не реализованный код операции сохранен для последующих разработок. Использование недокументированного кода операции может привести к непредсказуемым последствиям.

Примечание 2. Для совместимости программного обеспечения со следующими версиями микроконтроллеров PICmicro не используйте команды TRIS и OPTION.

Во всех примерах используется следующий формат шестнадцатеричных чисел: 0xhh, где h - шестнадцатеричная цифра.

Представление двоичного числа:

00000100b, где b - указатель двоичного числа.

Рис. 29-1 Общий формат команд микроконтроллеров среднего семейства

 

Байт ориентированные операции с регистрами

 

 

 

 

 

 

 

 

 

 

 

 

13

 

 

 

8

7

6

0

 

d = 0 - результат сохраняется в w

 

 

 

 

 

 

 

 

 

 

 

d = 1 - результат сохраняется в f

 

 

 

OPCODE

 

 

d

f (№ в файле)

 

 

 

 

 

 

 

 

 

 

 

 

 

f - 7-разрядный адрес регистра

 

 

Бит ориентированные операции с регистрами

 

 

 

13

 

 

10

9

7

6

0

 

b - 3-разрядный номер бита в регистре

 

 

 

 

f - 7-разрядный адрес регистра

 

 

 

OPCODE

 

 

 

b

f (№ в файле)

 

 

 

 

 

 

 

 

 

 

 

 

 

Команды управления и операций с константами

 

 

 

Общее

 

 

 

 

 

 

 

 

 

13

 

 

 

8

7

 

0

 

k - 8-разрядное значение

 

 

 

OPCODE

 

 

 

k (константа)

 

 

 

 

 

 

 

 

 

 

 

 

 

Только для инструкций CALL и GOTO

 

 

 

 

13

11

 

10

 

 

 

 

0

 

k - 11-разрядное значение

 

 

OPCODE

 

 

 

 

k (константа)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

29-4

WWW.MICROCHIP.RU – поставки и техподдержка на русском языке

 

 

ООО "Микро-Чип" - поставка комплектующих Microchip тел.: (095) 737-7545

 

 

 

 

 

 

Таблица 29-2 Описание полей кода операции

 

Поле

Описание

 

f Адрес регистра (от 0x00 до 0x7F)

w Рабочий регистр (аккумулятор)

b Номер бита в 8-разрядном регистре

kКонстанта (данные или метка)

x Не имеет значения (0 или 1). Ассемблер генерирует x=0 для совместимости программы микроконтроллера с инструментальными средствами

dУказатель адресата результата операции: d = 0 - результат сохраняется в регистре w d = 1 - результат сохраняется в регистре f По умолчанию d = 1

label

Имя метки

TOS

Вершина стека

PC

Счетчик команд

PCLATH

Буфер старшего байта счетчика команд

GIE

Бит глобального разрешения прерываний

WDT

Сторожевой таймер

-TO

Флаг переполнения WDT

-PD

Флаг сброса по включению питания

dest

Приемник, регистр w или регистр памяти

[ ]

Дополнительные параметры

( )

Содержимое

Присвоение

<> Битовое поле

Из набора

Курсив Термин, определяемый пользователем

29.3 Обращение к регистрам специального назначения

Система команд микроконтроллеров PICmicro среднего семейства позволяет напрямую обращаться ко всем регистрам, включая регистры общего назначения. Существуют нюансы обращения к некоторым регистрам, которые должен учитывать разработчик программного обеспечения.

29.3.1 STATUS как регистр назначения при выполнении команды

Если обращение к регистру STATUS выполняется командой, которая воздействует на флаги Z, DC и C, то изменение этих трех битов командой заблокирована. Эти биты сбрасываются или устанавливаются согласно логике ядра микроконтроллера. Команды изменения регистра STATUS также не воздействуют на биты -TO и -PD. Поэтому результат выполнения команды с регистром STATUS может отличаться от ожидаемого. Например, команда CLRF STATUS сбросит три старших бита и установит бит Z (состояние регистра STATUS после выполнения команды 000uu1uu, где u - не изменяемый бит).

29.3.2 PCL как источник данных и регистр назначения при выполнении команды

Команды чтения, записи и "чтение - модификация - запись" регистра PCL могут иметь следующие результаты:

Чтение PCL: Запись PCL:

"Чтение - модификация - запись":

PCL → dest; PCLATH не изменяется.

PCLATH →

PCH;

 

8

- разрядное значение →

PCL.

PCL → операнд АЛУ;

 

PCLATH →

PCH;

 

8

- разрядный результат →

PCL.

Где PCH - старший байт счетчика команд (не адресуемый регистр), PCLATH - буфер старшего байта счетчика команд, dest - регистр назначения.

29.3.3 Битовые операции

29

При изменении любого бита регистра сначала регистр полностью читается из памяти данных, изменяется бит,

 

обратно данные записываются в регистр ("чтение - модификация - запись"). Необходимо учитывать этот факт при

 

обращении к некоторым регистрам специального назначения (например, регистры портов).

 

Примечание. Изменение состояния управляющих битов (включая флаги прерываний) выполняется в такте Q1, поэтому не возникает проблем при обращении командой "чтение - модификация - запись" к регистрам, содержащим эти биты.

WWW.MICROCHIP.RU – поставки и техподдержка на русском языке

29-5

Раздел 29. Система команд

DS33023A

 

 

29.4 Такты выполнения команд

Каждый цикл команды (TCY) состоит из четырех тактов (Q1-Q4). Такт Q равен по длительности периоду тактового генератора (TOSC). Такты Q обеспечивают жесткую синхронизацию декодирования, чтения данных, обработки данных, записи результата для каждого цикла команды. На диаграмме показано соотношение тактов Q к циклу команды.

Цикл команды (TCY), состоящий из 4-х тактов, обобщенно выглядит следующим образом: Q1: Детектирование команды или принудительной пустой операции (NOP) Q2: Операция чтения данных или отсутствие операции

Q3: Обработка данных

Q4: Операция записи данных или отсутствие операции Детальный состав операций команды по тактам Q смотрите в описании команды.

Рис. 29-2 Временная диаграмма циклического повторения тактов Q

29-6

WWW.MICROCHIP.RU – поставки и техподдержка на русском языке

ООО "Микро-Чип" - поставка комплектующих Microchip тел.: (095) 737-7545

29.5 Описание команд

ADDLW Сложить константу с W

Синтаксис:

[label]

ADDLW

k

 

 

Операнды:

0 ≤ k ≤ 255

 

 

 

 

Операция:

(W) + k →

(W)

 

 

 

 

Измен. флаги:

C, DC, Z

 

 

 

 

 

Код:

11

 

111x

 

kkkk

kkkk

Описание:

Содержимое

регистра W складывается с 8 - разрядной

константой 'k'. Результат сохраняется в регистре W.

 

Слов:

1

 

 

 

 

 

Циклов:

1

 

 

 

 

 

Выполнение

 

 

 

 

 

 

команды по тактам

Q1

 

Q2

 

Q3

Q4

 

 

 

 

Декодирование

Чтение

 

Выполнение

Запись в

 

команды

 

константы 'k'

регистр W

 

 

 

Пример 1:

ADDLW

 

0x15

 

 

 

 

До выполнения команды

 

 

 

 

 

 

W = 0x10

 

 

 

После выполнения команды

W = 0x25

Пример 2:

ADDLW

MYREG

 

До выполнения команды

 

 

W = 0x10

 

 

MYREG = 0x37 (адрес регистра)

 

После выполнения команды

 

 

W = 0x47

Пример 3:

ADDLW

HIGH (LU_TABLE)

 

До выполнения команды

W = 0x10

LU_TABLE = 0x9375 (адрес в памяти программ)

После выполнения команды

W = 0xA3

29

WWW.MICROCHIP.RU – поставки и техподдержка на русском языке

29-7

Раздел 29. Система команд

DS33023A

 

 

ADDWF Сложение W и f

Синтаксис:

Операнды:

Операция: Измен. флаги: Код:

Описание:

[label]

ADDWF

f,d

 

0 ≤

f ≤ 127

 

 

 

 

 

d

[0,1]

 

 

 

 

 

(W) + (f) →

(dest)

 

 

 

C, DC, Z

 

 

 

 

 

 

00

 

0111

 

dfff

ffff

 

 

 

 

 

 

 

Сложить содержимое регистров W и 'f'. Если d=0, результат сохраняется в регистре W. Если d=1, результат сохраняется в регистре 'f'.

Слов:

1

 

 

 

Циклов:

1

 

 

 

Выполнение

 

 

 

 

команды по тактам

Q1

Q2

Q3

Q4

 

 

Декодирование

Чтение

Выполнение

Запись

 

команды

регистра 'f'

результата

 

 

Пример 1:

ADDWF

FSR,0

 

 

До выполнения команды

W = 0x17 FSR = 0xC2

После выполнения команды

W = 0xD9

FSR = 0xC2

Пример 2:

ADDWF

INDF,1

До выполнения команды

W = 0x17 FSR = 0xC2

Значение регистра с адресом в FSR = 0x20 После выполнения команды

W = 0x17 FSR = 0xC2

Значение регистра с адресом в FSR = 0x37

Пример 3:

ADDWF

PCL,0

Случай 1

До выполнения команды

 

 

W = 0x10

 

 

PCL = 0x37

 

 

C = x

 

После выполнения команды

 

 

PCL = 0x47

 

 

C = 0

Случай 2

До выполнения команды

 

 

W = 0x10

PCL = 0xF7

PCH = 0x08 C = x

После выполнения команды

PCL = 0x07

PCH = 0x08 C = 1

29-8

WWW.MICROCHIP.RU – поставки и техподдержка на русском языке

ООО "Микро-Чип" - поставка комплектующих Microchip тел.: (095) 737-7545

ANDLW

Побитное 'И' константы и W

Синтаксис:

[label]

ANDLW

k

 

 

Операнды:

0 ≤ k ≤

255

 

 

 

 

Операция:

(W) .AND. k →

(W)

 

 

 

Измен. флаги:

Z

 

 

 

 

 

Код:

11

1001

 

kkkk

kkkk

 

Выполняется

побитное 'И'

содержимого регистра W и

Описание:

8 - разрядной константы 'k'. Результат сохраняется в

 

регистре W.

 

 

 

 

Слов:

1

 

 

 

 

 

Циклов:

1

 

 

 

 

 

Выполнение

 

 

 

 

 

 

команды по тактам

Q1

 

Q2

 

Q3

Q4

 

 

 

 

Декодирование

Чтение

 

Выполнение

Запись в

 

команды

константы 'k'

регистр W

 

 

Пример 1:

ANDLW

0x5F (0101 1111)

 

До выполнения команды

W = 0xA3 (1010 0011)

После выполнения команды

W = 0x03 (0000 0011)

Пример 2:

ANDLW

MYREG

 

До выполнения команды

 

 

W = 0xA3

 

 

MYREG = 0x37 (адрес регистра)

 

После выполнения команды

 

 

W = 0x23

Пример 3:

ANDLW

HIGH (LU_TABLE)

 

До выполнения команды

W = 0xA3

LU_TABLE = 0x9375 (адрес в памяти программ)

После выполнения команды

W = 0x83

29

WWW.MICROCHIP.RU – поставки и техподдержка на русском языке

29-9

Раздел 29. Система команд

DS33023A

 

 

ANDWF

Побитное 'И' W и f

 

Синтаксис:

[label]

ANDWF

f,d

 

Операнды:

0 ≤

f ≤

127

 

 

 

 

d

[0,1]

 

 

 

 

Операция:

 

 

 

 

(W) .AND. (f) →

(dest)

 

 

 

Измен. флаги:

Z

 

 

 

 

 

 

Код:

 

00

0101

 

dfff

ffff

 

Выполняется

побитное 'И'

содержимого регистров W и 'f'.

Описание:

Если d=0, результат сохраняется в регистре W. Если d=1,

 

результат сохраняется в регистре 'f'.

 

Слов:

1

 

 

 

 

 

 

Циклов:

1

 

 

 

 

 

 

Выполнение

 

 

 

 

 

 

 

команды по тактам

Q1

 

Q2

 

Q3

Q4

 

 

 

 

Декодирование

Чтение

 

Выполнение

Запись

 

 

команды

регистра 'f'

 

результата

 

 

 

 

Пример 1:

ANDWF

FSR,1

 

 

 

 

До выполнения команды

 

 

 

W = 0x17 (0001 0111) FSR = 0xC2 (1100 0010)

После выполнения команды

W = 0x17

FSR = 0x02 (0000 0010)

Пример 2:

ANDWF

FSR,0

До выполнения команды

W = 0x17 (0001 0111) FSR = 0xC2 (1100 0010)

После выполнения команды

W = 0x02 (0000 0010) FSR = 0xC2

Пример 3:

ANDWF

INDF,1

До выполнения команды

W = 0x17 FSR = 0xC2

Значение регистра с адресом в FSR = 0x5A После выполнения команды

W = 0x17 FSR = 0xC2

Значение регистра с адресом в FSR = 0x15

29-10

WWW.MICROCHIP.RU – поставки и техподдержка на русском языке