Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

ИССЛЕДОВАНИЕ СИСТЕМЫ УПРАВЛЕНИЯ ИСПОЛНИТЕЛЬНОГО УРОВНЯ НА МИКРОКОНТРОЛЛЕРАХ

Работа добавлена на сайт samzan.net:


ФГБОУ ВПО «Воронежский государственный
технический университет»

Кафедра робототехнических систем

ИССЛЕДОВАНИЕ СИСТЕМЫ УПРАВЛЕНИЯ ИСПОЛНИТЕЛЬНОГО УРОВНЯ НА МИКРОКОНТРОЛЛЕРАХ  

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

к выполнению лабораторной работы № 18
по дисциплине "Микропроцессорная техника
в мехатронике и робототехнике"
для студентов направления 221000.62
«Мехатроника и робототехника»

(профиль «Промышленная и специальная робототехника»)

очной формы обучения

Воронеж  2013


Составители:  канд. техн. наук М.И. Герас
имов,

                        инженер Н.С.Лесных

                

УДК 681.3-181.48:621.865.8

Исследование системы управления исполнительного уровня на микроконтроллерах: методические указания к выполнению лабораторной работы № 18 по дисциплине "Микропроцессорная техника в мехатронике и робототехнике" для студентов направления 221000.62 «Мехатроника и робототехника» (профиль «Промышленная и специальная робототехника») очной формы обучения / ФГБОУ ВПО «Воронежский государственный технический университет»; сост. М.И. Герасимов, Н.С.Лесных. Воронеж, 2013. 35 с.

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

Методические указания предназначены для студентов 3 курса. Они будут полезны студентам при изучении данной дисциплины и написании дипломной работы.

Методические указания подготовлены в электронном виде в текстовом редакторе MS Word 2003 и содержатся в файле
МУ_ МПТ_ЛР_17
.doc.

Табл. 6. Ил. 5. Библиогр.: 9 назв.

Рецензент канд. техн. наук, доц. В.А. Медведев

Ответственный за выпуск зав. кафедрой
д-р техн. наук, проф. А.И. Шиянов

Издается по решению редакционно-издательского совета Воронежского государственного технического университета

© ФГБОУ ВПО «Воронежский государственный технический университет», 2013


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

Теоретические  сведения

1. Структура системы управления

Система управления РТК – это обычно многопроцессорная система, в состав которой входят ЭВМ и микропроцессорные устройства (МПУ) с целевыми функциями. Эти МПУ в составе собственно микропроцессора, устройств хранения информации и средств связи с объектами, называются микроконтроллерами (МК). В общем случае элементы объекта управления принимают из микроконтроллера сигналы управления в цифровом и аналоговом виде и формируют для передачи в микроконтроллер сигналы состояния в цифровом и аналоговом виде.

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

Структурная схема лабораторного стенда имеет вид, приведенный на рис. 1. Для получения доступа к памяти программ МК (с целью его перепрограммирования в ходе экспериментов) в плату управления добавлен интерфейс внутрисхемной отладки JTAG. Сопряжение ШД и микроконтроллера выполнено через блок силовых ключей – драйверов. Помимо этого,  в состав схемы входят индикаторные узлы, позволяющие визуально наблюдать чередование сигналов в фазах двигателя.

Рис. 1. Структурная схема лабораторного стенда

Платы управления и отладчика получают питание + 5 В от блока питания ПК, от него же на общую точку обмоток двигателя подается + 12 В.

2. Описание платы управления,
используемой в лабораторной работе

Принципиальная схема платы управления приведена на рис. 2. Основным элементом является DD1 – микроконтроллер ATMega 162 /1, 2/, формирующий сигналы для коммутации обмоток ШД (в работе используется 4-фазный ШД). Частота коммутации обмоток (соответственно частота вращения) определяется временем задержки, задаваемым программно, порядок коммутации зависит от значений, засылаемых в каждый из разрядов порта, управляющего силовыми ключами (микросхема DA1, ULN2003A).

С выходов РA.0, РA.1, РA.2, РA.3 микросхемы DD1 управляющие сигналы через микросхему-ключ DА1 подаются на шаговый двигатель и на подключенный параллельно ему узел индикации.

Рис. 2. Схема платы управления двигателем

Узел индикации состоит из четырех светодиодов HL1-HL4 и включенных последовательно им токоограничивающих резисторов номиналом 330 Ом.

