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

Программное управление технологическим оборудованием

.pdf
Скачиваний:
1
Добавлен:
29.11.2025
Размер:
11.79 Mб
Скачать

1)FOSCSEL – регистр выбора генератора;

2)FOSC – регистр конфигурации генератора;

3)OSCCON – регистр управления генератором;

4)CLKDIV – регистр делителя частоты;

1)PLLFBD – регистр делителя частоты обратной связи PLL;

2)OSCTUN – регистр для настройки генератора FRC.

Регистры FOSCSEL и FOSC относятся к регистрам битов конфигурации.

1.6 Биты конфигурации

Микроконтроллеры семейства dsPIC33 имеют т.н. биты конфигурации, задающие такие параметры работы микроконтроллера, как источник тактирования, параметры защиты от нестабильности источника питания, параметры защиты кода программы и др. Такие биты программируются и устанавливаются единожды перед записью прошивки микроконтроллера и не могут быть изменены программно.

Установка битов конфигурации производится либо специальным инструментом среды программирования MPLAB IDE, либо специальной директивой в коде программы перед основной функцией программы.

Биты конфигурации микроконтроллера семейства dsPIC33 объединены в

4регистра:

1)FOSC – регистр конфигурации тактового генератора;

2)FWDT – регистр конфигурации сторожевого таймера;

3)FBORPOR – регистр конфигурации контроля напряжения питания;

4)FGS – регистр конфигурации сегмента кода.

a.Программная модель микроконтроллера

a. качестве рабочих используются 16 регистров процессора (обозначаемых W0..W15), которые могут функционировать как регистры данных или адресов. Все регистры ортогональны с точки зрения системы команд, то есть могут быть использованы

2) качестве операнда инструкции. Некоторые инструкции могут использовать в качестве операндов или регистров сохранения результата только определенный регистр или регистровую пару. Функция, выполняемая регистром, определяется режимом адресации, который используется в данной инструкции.

a. регистре W15 содержится указатель стека (Stack Pointer – SP), который

автоматически модифицируется при обработке исключений, вызовов подпрограмм и прерываний. Тем не менее, регистр W15 можно использовать в инструкциях в качестве обычного рабочего регистра. Во многих случаях такое использование упрощает манипуляции с указателем стека.

При инициализации микроконтроллера в регистр W15 записывается значение 0x0800, и это обеспечивает установку указателя стека на начало

441

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

Процессор микроконтроллеров dsPIC33 имеет 16 битный регистр состояния (Status Register – SR). Младшая часть регистра состояния (SRL) содержит флаги арифметических операций (нуля, переноса, переполнения и знака), а также 3 бита приоритета (IPL2…IPL0), в которых устанавливается текущий приоритет прерываний процессора. Биты регистра, а также их расшифровка представлены в таблицах 1.1 и 1.2 соответственно.

Таблица 1.1

Биты регистра SR

Обозначение

OA

 

OB

 

SA

 

SB

 

OAB

 

SAB

DA

 

DC

 

Номер бита

15

14

 

13

 

12

 

11

 

10

9

 

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

IPL<2:0

 

 

 

 

 

 

 

 

 

 

 

Обозначение

 

>

 

 

 

RA

 

N

 

OV

Z

 

C

 

Номер бита

7

6

 

5

 

4

 

3

 

2

1

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблица 1.2

 

 

 

Значение некоторых битов регистра SR

 

 

 

 

 

Номер

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Обозначение

 

 

 

 

 

 

Описание

 

 

 

 

 

бита

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7-5

IPL<2:0>

 

Приоритет прерываний процессора

 

 

 

 

 

3

 

N

 

Бит отрицательности АЛУ

 

 

 

 

 

 

 

 

 

N = 1: результат вычисления был отрицательный

 

 

 

 

 

 

N = 0: результат вычисления был неотрицательный

 

 

2

 

OV

 

Бит переполнения АЛУ

 

 

 

 

 

 

 

 

 

 

 

 

Бит используется для вычислений со знаковыми

 

 

 

 

 

 

числами.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Индицирует, было ли переполнение, которое привело к

 

 

 

 

 

тому,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

что бит знака изменил состояние.

 

 

 

 

 

 

 

 

 

OV = 1: переполнение произошло

 

 

 

 

 

 

 

 

 

OV = 0: переполнение не произошло

 

 

 

 

1

 

Z

 

Бит ноля АЛУ

 

 

 

 

 

 

 

 

 

 

 

 

 

Z = 1: действие, влияющее на бит ноля, было выполнено

 

 

 

 

 

