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

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

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

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

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

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

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

Пример применения инструкции сдвига:

mov #34, W0

lsr W0, #2, W1

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

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

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

К группе команд сравнения/выбора относятся команды вида BTxx и CPxx, где аббревиатура BT означает «BitTest», CP означает «Compare», а сим-

волы xx — одно из условий. Команды BTxx проверяют состояние указанного бита (0 или 1) и по результатам проверки выполняют определенное действие.

Команды CPxx выполняют сравнение значений операндов, в результате чего устанавливаются флаги в регистре состояния SR процессора.

Дальнейшие действия выполняются с помощью команд условных пере-

ходов braxx, где хх — условие выполнения перехода. Команды группы услов-

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

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

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

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

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

21

Команда braxx осуществляет переход по адресу программы, содержаще-

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

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

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

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

-GT — больше;

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

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

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

-LT — меньше;

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

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

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

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

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

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

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

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

Например, команда «bra z, label1» выполнит переход на метку label1 про-

граммы, если установлен бит Z в регистре состояния процессора.

Кроме того, команда bra имеет две модификации, позволяющие выпол-

нять безусловный переход:

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

слов памяти программ относительно команды bra;

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

К командам переходов относятся и команды вызова процедур call и без-

условного перехода goto. Инструкции call и goto в качестве операнда могут ис-

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

22

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

мощью одной инструкции bra или call можно организовать несколько ветвле-

ний в программе, например, по принципу оператора switch…case языка Си.

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

Программный стек управляется командами push и pop. Эти инструкции эквивалентны инструкции mov с регистром W15 в качестве указателя приёмни-

ка. Для сохранения данных в стек необходимо выполнить следующую команду:

push W0

Значение, содержащееся на вершине стека, может быть получено следу-

ющей инструкцией:

pop W0

2. Пример выполнения работы

Задача: Вычислить значение выражения (25 + 13) * (18 – 9), результаты промежуточных вычислений хранить в регистрах. Выделить младшую тетраду результата и поместить её в старшую.

Листинг программы:

mov

#25, W0

; W0 = 25

 

mov

#13, W1

; W1 = 13

 

add

W0, W1, W2

; W2 = W0

+ W1

mov

#18, W3

; W3 = 18

 

mov

#9, W4

; W4 = 9

 

sub

W3, W4, W5

; W5

= W3

- W4

mul.ss

W2, W5, W6

; W6

= W2 * W5

and

#0x000F, W6

; W6

= W6

& 0x000F

sl

W6, #12, W6

; W6

= W6

<< 12

3. Варианты индивидуальных заданий к лабораторной работе

3.1. Загрузить в регистр число 15. Сложить его с 25 и результат поместить на вершину стека. Поместить по адресу 20h внутренней памяти данных млад-

шую десятичную цифру результата, а по адресу 21h – старшую.

23

3.2. Найти разницу чисел 4836 и 2454. Младший байт результата поде-

лить на 2. Поместить по адресу 30h внутренней памяти данных младшую деся-

тичную цифру результата, а по адресу 32h – старшую.

3.3. Найти адрес ячейки памяти данных путем перемножения двух чисел

0Сh и 0Eh. В этуячейку записать результат логической операции «исключаю-

щее или» между текущим содержимым регистра W0 и числа 09h.

3.4.Найти частное чисел 236 и 59. Результат умножить на 8, используя операции сдвига. По вычисленному таким образом адресу ячейки внутренней памяти данных размесить результат двойного декремента полученного числа.

3.5.Загрузить регистр W7 числом 023h. Найти сумму W7 + 32. В ячейку внутренней памяти данных, расположенную по вычисленному таким образом адресу, загрузить число десятичных единиц результата сложения.

3.6.Вычислить значение выражения (81 + 64) * (112 - 25) OR 10011010b,

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

3.7. Найти разницу чисел 4801 и 209. Число десятичных единиц старшего байта результата поместить в старшую тетраду порта RA. Младшую тетраду оставить без изменений.

4. Контрольные вопросы

4.1.Сколько команд включает в себя система команд микроконтроллера?

4.2.На какие группы разделены команды микроконтроллера?

4.3.Как длительность машинного цикла микроконтроллера соотносится с его тактовой частотой?

4.4.Для чего предназначены биты конфигурации микроконтроллера и в чём их особенность?

4.5.Сколько источников тактирования может иметь микроконтроллер?

4.6.Каким образом настраивается источник тактирования микроконтроллера?

4.7.Какую функцию выполняет система прерываний?

4.8.Какое событие может быть причиной возникновения прерывания?

24

Лабораторная работа №3

ИЗУЧЕНИЕ СИСТЕМЫ ПРОГРАММИРОВАНИЯ

МИКРОКОНТРОЛЛЕРОВ dsPIC33 С ПОМОЩЬЮ ЯЗЫКА

ПРОГРАММИРОВАНИЯ АССЕМБЛЕР

Цель работы

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

Порядок выполнения работы:

1.Изучить основные положения и конструкции ассемблера.

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

3.Отладить работу программы.

4.Проследить ход выполнения программы в симуляторе.

5.Оформить отчёт по лабораторной работе.

6.Ответить на контрольные вопросы.

1. Краткие теоретические сведения

1.1. Обзор MPLAB ASM30 ассемблера

Язык ассемблера – машинно-ориентированный язык низкого уровня с командами, соответствующими командам микроконтроллера.

Условно текст программы на ассемблере можно разбить на следующие секции:

-блок определений, состоящий из секций:

-подключаемых файлов;

-определения битов конфигурации;

-определения констант; -определения макросов;

25

-объявления переменных.

- блок кода, состоящий из секций: -обработчика прерываний;

-основного цикла программы;

-подпрограммы.

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

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

Пример исходного файла на языке ассемблер:

.list p=p33FJ32MC204

.include "p33FJ32MC204.inc"

.global __reset ;Метканачалакода

__reset:

main:

 

nop

 

goto main

 

service:

 

nop

 

retfie

 

.end

;Конец кода

Основу языка ассемблера составляют директивы и инструкции. Директи-

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

рирования и определения символов и т.д. Инструкции являются командами микроконтроллера, непосредственно исполняются им во время работы.

26

1.2. Общий формат инструкций и директив Общий формат инструкций и директив ассемблера, следующий: [метка:] инструкция [операнды] [; комментарии]

[метка:] директива [аргументы] [; комментарии]

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

тырёх информационных полей:

-метка;

-мнемоника команды;

-операнды команды;

-комментарии.

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

ки. За меткой должно следовать двоеточие (:). Метка должна начинаться с сим-

вола латинского алфавита или символа подчёркивания (_) и может состоять из цифр и букв латинского алфавита и символа подчёркивания (_).

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

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

Любой текст до конца строки после символа «;» трактуется как коммен-

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

«;», как комментарий не воспринимается.

1.3 Директивы ассемблера Существует 5 основных типов директив:

- директивы контроля – управляют созданием разделов условно компили-

рованного кода;

27

-директивы данных – управляют разделением памяти и назначением символических имён переменным и константам;

-директивы листинга – определяют формат и состав файла листинга. Эти директивы позволяют указывать заголовки, нумеровать страницы и настраивать другие параметры;

-макро директивы – управляют работой макросов и распределением дан-

ных в теле макроса;

- директивы объектного файла – используются только при создании объ-

ектного файла.

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

.list

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

ности, с помощью данной директивы можно указать используемый микроконтроллер,

систему счисления по умолчанию, параметры работы со строками и т.д. Пример:

.list p=p33fj32mc204

.include

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

Эффект аналогичен копированию полного текста включаемого файла в место расположения директивы. Параметр директивы – подключаемый файл – может указываться как с полным путём, так и без. Во втором случае поиск файла бу-

дет осуществляться в текущей рабочей директории, директории исходного файла и служебных директориях. Пример:

.include “p33fj32mc204.inc”

.global

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

ным внутри файла, использоваться в другом файле. Пример:

28

.global __reset

.global __OscillatorFail

Вданномпримереметкисделаны глобальными, чтобы компоновщик ис-

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

лении соответствующих событий. Метка __reset используется для обозначения начала кода и используется как адрес для перехода из векторасброса.

.section

Директива декларирует секцию памяти. Атрибутами, следующими за ди-

рективой, задается расположение секции – например, в памяти RAM либо в программной памяти.

.data

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

ции не определён, то он будет назначен автоматически при связи объектных фай-

лов.

.text

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

щий код будет помещён в секцию программной памяти.

.equ

Директива используется для определения символа и присвоения ему зна-

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

.equ FCY, #7370000

В данном примере символу FCY присваивается литеральное значение

7370000. В таком контексте FCY является константой, которая может исполь-

зоваться в коде.

29

.hword

Директива используется для объявления инициализированных данных в пределах секции. Данные могут быть в виде констант, внутренних и внешних меток или их выражений. Пример использования директивы:

MinX: .hword 0x7FFF

.extern

Директива используется для объявления переменной либо метки, которая может использоваться в данном файле кода, однако определена как глобальная в другом файле. Пример использования директивы:

.externlabel

.end

 

 

Директива .end используется

для обозначения

окончания ас-

семблерного исходного файла. Пример использования директивы:

.list p=p33fj32mc204 ; текст программы

.end

1.4. Числовые константы и системы счисления

MPASM поддерживает шестнадцатеричную, десятичную и двоичную си-

стемы счисления. Для обозначения числового значения используется символ

«#».

Синтаксические правила числовых значений приведены в таблице 3.

 

 

 

Таблица 3

 

Синтаксис числовых значений

 

 

 

 

 

Тип

 

Синтаксис

Пример

Шестнадцатеричный

 

0x< числовое значение >

#0x9f

Десятичный

 

<числовое значение>

#123

Двоичный

 

0b<числовое значение>

#0b11

 

30

 

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