Микросхема ULN2003 представляет собой набор мощных составных ключей с защитными диодами на выходе. Наличие защитных диодов позволяет подключать  индуктивные нагрузки без дополнительной защиты от выбросов обратного напряжения (см. ниже). Номинальный ток коллектора (одного ключа) составляет 500 мА. Схема внутреннего устройства этих микросхем приведена на рис. 3. Подробные сведения о данной микросхеме доступны на www.docs.chipfind.ru.

Рис. 3. Схема внутреннего устройства ULN2003A
(
COM означает общую точку схемы)

В качестве объекта управления в данной работе используется миниатюрный шаговый двигатель с общей точкой обмоток. Самая простая схема управления таким шаговым двигателем (ШД) изображена на рис. 4. Видно, что каждая обмотка ШД последовательно соединена с ключом (переключателем), состояние которого (разомкнуто или замкнуто) определяется управляющими сигналами, поступающими с контроллера (на рисунке не показан). При замыкании ключа через соответствующую обмотку ШД протекает электрический ток и вал двигателя поворачивается на некоторый угол. Порядок переключения обмоток определяет направление вращения вала двигателя.

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

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

Есть два основных варианта решения задачи защиты ключа. Первый из них состоит в том, чтобы включить параллельно обмотке диод так, как показано на рис. 5,а. Вторым решением является подключение параллельно обмотке конденсатора (рисунок 5,б).

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

При подключении конденсатора параллельно обмотке необходимо учитывать следующее – при замыкании ключа конденсатор

  а    б

Рис. 5

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

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

3. Описание системы отладки 

Для просмотра и изменения внутреннего состояния исследуемого устройства управления шаговым двигателем используется отладчик-программатор JTAG MiniICE 1 и персональный компьютер (ПК) с установленной системой интегрированной разработки AVR Studio. С помощью JTAG MiniICE можно пошагово отлаживать программу, останавливать её в любой момент времени и при этом наблюдать всё, что происходит в регистрах МК. Принципиальная схема отладчика представлена на рис. 6.

Рис. 6. Схема JTAG MiniICE

Основой платы отладчика является микроконтроллер ATMega16 (DD1), выполняющий основные операции по обмену данными между ПК и исследуемым устройством. Архитектура и внутреннее устройство данного МК схожи с ATMega 162, который был описан выше.

Для подключения отладчика  к ПК используется последовательный порт, согласование уровней сигналов порта и ТТЛ осуществляется микросхемой DD2 – MAX232.

MAX232 – интегральная схема, преобразующая сигналы последовательного порта RS-232 в сигналы, пригодные для использования в цифровых логических схемах на транзисторно-транзисторной логике. MAX232 работает приемопередатчиком и преобразует сигналы RX, TX, CTS и RTS. Схема обеспечивает уровень выходного сигнала, принятый в RS-232 (приблизительно ± 7.5 В), преобразуя входное напряжение + 5 В при помощи внутренних генераторов подкачки заряда и внешних конденсаторов. Это упрощает реализацию RS-232 в устройствах, работающих на напряжениях от 0 до + 5 В, так как не требуется усложнять источник питания только для того, чтобы использовать RS-232. Входное напряжение от RS-232, которое может достигать ± 25 В, понижается до стандартных 5 В, используемых в транзисторно-транзисторной логике. Входы имеют средний порог 1.3 В и средний гистерезис 0,5 В.

Полезно понимать, что происходит с уровнями напряжения. Когда схема MAX232 получает на вход логический "0" от ТТЛ, она преобразует его в напряжение от +3 до +15В, а когда получает логическую "1" – преобразует её в напряжение от -3 до -15В, и по тому же принципу выполняет обратные преобразования от RS-232 к ТТЛ. В протоколе RS-232 напряжение, используемое для логических состояний при передачи данных, противоположно напряжению, которое используется для тех же логических состояний при передаче команд управления – табл. 1.

Связь между отладчиком и исследуемым устройством осуществляется по протоколу JTAG (сокращение англ. Joint Test Action Group) — специализированному аппаратному интерфейсу, разработанному для тестирования собранных печатных плат (с использованием стандарта IEEE 1149.1). Из-за широкой функциональности JTAG стал повсеместно использоваться для отладки и программирования.  Порт  тестирования  (англ. Test  Access  Port)  представляет

