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

Микропроцессорные средства и системы. Методические указания к лабораторным работам №1-3 на стенде НТЦ-02.31.2

.pdf
Скачиваний:
0
Добавлен:
11.08.2026
Размер:
537 Кб
Скачать

возможна только к этому сегменту. Остальная часть ОЗУ может быть адресова-

на косвенно.

1.4.Арифметико-логическое устройство (АЛУ), умножитель

16-битное АЛУ позволяет выполнять за один командный такт следующие операции: сложение, вычитание, битовый сдвиг и поразрядные логические опе-

рации, включая инверсию. Результаты операций влияют на статусные флаги.

АЛУ выполняет операции с 16-битными словами или байтами в зависимости от синтаксиса инструкции.

В состав ядра входит умножитель 17 x 17 бит, который позволяет выпол-

нять операции умножения 16 x 16, 16 x 8 и 8 x 8 бит, знаковые, беззнаковые и смешанные за один командный такт.

1.5 Система тактирования микроконтроллера Микроконтроллер состоит из множества различных модулей, работу ко-

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

данной частоты. Главной характеристикой генератора является частота.

Семейства dsPIC33 имеют переработанную схему конвейера – команда выполняется за 2 такта генератора. Таким образом, частота выполнения команд соответствует частоте FCY и по умолчанию FCY = FOSC / 2. Максимальная произ-

водительность dsPIC33 составляет 40 MIPS (при тактовой частоте 80 MHz).

Микроконтроллер семейства dsPIC33 имеет возможность тактирования от одного из двух внутренних и двух внешних источников, позволяя также произ-

водить их настройку и переключение. Внутренние генераторы позволяют уменьшить количество деталей и размеры платы и применяются в тех случаях,

когда не требуется высокая точность их работы. Внешние генераторы приме-

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

11

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

Микроконтроллеры семейства dsPIC33 имеют так называемые биты кон-

фигурации, задающие такие параметры работы микроконтроллера, как источ-

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

параметры защиты кода программы и др. Такие биты программируются и уста-

навливаются единожды перед записью прошивки микроконтроллера и не могут быть изменены программно.

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

4регистра:

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

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

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

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

1.7. Программная модель микроконтроллера В качестве рабочих используются 16 регистров процессора (обозначае-

мых W0…W15), которые могут функционировать как регистры данных или ад-

ресов. Все регистры ортогональны с точки зрения системы команд, то есть мо-

гут быть использованы в качестве операнда инструкции. Некоторые инструк-

ции могут использовать в качестве операндов или регистров сохранения ре-

зультата только определенный регистр или регистровую пару.

В регистре W15 содержится указатель стека (StackPointer – SP), который автоматически модифицируется при обработке исключений, вызовов подпро-

грамм и прерываний. Тем не менее, регистр W15 можно использовать в ин-

струкциях в качестве обычного рабочего регистра. Во многих случаях такое ис-

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

чивает установку указателя стека на начало области памяти, которая доступна

12

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

Таблица 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

Таблица 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: переноса старшего бита результата не произошло

Процессор микроконтроллеров dsPIC33 имеет 16 битный регистр состоя-

ния (StatusRegister – SR). Младшая часть регистра состояния (SRL) содержит

флаги арифметических операций (нуля, переноса, переполнения и знака), а также

13

3 бита приоритета (IPL2…IPL0), в которых устанавливается текущий приоритет прерываний процессора. Биты регистра представлены в таблицах 1 и 2.

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

Инструкции процессора dsPIC33 могут быть регистровыми и адресными.

Основное различие между этими типами инструкций состоит в том, что регистро-

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

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

Прямая регистровая адресация используется для доступа к содержимому

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

Косвенная регистровая адресация применяется для доступа к любой ячей-

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

держимое рабочего регистра или регистров является указателем на область па-

мяти данных.

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

- прямая адресация, адрес операнда указывается непосредственно в опе-

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

NearDataSpace (первые 8 кБайт ОЗУ):

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

- расширенный режим инструкции mov – прямая адресация, но может ад-

ресоваться вся память ОЗУ

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

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

ния рабочих регистров:

14

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

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

ций:

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

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

(байт или слово):

mov [++W0], [W1] ;Увеличение указателя w0 на 2, перемещение значения

;по указателю W0 в ячейку, на которую указывает W1,

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

mov [W4 + W5], [W6++] ;Получение указателя на ячейку операнда,

:путем сложения W4 и W5, перемещение значения по полученному

;указателю по адресу W6, увеличение значения W6 на 2

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

пактный код при использовании компиляторов с языков высокого уровня.

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

16-битные микроконтроллеры Microchip имеют расширенный набор ин-

струкций, большинство из которых поддерживает операции типа «чтение-

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