Z = 0: последнее действие, влияющее на бит ноля,

 

 

 

 

 

 

привело к его

 

 

 

 

 

 

 

 

 

 

 

 

 

Сбросу

 

 

 

 

 

 

 

 

 

 

 

0

 

C

 

Бит переноса АЛУ

 

 

 

 

 

 

 

 

 

 

 

 

 

C = 1: произошёл перенос старшего бита результата

 

 

 

 

 

C = 0: переноса старшего бита результата не произошло

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

442

 

1.8 Режимы адресации

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

Прямая регистровая адресация используется для доступа к содержимому 16 рабочих регистров W0…W15, причем обращение возможно как к целому слову (16 бит), так и к байту.

Косвенная регистровая адресация применяется для доступа к любой ячейке памяти данных посредством формирования исполнительного адреса данных по содержимому одного или нескольких рабочих регистров. Таким образом, содержимое рабочего регистра или регистров является указателем на область памяти данных. Дополнительные возможности такого метода адресации обеспечиваются механизмами пред- и постинкремента содержимого регистра, что позволяет последовательно обрабатывать непрерывный диапазон адресов в памяти данных.

Примеры применения различных методов адресации представлены ниже:

1)прямая адресация, адрес операнда указывается непосредственно в операционном слове инструкции. Операнд должен быть расположен

вобласти Near Data Space (первые 8 кБайт ОЗУ):

add 0x900, W0 ;Сложение значения по адресу 0x900 с W0. ;Результат сохраняется в W0

2)расширенный режим инструкции mov – прямая адресация, но может адресоваться вся память ОЗУ

mov 0x2500, W7 ;Сохранение значения по адресу 0x2500 в регистр W7

1)прямая адресация регистров. В качестве операндов используются значения рабочих регистров:

ior W0, W2, W5 ;Поразрядное логическое ИЛИ регистров W0

иW2, ;сохранение результата в W5

2)косвенная адресация – может использоваться в большинстве инструкций:

add W4, [W5], [W6] ;Сложение W4 со словом по указателю

W5,

;сохранение результата по указателю W6

443

1)косвенная адресация с пре/пост инкрементом и декрементом, при этом учитываются правила адресной арифметики в зависимости от типа операнда (байт или слово):

;Увеличение указателя w0 на 2, перемещение значения ;по указателю W0 в ячейку, на которую указывает W1, ;уменьшение указателя w1 на 2. mov [++W0], [W1--]

1. косвенная адресация со смещением:

;Получение указателя на ячейку операнда, путем сложения W4 и W5, ;перемещение значения по полученному указателю по адресу W6, ;увеличение значения W6 на 2 mov [W4 + W5], [W6++]

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

1.9 Система команд

16-битные микроконтроллеры Microchip имеют расширенный набор инструкций, большинство из которых поддерживает операции типа «чтение- модификация-запись», что позволяет работать с данными напрямую в ОЗУ, не используя рабочие регистры.

Семейство dsPIC33 имеет 83 инструкции (включая инструкции DSPядра). Почти все инструкции выполняются за один командный такт. В зависимости от типа операндов, инструкции могут быть слово-, байтлибо бит-ориентированными. Большинство слово- и байт-ориентированных инструкций являются трехоперандными (типа A = B + C). Большинство биториентированных инструкций имеют два операнда.

Систему команд микроконтроллеров dsPIC33 можно разделить на несколько групп:

команды перемещения;

команды математических операций;

команды логических операций;

команды сдвига и циклического сдвига;

команды работы с битами;

команды сравнения/выбора;

команды условных переходов;

команды работы со стеком;

команды управления.

444

Команды перемещения

В командах перемещения, большинство из которых имеет мнемоническое обозначение mov, используется хотя бы один регистр. Регистровые инструкции могут использовать W регистр как регистр данных или регистр, в который помещается смещение адреса. Пример использования команды:

mov #0x19C7, W0 mov W0, W1

В первой инструкции константа 0x19C7 командой mov помещается в регистр W0. Затем содержимое регистра W0 пересылается в регистр W1. Таким образом, после выполнения второй инструкции в регистре W1 будет содержаться значение 0x19C7.

mov #0x1234, W0 mov W0, [W1]

В данном примере первая команда mov помещает в регистр W0 константу 0x1234. Вторая команда помещает содержимое регистра W0 по адресу, находящемуся в регистре W1.

Команды математических операций

Микроконтроллеры семейства dsPIC33 обладают обширным набором инструкций для выполнения математических и логических действий над операндами. В АЛУ процессора предусмотрено выполнение 4 основных математических действий над целыми знаковыми и беззнаковыми числами: сложения, вычитания, умножения и деления. Для каждого из этих действий предусмотрен ряд инструкций, в которых используются различные типы адресации, делающие выполнение таких операций весьма эффективным.

