Методические указания
1 Краткие теоретические сведения
1. 1 Обзор MPLAB ASM30 Ассемблера
Язык Ассемблера – машинно-ориентированный язык низкого уровня с командами, соответствующими командам микроконтроллера.
Условно текст программы на Ассемблере можно разбить на два блока:
–блок определений;
–блок кода.
В блоке определений указывается модель используемого МК, подключаются заголовочные файлы, объявляются константы и переменные, содержатся иные директивы, определяющие параметры работы Ассемблера и варианты сборки программы. В блоке кода содержатся непосредственно исполняемые микроконтроллером инструкции, сгруппированные в подпрограммы и обработчики событий.
Основу языка Ассемблера составляют директивы и инструкции. Директивы Ассемблера интерпретируются во время выполнения работы Ассемблера и используются для определения секций памяти, инициализации констант, декларирования и определения символов и т.д. Инструкции являются командами микроконтроллера, непосредственно исполняются им во время работы.
1. 2 Общий формат инструкций и директив
Общий формат инструкций и директив Ассемблера следующий:
[метка:] инструкция [операнды] [;комментарии] [метка:] директива [аргументы] [;комментарии]
Таким образом, каждая строка исходного файла может содержать до четырёх информационных полей:
-метка;
-мнемоника команды;
-операнды команды;
-комментарии.
Метки используются для отметки позиции в коде. Во время компоновки, метки определяют адреса в памяти. Метки должны начинаться с первой колонки. За меткой должно следовать двоеточие «:». Метка должна начинаться с символа латинского алфавита или двойного символа подчеркивания «__» и может состоять из цифр и букв латинского алфавита и символа подчеркивания «__».
61
Мнемоники инструкций микроконтроллера, директивы Ассемблера и макрокоманды должны начинаться со второй (и далее) колонки.
Операнды и аргументы следуют за мнемоникой команды. Операнды должны быть отделены от мнемоники не менее чем одним символом пробела либо табуляции. Список операндов разделяется запятыми. Операнды используются в инструкциях для обеспечения информации об источнике и приемнике. Аргументы подобны операндам и используются как источник и приемник информации директив.
Любой текст до конца строки после символа «;» трактуется как комментарий. Комментарии могут следовать за операндами, мнемониками и метками и могут начинаться в любой колонке.
1. 3 Директивы Ассемблера
Существует пять основных типов директив:
-директивы контроля – управляют созданием разделов условно компилированного кода;
-директивы данных – управляют разделением памяти и назначением символических имен переменным и константам;
-директивы листинга – определяют формат и состав файла листинга. Эти директивы позволяют указывать заголовки, нумеровать страницы и настраивать другие параметры;
-макро директивы – управляют работой макросов и распределением данных в теле макроса;
-директивы объектного файла – используются только при создании объектного файла.
Основные директивы Ассемблера перечислены ниже.
Директива .list используется для управления процессом сборки программы. В частности, с помощью данной директивы можно указать используемый микроконтроллер, систему счисления по умолчанию, параметры работы со строками и т.д. Пример использования директивы:
.list p=p33fj32mc204.
Директива .include добавляет содержимое указанного файла в исходный файл. Эффект аналогичен копированию полного текста включаемого файла в место расположения директивы. Параметр директивы – подключаемый файл
– может указываться как с полным путем, так и без. Во втором случае поиск файла будет осуществляться в текущей рабочей директории, директории исходного файла и служебных директориях. Пример использования директивы:
.include “p33fj32mc204.inc”.
Директива .global используется для того, чтобы позволить меткам, определённым внутри файла, использоваться в другом файле. Пример использования директивы:
62
.global __reset.
Вданном примере метки сделаны глобальными, чтобы компоновщик мог использовать их как адрес для перехода программы в указанные точки при наступлении соответствующих событий. Метка __reset используется для обозначения начала кода и используется как адрес для перехода из вектора сброса.
Директива .section декларирует секцию памяти. Атрибутами, следующими за директивой, задается расположение секции – например, в памяти RAM либо в программной памяти. Пример использования директивы:
.section .data.
Директива .data используется для информирования Ассемблера, что последующие данные будут помещены в секцию инициализированных данных. Если адрес секции не определен, то он будет назначен автоматически при связи объектных файлов.
Директива .text используется для информирования Ассемблера, что следующий код будет помещён в секцию программной памяти.
Директива .equ используется для определения символа и присвоения ему значения. Пример использования директивы:
.equ FCY, #7370000.
Вданном примере символу FCY присваивается литеральное значение 7370000. В таком контексте FCY является константой, которая может использоваться в коде.
Директива .end используется для обозначения окончания ассемблерного исходного файла. Пример использования директивы:
.list p=p33fj32mc204.
;текст программы
.end
1.4 Числовые константы и системы счисления
MPASM поддерживает шестнадцатеричную, десятичную и двоичную системы счисления. Для обозначения числового значения используется символ
«#».
Синтаксические правила числовых значений приведены в таблице 18.2.
Таблица 18.2 – Синтаксис числовых значений
Тип |
Синтаксис |
Пример |
Шестнадцатеричный |
0x< числовое значение > |
#0x9F |
|
|
|
Десятичный |
<числовое значение> |
#123 |
Двоичный |
0b<числовое значение> |
#0b11 |
63
2 Тренировочный пример составления исходного кода программы
Задача: Вычислить значение выражения (25 + 13) × (18 – 9), результаты промежуточных вычислений хранить в регистрах. Выделить младшую тетраду результата и поместить её в старшую. Проверить корректность выполнения алгоритма и результаты промежуточных вычислений в симуляторе. Указать результат выполнения алгоритма.
Алгоритм решения задачи представлен на рисунке 18.18. Листинг тренировочной программы:
.include
"P33FJ32MC204.inc"
.global __reset |
|
|
__reset: |
|
;Метка начала исходного файла |
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, сдвиг влево на |
|
|
;12 разрядов |
.end |
|
;Конец исходного файла |
Результат выполнения алгоритма – регистр W6 содержит значение 0x6000.
64
Начало
Ввод
W2 = W1 + W2
W5 = W3 – W4
W6 = W2 × W5
W6 = W6 ^ #0x000F
W6 = W6 << 12
Конец
Рисунок 18.18 – Схема алгоритма к тренировочному заданию
ЛАБОРАТОРНАЯ РАБОТА № 19
ИССЛЕДОВАНИЕ УСТРОЙСТВ ВВОДА-ВЫВОДА ДИСКРЕТНЫХ СИГНАЛОВ В МИКРОПРОЦЕССОРНЫХ СИСТЕМАХ НА БАЗЕ МИКРОКОНТРОЛЛЕРА СЕМЕЙСТВА dsPIC33F
Цель работы
1 Изучить структуру и особенности работы портов микроконтроллеров (МК) семейства dsPIC33F.
2 Изучить схему подключения входных и выходных дискретных сигналов к МК dsPIC33F.
3 Изучить особенности программирования ввода-вывода дискретных сигналов на языке программирования C.
4 Создать проект, составить исходный код программы ввода-вывода дискретных сигналов по заданному алгоритму, откомпилировать ее в среде MPLAB IDE 8, записать в память программ МК dsPIC33FJ32MC204 учебного стенда НТЦ-31.000 и выполнить.
5 Исследовать работу дискретных входов и выходов.
Подготовка к выполнению работы
1 Изучить по [1] структуру и особенности работы портов МК dsPIC33FJ32MC204.
2 Изучить по [2] схему подключения входных и выходных дискретных сигналов к МК.
65
3 Изучить алгоритмы и исходные коды программ на языке программирования С, приведенные в методических указаниях.
4 Подготовить ответы на вопросы для самоконтроля.
5 Подготовить заготовку отчета (см. содержание отчета).
Вопросы для самоконтроля
1 Дайте определение дискретного сигнала.
2 Приведите пример устройства либо механизма, выходной, сигнал которого является дискретным.
3 Приведите пример устройства либо механизма, управление которым осуществляется дискретным сигналом.
4 Дайте краткое описание структуры линии порта, объединенной с выводами периферийных функций
Приборы, оборудование и документация
1 Персональный компьютер.
2 Учебный стенд НТЦ – 31.000.
3 Методические указания к лабораторной работе.
4 MPLAB IDE 8. Руководство пользователя.
Порядок выполнения работы
1 Проверка подготовки учащихся к занятию по вопросам для самоконтроля в виде фронтального или программированного опроса и инструктаж по технике безопасности.
2 Произвести внешний осмотр учебного стенда и персонального компьютера (ПК) и убедиться визуально в отсутствии каких-либо повреждений и дефектов.
3 Подключить стенд к сети. Включить тумблер «Сеть» на задней панели стенда. 4 С помощью кабеля USB AM-BM через гнездо «USB» на задней панели стенда
подключить стенд к USB – порту ПК.
5 Включить ПК и запустить MPLAB IDE 8.
6 Задание № 19.1. Создать проект LR19_1 для учебного стенда НТЦ-31.000, который реализует следующее условие: отображать на светодиоде VD1 состояние тумблера SA1, а на VD2 – состояние SA2. Схема алгоритма и листинг (исходный код) программы к заданию № 19.1 приведены в методических указаниях к данной лабораторной работе.
6.1 Выполнить пункты 2.1…2.7 руководства пользователя MPLAB IDE 8. При этом в пункте 2.4 в качестве инструмента программирования «Active Toolsuite» установите «Microchip C30 Toolsuite», а в качестве языка программирования «Toolsuite Сontents» выберите язык программирования C (MPLAB С30)
66
(рисунок 19.1), а в пункте 2.5 выбора каталога для сохранения проекта укажите
LR19_1.
Рисунок 19.1 – Выбор инструмента и языка программирования
6.2 С помощью пункта меню «File Import» (рисунок 19.2) открыть исходный файл к заданию № 19.1. В каталоге файлов исходных кодов программ «Files LR17…LR20» на локальном диске D выбрать «LR19_1.hex».
Рисунок 19.2 – Выбор исходного файла к заданию № 19.1
67
6.3С помощью пункта меню «Programmer Select Programmer»
выбрать программатор PICkit2.
6.4Запрограммировать МК стенда НТЦ-31.000 созданной программой,
используя пункт меню «Programmer Program».
Результат программирования отобразится в окне сообщений, и в случае успешного программирования (сообщение - …PICkit2 Ready) необходимо перевести МК в рабочий режим с помощью пункта меню «Programmer Release From Reset».
6.5 После получения сообщения указанного на рисунке 19.3 МК запрограммирован.
Рисунок 19.3 – Сообщение о результатах прошивки МК программой к заданию № 19.1
6.6 Проверить влияние положения датчиков дискретных сигналов (тумблеры SA1 и SA2) на дискретные светодиодные индикаторы (светодиодные индикаторы VD1 и VD2).
7 Задание № 19.2. Создать проект для учебного стенда НТЦ-31.000, который реализует следующее условие: если SA1 = 1 и SA2 = 0 то VD1 = 0 и VD2 = 0, если SA1 = 0 и SA2 = 1, то VD1=1, VD2 = 1, если SA1 = SA2, то
VD1=0, VD2 = 1. Схема алгоритма и листинг (исходный код) программы к
68
заданию № 19.2 приведены в методических указаниях к данной лабораторной работе.
7.1Выполнить пункты 2.1…2.4 руководства пользователя MPLAB IDE 8. При этом в пункте 2.4 в качестве инструмента программирования установите «Microchip C30 Toolsuite» и выберите язык программирования С.
7.2В окне выбора пути к каталогу сохранения файлов проекта выберите «Browse…». В открывшемся окне (рисунок 19.4) выберите путь: «Мой компьютер\Локальный диск D\Lan\DSPIC33\TE111\Ivanov\LR19_2\».
Рисунок 19.4 – Окно выбора пути к каталогу сохранения файла
Примечание – Фамилию учащегося, набранную буквами английского алфавита, выбрать из списка своей учебной группы и создать папку для лабораторной работы LR19_2 и нажать кнопку «Сохранить». Окно выбора пути к каталогу будет иметь вид, показанный на рисунке 19.5. Нажмите кнопку «Далее».
69
Рисунок 19.5 – Выбор каталога для сохранения проекта к заданию № 19.2
7.3 В открывшемся окне (рисунок 19.6) добавить существующие файлы в проект: «+С:\+ProgrammFiles(x86)\+Microchip\+MPLABC30\+support\ +dsPIC33F\+gld\+p33FJ32MC204.gld». Нажмите кнопку «Далее».
Рисунок 19.6 – Окно добавления существующих файлов в проект
70