Таблица 1

Тип линии и логический уровень RS-232

Напряжение RS-232

Напряжение от ТТЛ к MAX232 или обратно

Линия данных (Rx/Tx), логический "0"

от +3 В до +15 В

0 В

Линия данных (Rx/Tx), логическая "1"

от -3 В до -15 В

5 В

Управляющие сигналы (RTS/CTS/DTR/DSR), логический "0"

от -3 В до -15 В

5 В

Управляющие сигналы (RTS/CTS/DTR/DSR), логическая "1"

от +3 В до +15 В

0 В

собой четыре или пять выделенных линий микросхемы: ТСК, TMS, TDI, TDO, ~TRST (опционально). Функциональное назначение этих линий:

TDI (вход тестовых данных) — вход последовательных данных периферийного сканирования. Команды и данные вдвигаются в микросхему с этого вывода по переднему фронту сигнала TCK;

TDO (выход тестовых данных) — выход последовательных данных. Команды и данные выдвигаются из микросхемы с этого вывода по заднему фронту сигнала TCK;

TCK (вход тестового тактирования) — тактирует работу встроенного автомата управления периферийным сканированием. Максимальная частота сканирования периферийных ячеек зависит от используемой аппаратной части и на данный момент ограничена 25…40 МГц;

TMS (вход управления тестированием) — обеспечивает выбор режима тестирования.

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

Работа средств обеспечения интерфейса JTAG подчиняется сигналам автомата управления, встроенного в микросхему. Состояния автомата определяются сигналами TDI и TMS порта тестирования. Определённое сочетание сигналов TMS и TCK обеспечивает ввод команды для автомата и её исполнение.

Предварительное задание

  1.  Изучите сведения о шаговых двигателях. В случае надобности используйте файлы учебных материалов и лекции.
  2.  Повторите сведения об интегрированной среде разработки AVR Studio  и примерах ее использования по /2/.
  3.  Откройте в каталоге test2_asm папки ЛР18 файл test2_asm.asm с помощью Блокнота, изобразите графически программные модули /*Основная программа*/, /*Обработчик прерывания по таймеру*/ и связи между ними, используя стандартный стиль /3/ или стиль Algorithm Builder /4/.
  4.  Сравните разработанную вами программу LR19_2 из лабораторной работы № 19 (бегущая единица по разрядам порта B) с программой из test2_asm. Рассмотрите различия в порядке действий, докажите приемлемость обоих вариантов. Обратите внимание на то, что операция смещения единицы на выводах порта включена в подпрограмму обработки прерываний от таймера и что основная программа завершается входом в цикл ожидания прерывания.
  5.  Изучите рабочее задание и подготовьтесь к его выполнению.

Рабочее задание

  1.  Соберите схему (см. рис. 1) в соответствии с рис. 7.

Рис. 7

  1.  Запустите AVR Studio, откройте в нем новый проект под именем LR20_1 в своем каталоге в папке Users (Напоминание: имя каталога и весь путь к нему НЕ должны содержать знаков КИРИЛЛИЦЫ!), скопируйте в него текст программы из test2_asm. Замените во всех командах обмена с portA регистр r16 на какой-либо другой РОН, например r20, замените также в команде «сдвиг на 1 бит влево» регистр r16 на выбранный вами РОН.
  2.  Выберите в главном меню программы DebugSelect Platform and Device… (рис. 8):  из появившегося списка отметьте JTAG ICE (Debug Platform) и ATmega 162 (Device).

Теперь нажмите клавишу F7, пиктограмму Assemble или выберите пункт Build в меню Build, в результате чего начнется трансляция программы. Затем выберите пункт меню DebugStart Debugging или соответствующую пиктограмму для запуска отладки (см. рис. 8). В результате программа из вашего проекта загрузится в память программ МК ATMega 162 и вы получите доступ к ресурсам этого МК для пошаговой отладки.