К математическим инструкциям относятся следующие:

add – сложение;

sub – вычитание;

inc – увеличение на 1;

inc2 – увеличение на 2;

dec – уменьшение на 1;

dec2 – уменьшение на 2;

mul – умножение;

445

div.xx – деление, где xx – указывает тип и длину операндов.

Далее приведено несколько примеров использования этих инструкций.

mov #34, W0 add W0, #7, W1

Вэтой программе команда add имеет 3 операнда. К содержимому регистра W0 прибавляется 7, и результат записывается в регистр W1. После выполнения операции там будет находиться значение 41 (0x29).

mov #7, W1

add W1, #5, [W0]

Вданном случае команда add складывает содержимое регистра W1 (0х7)

сконстантой 5 и помещает результат по адресу, находящемуся в регистре W0. После выполнения операции в этой ячейке будет находиться значение 12

(0xC).

Группа математических команд содержит инструкции, позволяющие работать с многобайтовыми данными. Эти команды при выполнении операций учитывают флаг переноса, который мог быть установлен как следствие переноса или заема в результате операции с предыдущими словами. К таким инструкциям относятся addc и subb.

Команды логических операций

Эти команды позволяют выполнять булевые одноместные и двуместные операции. К таким операциям относятся хорошо известные двуместные операции логическое «И», логическое «ИЛИ», исключающее «ИЛИ» и одноместная операция отрицания «НЕ». В эту группу команд включены инструкции очистки (обнуления) операнда и установки, когда все биты операнда устанавливаются в 1.

Инструкции, выполняющие операцию логического «И», имеют мнемоническое обозначение and, логического «ИЛИ» — ior, исключающего «ИЛИ» — xor. Операция отрицания «НЕ» реализована посредством инструкции com. Кроме того, в эту группу команд включена команда neg, позволяющая инвертировать знак числа. Инструкции логических операций весьма полезны при выделении и анализе отдельных битов операндов.

Применение этих команд показано в следующих примерах. mov #0xFC,

W0 mov #0x13, W1

446

and W0, W1, W2

Здесь выполняется операция логического «И» над операндами, помещенными в регистры W0 и W1. Команда and помещает результат операции в регистр W2. При указанных значениях операндов W0 и W1 итоговое значение в регистре W2 будет равно 0x10. Если инструкцию «and W0, W1, W2» заменить инструкцией «ior W0, W1, W2» (логическое «ИЛИ»), то итоговое значение в регистре W2 станет равным 0xFF. При использовании в программе команды xor (исключающее «ИЛИ») в регистре W2 после выполнения операции будет содержаться значение 0xEF.

mov #0xC, W0 com W0, W1

В этом примере показано применение инструкции com. Эта инструкция инвертирует все биты исходного операнда. В данном случае инвертируется содержимое регистра W0 (0x000C), а результат, который будет равен 0xFFF3, помещается в W1.

mov #0xFFF4, W0 neg W0, W1

Программа инвертирует знак числа при помощи команды neg. Команда neg использует стандартный алгоритм получения инверсии числа: сначала все биты операнда инвертируются, затем к младшему биту прибавляется 1. В данном примере при исходном значении операнда в регистре W0, равном 0xFFF4 (дополнительный код отрицательного числа –12), результат выполнения команды neg, помещенный в регистр W1, будет равен 0x000C, что соответствует положительному числу 12.

Команды сдвига и циклического сдвига

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

К командам сдвига и циклического сдвига относятся следующие:

asr – арифметический сдвиг вправо;

lsr – логический сдвиг вправо;

rlc – сдвиг влево через флаг переноса;

rlnc – сдвиг влево без использования флага переноса;

447

rrc – сдвиг вправо через флаг переноса;

rrnc – сдвиг вправо без использования флага переноса;

sl – сдвиг влево.

Пример применения инструкции сдвига: mov #34, W0

lsr W0, #2, W1

Вданном примере выполняется сдвиг содержимого регистра W0, которое равно 34 (0x22), на 2 позиции вправо, а результат сохраняется в регистре W1. Таким образом, после выполнения команды lsr W0, #2, W1 в регистре W1 будет содержаться значение 8 (0x8).

Команды работы с битами