Семейство dsPIC33 имеет 83 инструкции (включая инструкции DSP-

ядра). Почти все инструкции выполняются за один командный такт. В зависи-

мости от типа операндов, инструкции могут быть слово-, байтлибо бит-

ориентированными. Большинство слово- и байт-ориентированных инструкций являются трехоперандными (типа A = B + C). Большинство бит-

ориентированных инструкций имеют два операнда.

15

Отдельно стоит отметить «пустые» команды NOP и NOPR не выполняющие ни каких действий и необходимые лишь для нормирования выполнения подпро-

грамм по количеству машинного времени. В дальнейшем описании приводятся только основные команды и их описание, которые могут понадобиться для вы-

полнения лабораторных работ и ознакомления с особенностями написания про-

грамм на ассемблере. Для более подробного знакомства с командами требуется обратиться к полному руководству программиста для dsPIC контроллеров.

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

В командах перемещения используется хотя бы один регистр. Регистро-

вые инструкции могут использовать W регистр как регистр данных или ре-

гистр, в который помещается смещение адреса.

Основной командой перемещения является команда MOV (от. анг.

MOVE – перемещать, передвигать), которая в зависимости от формата переме-

щаемых данных может быть трех типов:

-MOV для 16-и битных данных в формате слова;

-MOV.B для 8-и битных данных в формате байта;

-MOV.D для 32-х битных данных в формате двойного слова.

После выбора конкретной команды сначала указывается источник дан-

ных для перемещения (константа, содержимое регистра, косвенный адрес), а

затем адрес назначения (содержимое регистра, косвенный адрес). Еще одной командой перемещения является EXCH (от анг. Exchange - обмен), позволяю-

щая осуществить обмен содержимым между двумя регистрами.

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

Микроконтроллеры семейства dsPIC33 обладают обширным набором ин-

струкций для выполнения математических и логических действий над операн-

дами. В АЛУ процессора предусмотрено выполнение 4 основных математиче-

ских действий над целыми знаковыми и беззнаковыми числами: сложения, вы-

читания, умножения и деления. Для каждого из этих действий предусмотрен ряд

16

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

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

-add (от анг. addition) – сложение;

-sub (от анг. subtract) – вычитание;

-inc (от анг. increment) – увеличение на 1;

-dec (от анг. decrement) – уменьшение на 1;

-mul.xx (от анг. multiply) – умножение;

-div.xx (от анг. divide) – деление,

где xx – указывает тип и длину операндов. Применяются следующие обозначе-

ния:

-S (от анг. signed) – знаковая переменная;

-U (от анг. unsigned) – беззнаковая переменная;

-D (от аг. doubleword) – двойное слово.

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

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).

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

Эти команды позволяют выполнять булевые одноместные и двуместные операции. К таким операциям относятся хорошо известные двуместные операции

17

логическое «И», логическое «ИЛИ», исключающее «ИЛИ» и одноместная опера-

ция отрицания «НЕ». В эту группу команд включены инструкции очистки (обну-

ления) операнда и установки, когда все биты операнда устанавливаются в 1.

Инструкции, выполняющие операцию логического «И», имеют мнемони-

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

Кроме того, в эту группу команд включена команда neg, позволяющая инверти-

ровать знак числа. Инструкции логических операций весьма полезны при выде-

лении и анализе отдельных битов операндов.

Примеры использования команд приводятся ниже.

mov #0xFC, W0

mov #0x13, W1

andW0, 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

18

Программа инвертирует знак числа при помощи команды neg. Команда neg использует стандартный алгоритм получения инверсии числа: сначала все биты операнда инвертируются, затем к младшему биту прибавляется 1. В дан-

ном примере при исходном значении операнда в регистре W0, равном 0xFFF4 (дополнительный код отрицательного числа –12), результат выполнения ко-

манды neg, помещенный в регистр W1, будет равен 0x000C, что соответствует положительному числу 12.

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

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

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

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

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

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

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

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

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

mov #34, W0

bset W0, #0

bclr W0, #5

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

19

струкция bclr W0, #5 сбрасывает бит 5 регистра, в результате чего окончатель-

ное его значение будет равно 3 (0x3).

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

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

струкций:

- fbcl (FindFirstBitChangefromLeft) - определяет изменение состояния би-

тов от младшего к старшему (слева направо);

-ff1l (FindFirstOnefromLeft) - находит первый ненулевой бит при проходе слева направо;

-ff1r (FindFirstOnefromRight) - находит первый ненулевой бит при прохо-

де справа налево.

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

mov #8, W2

ff1r W2, W3

В примере в регистр W2 заносится значение 8. Инструкция ff1r обнару-

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

дет содержать значение 4.

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

Эта группа команд часто используется для преобразования последова-

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

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

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

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

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

20

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