Напоминание: при отладке программы следует уменьшать интервалы таймеров и коэффициент предделителя относительно расчетных, если они слишком велики, поскольку в процессе отладки в AVR Studio программа выполняется в тысячи раз медленнее, чем внутри МК и вы не дождетесь срабатывания таймера (см. работу № 19).

  1.  Откройте окна Register и I/O View/PortA. Перемещаясь по листингу с помощью клавиш F11, F10, отследите выполнение команд модуля *Основная программа*. Для анализа модуля *Обработчик прерывания по таймеру* установите курсор на его начало и дайте команду Run to cursor (Ctrl+F10). Опробуйте управление ШД, если есть ошибки, измените программу, заново постройте проект, вновь запустите Start Debugging и снова проверьте работу программы.
  2.  Проверьте в окне I/O View/WatchDog состояние битов регистра WDTCR (рис. ХХ). Краткое описание назначения битов управления стандартным WDT, который используется в ATmega162x,  приведено в табл. ХХ.

Рис. ХХ

Рис. 8. Главное меню, выбор средства отладки и исследуемого МК

Табл. ХХ

Бит

Название

Краткое описание

7...5

Зарезервировано, читается как 0

4

WDCE

Разрешение изменения конфигурации
сторожевого таймера

3

WDE

Разрешение сторожевого таймера (1 — включен)

2

WDP2

Коэффициент деления предделителя
сторожевого таймера (значения периода заполнения сторожевого таймера – табл. ХХХ)

1

WDP1

0

WDP0

Табл. ХХХ

Если сторожевой таймер включен, то он будет выполнять сброс программы МК в момент своего переполнения. Для корректного использования WDT его период должен быть больше периода повторения технологической программы, а программа должна содержать команду WDR, обнуляющую сторожевой таймер. Для выключения сторожевого таймера или для изменения периода тайм-аута необходимо одной командой записать лог. 1 в разряды WDE и WDTCE, а в течение следующих четырех машинных циклов записать тоже одной командой требуемые значения в разряды WDE и/или WDP2…0, одновременно сбрасывая разряд WDCE (режим управления 1) /Евст/. При выполнении данной работы сторожевой таймер должен быть выключен.

  1.  Возвратите интервалы таймеров и коэффициент предделителя  (см. п. 4) к расчетным значениям, выйдите из режима отладки (Stop Debugging), наблюдайте работу шагового двигателя и светодиодов индикации в темпе работы МК.
  2.  Вернитесь в режим отладки, подберите параметры таймера, дающие возможность наблюдать чередование фаз в темпе работы МК, затем подберите максимальную скорость вращения без проскоков, запишите эти значения в отчет, сохраните проект.
  3.  В новом экземпляре AVR Studio откройте новый проект под именем LR20_2, перепишите в него текст программы из LR20_1, закройте прежний экземпляр. Переработайте программу так, чтобы логические единицы в биты порта А выводились в обратном порядке. Опробуйте работу ШД, сохраните проект.
  4.  Аналогично предыдущим пунктам откройте новый проект под именем LR20_3, перепишите в него текст программы из LR20_2, закройте прежний проект. Переработайте программу так, чтобы в порте А перемещались две смежные логические единицы. Обратите внимание на их переход с одного края разрядной сетки на другой. Доработайте программу так, чтобы переход происходил через состояние 1001. Опробуйте управление ШД и сохраните проект. Поясните, как влияет такое управление на момент двигателя.
  5.  Откройте новый проект под именем LR20_4. Предложите алгоритм управления ШД с дроблением шага пополам, составьте и опробуйте соответствующую программу. Целесообразно при этом использовать ОЗУ контроллера, занеся в нее последовательность включения обмоток в виде кодов и считывая их циклически. Следует учесть, что в модели МК ATMega 162 фактическое адресное пространство ОЗУ начинается с адреса 0x0100. Полезно предварительно восстановить в своей памяти навыки работы с ОЗУ, полученные при выполнении второго задания из лабораторной работы № 18 /../ и в ходе выполнения заданий по курсу «Программирование роботов». Во время отладки пользуйтесь окнами I/O View/PortA, Register и Memory/Data. Возвратите интервалы таймеров и коэффициент предделителя  (см. п. 4) к значениям, дающим возможность наблюдать чередование фаз в темпе работы МК, выйдите из режима отладки (Stop Debugging), наблюдайте работу шагового двигателя и светодиодов индикации в темпе работы МК.
  6.  
  7.  Составьте отчет по перечисленным выше пунктам, включая скриншоты программ и экранов эмуляции. Выделите в пунктах отчета полученные навыки составления программ и навыки пользования интегрированной средой разработки AVR Studio, запишите отчет в файл под именем LR20 в той же папке, что и программные модули.
  8.  Покажите результаты преподавателю, ответьте на его вопросы.
  9.  Дополнительное задание к защите отчета. Предложите алгоритм задания одиночного шага двигателя и N шагов. Источником команды (Step) должна быть кнопка с механическим замыкающим контактом, режим ввода – требование прерывания, число N задается кодом на выводах одного из портов. Продумайте выбор вывода микросхемы для сопряжения с кнопкой и его настройку, защиту от дребезга,  