Команды работы с битами, как следует из названия, предназначены для манипуляций с отдельными битами операндов. Такая возможность является весьма востребованной, поскольку в большинстве случаев системы на базе микроконтроллеров должны работать с отдельными сигнальными битами внешних устройств. Битовые команды позволяют анализировать состояние отдельных битов, что дает возможность организовать ветвления и переходы в программе, а также устанавливать или сбрасывать отдельные биты операнда.

К командам работы с битами относятся следующие:

bclr – сброс бита;

bset – установка бита;

btg – инвертирование бита;

btst – проверка бита.

Пример применения команд работы с битами: mov #34,

W0 bset W0, #0 bclr W0, #5

Вданном примере в регистр W0 записывается значение 34 (0x22). Затем команда «bset W0, #0» устанавливает бит 0 этой переменной, в результате чего содержимое регистра становится равным 35 (0x23). Следующая за ней инструкция bclr W0, #5 сбрасывает бит 5 регистра, в результате чего окончательное его значение будет равно 3 (0x3).

Для быстрого анализа состояния отдельных битов переменной в систему команд микроконтроллеров dsPIC33 включены инструкции fbcl, ff1l и ff1r. Эти инструкции очень полезны в системах сбора данных при сканировании,

448

например, сигнальных выводов периферийных устройств. Краткое описание этих инструкций:

2.1 fbcl — определяет изменение состояния битов от младшего к старшему (слева направо);

2.2ff1l — находит первый ненулевой бит при проходе слева направо;

2.3ff1r — находит первый ненулевой бит при проходе справа налево.

Пример использования инструкции ff1r: mov #8,

W2 ff1r W2, W3

В примере в регистр W2 заносится значение 8. Инструкция ff1r обнаруживает первый единичный бит в регистре W2 на позиции 4 (отсчет ведется от 1) и записывает это значение в регистр W3. Таким образом, регистр W3 будет содержать значение 4.

Среди команд битовых операций инструкции установки (bset), сброса (bclr) и переключения (btg) битов чаще всего применяются для управления внешними исполнительными устройствами, подключенными к портам вывода микроконтроллера. Пример использования команды btg для переключения состояния бита 0 порта PARTA:

btg PORTA, #0

Команды сравнения/выбора и условных/безусловных переходов

К группе команд сравнения/выбора относятся команды вида BTxx и CPxx, где аббревиатура BT означает «Bit Test», CP означает «Compare», а символы xx — одно из условий. О функциях команд понятно по их названию. Команды BTxx проверяют состояние указанного бита (0 или 1) и по результатам проверки выполняют определенное действие. Команды CPxx выполняют сравнение значений операндов, в результате чего устанавливаются флаги в регистре состояния SR процессора. Дальнейшие действия выполняются с помощью команд условных переходов bra xx, где хх — условие выполнения перехода.

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

Наиболее широко при разработке программного обеспечения

449

используются инструкции bra xx (xx — код условия), call и goto.

Команда bra xx осуществляет переход по адресу программы, содержащемуся в теле инструкции, при выполнении условия xx. В общей сложности эта команда может проверять выполнение следующих условий:

2.5C — установлен флаг переноса;

2.6GE — больше или равно;

2.7GEU — больше или равно для операций без знака;

2.8GT — больше;

2.9GTU — больше для операций без знака;

2.10LE — меньше или равно;

2.11LEU — меньше или равно для операций без знака;

2.12LT — меньше;

2.13LTU — меньше для операций без знака;

2.14N — результат предыдущей операции отрицательный;

2.15NC — перенос (заем) отсутствует;

2.16NN — результат предыдущей операции неотрицательный;

2.17NOV — переполнения нет;

2.18NZ — результат предыдущей операции ненулевой;

2.19OV — возникло переполнение;

2.20Z — установлен бит нуля в регистре состояния.

Например, команда «bra z, label1» выполнит переход на метку label1 программы, если установлен бит Z в регистре состояния процессора.

Кроме того, команда bra имеет две модификации, позволяющие выполнять безусловный переход:

2.6 bra метка, где метка должна находиться в пределах от – 32768 до +32767 слов памяти программ относительно команды bra;

2.7bra Wn, где Wn — рабочий регистр.

Ккомандам переходов относятся и команды вызова процедур call и безусловного перехода goto. Инструкции call и goto в качестве операнда могут использовать либо метку, либо один из рабочих регистров. Если в качестве адреса перехода использовать содержимое какого-либо из рабочих регистров, то с помощью одной инструкции bra или call можно организовать несколько ветвлений в программе, например, по принципу оператора switch…case языка Си.

Пример использования команд: mov #0x1, W0

mov #handle(Sub1), W2 btss W0,#0

mov #handle(Sub2), W2 call W2

Sub1:

450

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]