ПРИЛОЖЕНИЕ 1

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

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

CSEG - Программный сегмент

Директива CSEG определяет начало программного сегмента. Исходный файл может состоять из нескольких программных сегментов, которые объединяются в один программный сегмент при компиляции. Программный сегмент является сегментом по умолчанию. Программные сегменты имеют свои собственные счётчики положения, которые считают не побайтно, а пословно. Для размещения кода и констант в необходимом месте сегмента может быть использована директива ORG. Директива CSEG не имеет параметров.

Синтаксис:
.CSEG 

Пример:
.DSEG                       ; Начало сегмента данных
vartab: .BYTE 4             ; Резервирует 4 байта в ОЗУ 

.CSEG                       ; Начало кодового сегмента
const:  .DW 2               ; Разместить константу 0x0002
                           ; в памяти программ

        mov r1,r0           ; Выполнить действия

DEF - Назначить регистру символическое имя

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

Синтаксис:
.DEF Символическое_имя = Регистр 

Пример:
.DEF temp=R16
.DEF ior=R0 

.CSEG
 ldi temp,0xf0  ; Загрузить 0xf0 в регистр temp (R16)
 in ior,0x3f  ; Прочитать SREG в регистр ior (R0)
 eor temp,ior  ; Регистры temp и ior складываются по исключающему или

DSEG - Сегмент данных

Директива DSEG определяет начало сегмента данных. Исходный файл может состоять из нескольких сегментов данных, которые объединяются в один сегмент при компиляции. Сегмент данных обычно состоит только из директив BYTE и меток. Сегменты данных имеют свои собственные побайтные счётчики положения. Директива ORG может быть использована для размещения переменных в необходимом месте ОЗУ. Директива не имеет параметров.

Синтаксис:
.DSEG  

Пример:
.DSEG                     ; Начало сегмента данных
var1:  .BYTE 1            ; зарезервировать 1 байт для var1
table: .BYTE tab_size     ; зарезервировать tab_size байт. 

.CSEG
       ldi r30,low(var1) ; Загрузить младший байт регистра Z
       ldi r31,high(var1); Загрузить старший байт регистра Z
       ld r1,Z           ; Загрузить var1 в регистр r1 

ENDMACRO - Конец макроса

Директива определяет конец макроопределения, и не принимает никаких параметров. Для информации по определению макросов смотрите директиву MACRO.

Синтаксис:
.ENDMACRO  

Пример:
.MACRO SUBI16               ; Начало определения макроса
        subi r16,low(@0)    ; Вычесть младший байт первого параметра
        sbci r17,high(@0)   ; Вычесть старший байт первого параметра
.ENDMACRO 

EQU - Установить постоянное выражение

Директива EQU присваивает метке значение. Эта метка может позднее использоваться в выражениях. Метка которой присвоено значение данной директивой не может быть переназначена и её значение не может быть изменено.

Синтаксис:
.EQU метка = выражение 

Пример:
.EQU io_offset = 0x23
.EQU porta     = io_offset + 2 

.CSEG                 ; Начало сегмента данных
        clr r2        ; Очистить регистр r2
        out porta,r2  ; Записать в порт A 

EXIT - Выйти из файла

Встретив директиву EXIT компилятор прекращает компиляцию данного файла. Если директива использована во вложенном файле (см. директиву INCLUDE), то компиляция продолжается со строки, следующей после директивы INCLUDE. Если же файл не является вложенным, то компиляция прекращается.

Синтаксис:
.EXIT

Пример:
.EXIT  ; Выйти из данного файла

INCLUDE - Вложить другой файл

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

Синтаксис:
.INCLUDE "имя_файла" 

Пример:
; файл iodefs.asm:
.EQU sreg   = 0x3f     ; Регистр статуса
.EQU sphigh = 0x3e     ; Старший байт указателя стека
.EQU splow  = 0x3d     ; Младший байт указателя стека 

; файл incdemo.asm
.INCLUDE iodefs.asm    ; Вложить определения портов
        in r0,sreg     ; Прочитать регистр статуса 

LIST - Включить генерацию листинга

Директива LIST указывает компилятору на необходимость создания листинга. Листинг представляет из себя комбинацию ассемблерного кода, адресов и кодов операций. По умолчанию генерация листинга включена, однако данная директива используется совместно с директивой NOLIST для получения листингов отдельных частей исходных файлов.

Синтаксис:
.LIST

Пример:
.NOLIST                ; Отключить генерацию листинга
.INCLUDE "macro.inc"   ; Вложенные файлы не будут
.INCLUDE "const.def"   ; отображены в листинге
.LIST                  ; Включить генерацию листинга 

MACRO - Начало макроса

С директивы MACRO начинается определение макроса. В качестве параметра директиве передаётся имя макроса. При встрече имени макроса позднее в тексте программы, компилятор заменяет это имя на тело макроса. Макрос может иметь до 10 параметров, к которым в его теле обращаются через @0-@9. При вызове параметры перечисляются через запятые. Определение макроса заканчивается директивой ENDMACRO.

Макрос в листинге показывается знаком +.

 
Синтаксис:
.MACRO макроимя 

Пример:
.MACRO SUBI16                   ; Начало макроопределения
        subi @1,low(@0)         ; Вычесть младший байт параметра 0 из параметра 1
        sbci @2,high(@0)        ; Вычесть старший байт параметра 0 из параметра 2
.ENDMACRO                       ; Конец макроопределения

.CSEG                           ; Начало программного сегмента
        SUBI16 0x1234,r16,r17   ; Вычесть 0x1234 из r17:r16 

NOLIST - Выключить генерацию листинга

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

Синтаксис:
.NOLIST 

Пример:
.NOLIST                ; Отключить генерацию листинга
.INCLUDE "macro.inc"   ; Вложенные файлы не будут
.INCLUDE "const.def"   ; отображены в листинге
.LIST                  ; Включить генерацию листинга 

ORG - Установить положение в сегменте

Директива ORG устанавливает счётчик положения равным заданной величине, которая передаётся как параметр. Для сегмента данных она устанавливает счётчик положения в SRAM (ОЗУ), для сегмента программ это программный счётчик, а для сегмента EEPROM это положение в EEPROM. Если директиве предшествует метка (в той же строке), то метка размещается по адресу, указанному в параметре директивы. Перед началом компиляции программный счётчик и счётчик EEPROM равны нулю, а счётчик ОЗУ равен 32 (поскольку адреса 0-31 заняты регистрами). Обратите внимание: для ОЗУ и EEPROM используются побайтные счётчики, а для программного сегмента - пословный.

Синтаксис:
.ORG выражение 

Пример:
.DSEG             ; Начало сегмента данных

.ORG 0x37         ; Установить адрес SRAM равным 0x37
variable: .BYTE 1 ; Зарезервировать байт по адресу 0x37H 

.CSEG
.ORG 0x10       ; Установить программный счётчик равным 0x10
     mov r0,r1  ; Данная команда будет размещена по адресу 0x10

SET - Установить переменный символический эквивалент выражения

Директива SET присваивает имени некоторое значение. Это имя позднее может быть использовано в выражениях. Причем в отличии от директивы EQU значение имени может быть изменено другой директивой SET.

Синтаксис:
.SET имя = выражение 

Пример:
.SET io_offset = 0x23
.SET porta     = io_offset + 2 

.CSEG                 ; Начало кодового сегмента
        clr r2        ; Очистить регистр 2
        out porta,r2  ; Записать в порт A 

ПРИЛОЖЕНИЕ 2

Приведение вкладки в состояние  Docking

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

Если перемещать это окно при помощи мыши (удерживая его за заголовок), то на основной панели программы появляются специальные указатели размещения, как это показано на рис. 5.3. Они представляют собой стилизованные стрелки синего цвета, расположенные по всему полю главного окна программы. Одновременно появляются восемь таких стрелок. Четыре из них объединены в центральный блок, в который включена еще и круглая кнопка посередине.

Этот блок автоматически располагается в центре того окна, в пределах которого в данный момент перемещается курсор. Оставшиеся четыре стрелки располагаются по краям основного окна программы. Достаточно переместить курсор мыши вместе с перемещаемым плавающим окном на одну из этих стрелок и отпустить кнопку мыши, и окно тут же встроится в одно из вспомогательных окон программы в виде вкладки либо образует новое вспомогательное окно. Причем вы еще до отпускания кнопки мыши можете увидеть, куда окно попадет – как только ваш курсор совместится с одной из стрелок, программа закрасит синим цветом эту область. Помните только, что стрелки превращают ваше плавающее окно в еще одно фиксированное дополнительное окно в разных частях интерфейса. А круглая кнопка посреди центрального блока превращает плавающее окно в дополнительную вкладку уже существующего окна.

Рис. 5.3. Перемещение окна (на примере «Memory»)


Литература

  1.  Евстифеев А.В. Микроконтроллеры   AVR   семейства   Mega.   Руководство пользователя. – М.: Издательский дом «Додэка-ХХI», 2007.
  2.  http://www.gaw.ru/html.cgi/txt/ic/Atmel/micros/avr/atmega162.htm
  3.  http://ru.wikipedia.org/wiki/Max232
  4.  http://ru.wikipedia.org/wiki/JTAG
  5.  Программирование МК семейства AT в среде AVR  Studio: методические указания к выполнению лабораторной работы № 17 по дисциплине "Микропроцессорная техника в мехатронике и робототехнике" / М.И. Герасимов, Н.С. Лесных. Воронеж, ВГТУ, 2012.

 


СОДЕРЖАНИЕ

[0.1] Теоретические  сведения

[0.1.1] 1. Структура системы управления

[0.1.2] 2. Описание платы управления,
используемой в лабораторной работе

[0.1.3] 3. Описание системы отладки

[0.2] Предварительное задание

[0.3] Рабочее задание

[1]
ПРИЛОЖЕНИЕ 1

[1.1] Директивы ассемблера, используемые в данной работе

[1.1.1] CSEG - Программный сегмент

[1.1.2] DEF - Назначить регистру символическое имя

[1.1.3] DSEG - Сегмент данных

[1.1.4] ENDMACRO - Конец макроса

[1.1.5] EQU - Установить постоянное выражение

[1.1.6] EXIT - Выйти из файла

[1.1.7] INCLUDE - Вложить другой файл

[1.1.8] LIST - Включить генерацию листинга

[1.1.9] MACRO - Начало макроса

[1.1.10] NOLIST - Выключить генерацию листинга

[1.1.11] ORG - Установить положение в сегменте

[1.1.12] SET - Установить переменный символический эквивалент выражения

[2] ПРИЛОЖЕНИЕ 2

[2.1] Приведение вкладки в состояние  Docking

[2.2]  

[2.3]
СОДЕРЖАНИЕ

1

Milan Kostomlatsky. AVR miniICE - http://pol-sem.narod.ru/AVRminiICE/jtag.htm

Желтый провод СЛЕВА

Плата отладчика

Плата управления ШД

14

EMBED Unknown  




1. Тема заняття Опрацювання табличної інформації за допомогою логічних функцій
2. а Фамилия имя отчество год рождения национальность образование профессия семейное положение
3. Вариант 6 1 Какие клетки крови участвуют в процессе свертывания крови и следовательно защищают организм
4. Лабораторная работа Тема- Графический редактор dobe PhotoShop
5. Русские княжества в 13-14 веках
6. Гражданское процессуальное законодательство не содержит перечня участников гражданского процесса
7. Исследование рынка для нового товара
8. Понятие о формах организации обучения 2
9. 2D модели Компонент канал должен быть использован когда определяется геометрия канал будет передать значит
10. Расчет страховых тарифов агентами и брокерами
11. реферат дисертації на здобуття наукового ступеня кандидата медичних наук Харкі
12. . Роль двигательного анализаторав развитии речевой деятельности [4
13. ТЕХНИЧЕСКИЙ ФАКУЛЬТЕТ Инженернотехническому факультету Военного института инженернотехниче
14.  200 р ПОСАДОВА ІНСТРУКЦІЯ КЕРІВНИ
15. Економіка та підприємництво напряму підготовки 6
16. Учебное пособие- Клінична психологія
17. Российский государственный профессиональнопедагогический университет Институт экономики и управлени
18. Work nd tht the mteril drwn from other sources hs been ppropritely
19. Реферат Изменение рельефа Земли
20. .Проблема оптимизации дефицита и профицита федерального бюджета