Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

Практическое задание №1

Вариант 1

Написать на AVR-ассемблере и отладить в AVR Studio программу, реализующую преобразование N-байтного двоично-десятичного числа, в двоичное число. Байты исходного числа последовательно считываются с порта A. Байты результата выводятся в порт B.

Вариант 2

Произвести сложение двух беззнаковых двоично-десятичных чисел. Байты чисел последовательно вводятся с портов A и B. Байты результата выводятся в порт С.

Вариант 3

Получить результат сложения двух беззнаковых N-байтных чисел. Байты чисел последовательно вводятся с портов A и B. Байты результата выводятся в порт С.

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

AVR представляет собой 8-разрядный RISC (Redused Instruction-Set Computing) микроконтроллер, имеющий быстрое процессорное ядро, Flash-память программ ROM, память данных SRAM, порты ввода/вывода и интерфейсные схемы. Гарвардская архитектура AVR реализует полное логическое и физическое разделение не только адресных пространств, но и информационных шин для обращения к ROM и SRAM. Такое построение уже ближе к структуре цифровых сигнальных процессоров и обеспечивает существенное повышение производительности. Использование одноуровневого конвейера в AVR также заметно сократило цикл "выборка - исполнение" команды. Например, у стандартных микроконтроллеров семейства MCS-51 короткая команда выполняется за 12 тактов генератора (1 машинный цикл), в течение которого процессор последовательно считывает код операции и исполняет ее. В микроконтроллерах AVR короткая команда в общем потоке тоже выполняется за один машинный цикл, но он составляет всего один период тактовой частоты. Отличительной чертой архитектуры AVR является регистровый файл быстрого доступа, содержащий 32 байтовых регистров общего назначения. Шесть регистров файла могут использоваться как три 16-разрядных указателя адреса при косвенной адресации данных (X, Y и Z Pointers), что существенно повышает скорость пересылки данных при работе прикладной программы.

НЕ нашли? Не то? Что вы ищете?

Flash-память программ AVR может быть загружена как с помощью обычного программатора, так и с помощью SPI (Serial Peripheral Interface) –интерфейса (последовательный интерфейс для программирования периферийных устройств). Последние версии кристаллов "mega" выпуска года имеют возможность самопрограммирования (функция SPM). Все AVR имеют также блок энергонезависимой памяти данных EEPROM, доступный программе микроконтроллера непосредственно в ходе ее выполнения. EEPROM обычно используется для хранения промежуточных данных, констант, таблиц перекодировок, калибровочных коэффициентов и т. п. Эта память может быть загружена извне как через SPI интерфейс, так и с помощью обычного программатора. Два программируемых бита секретности позволяют защитить ROM и энергонезависимую память данных EEPROM от несанкционированного считывания. Внутренняя оперативная память SRAM имеется у AVR семейств "classic" и "mega", а также у одного представителя "tiny" - ATtiny26/L. Для некоторых микроконтроллеров возможна организация подключения внешней памяти данных объемом до 64К.

Внутренний тактовый генератор AVR может запускаться от внешнего генератора или кварцевого резонатора, а также от внутренней или внешней RC-цепочки (рис. 1). Все AVR полностью статические, их минимальная рабочая частота ничем не ограничена (вплоть до пошагового режима). Микроконтроллеры ATmega64/103/128 также имеют интересную архитектурную особенность, позволяющую значительно снизить энергопотребление кристалла в целом, когда в процессе работы целесообразно понизить основную тактовую частоту микросхемы. Специальный предделитель на кристалле позволяет делить основную частоту на целое число в диапазоне от 2 до 129. Включение/выключение данной функции осуществляется программно.

Рис. 1 Подключение внешней RC-цепочки

Микроконтроллеры AVR имеют от 1 до 4 таймеров/счетчиков общего назначения с разрядностью 8 или 16 бит. Модули таймеров служат для приема информации о времени наступления тех или иных событий от внешних датчиков событий, а также для формирования управляющих воздействий во времени.

Общие черты всех таймеров/счетчиков следующие:

·  наличие программируемого предделителя входной частоты с различными градациями деления. Отличительной чертой является возможность работы таймеров/счетчиков на основной тактовой частоте микроконтроллера без предварительного ее понижения, что заметно повышает точность генерации временных интервалов системы;

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

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

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

Сторожевой таймер у AVR имеет свой собственный RC-генератор с частотой 1 МГц, которая является приближенной и зависит от величины напряжения питания микроконтроллера и от температуры. Сторожевой таймер снабжен отдельным программируемым предделителем входной частоты, что позволяет подстраивать временной интервал переполнения таймера и сброса микроконтроллера. Данный таймер можно программно отключать во время работы микросхемы, как в активном режиме, так и в любом из режимов пониженного энергопотребления. В последнем случае это приводит к значительному снижению потребляемого тока.

Система реального времени (RTC) реализована во всех микроконтроллерах "mega" и в двух кристаллах "classic" - AT90(L)S8535. Таймер/счетчик RTC имеет отдельный предделитель, который может быть программным способом подключен или к источнику основной тактовой частоты, или к дополнительному асинхронному источнику опорной частоты (кварцевый резонатор или внешний синхросигнал). Для этой цели зарезервированы два вывода микросхемы. Внутренний осциллятор, нагруженный на счетный вход таймера/счетчика RTC, оптимизирован для работы с внешним "часовым" кварцевым резонатором 32,768 кГц.

Порты ввода/вывода AVR имеют число независимых линий "Вход/Выход" от 3 до 53. Выходные драйверы обеспечивают токовую нагрузочную способность 20 мА на линию порта (втекающий ток) при максимальном значении 40 мА, что позволяет непосредственно подключать к микроконтроллеру светодиоды и биполярные транзисторы. Архитектура построения портов ввода/вывода AVR с тремя битами контроля/управления (вместо двух, как это сделано у большинства 8-разрядных микроконтроллеров) позволяет разработчику полностью контролировать процесс ввода/вывода, устраняет необходимость иметь копию содержимого порта в памяти для безопасности и повышает скорость работы микроконтроллера при работе с внешними устройствами. Особую значимость приобретает данная возможность AVR при реализации систем, работающих в условиях внешних электрических помех.

Аналоговый компаратор входит в состав большинства AVR. Он имеет отдельный вектор прерывания в общей системе прерываний микроконтроллера. Тип перепада, вызывающий запрос на прерывание при срабатывании компаратора, может быть запрограммирован как фронт, срез или переключение. Важной аппаратной особенностью является то, что логический выход компаратора может быть программным образом подключен ко входу одного из 16-разрядных таймеров/счетчиков, работающего в режиме захвата. Это дает возможность измерять длительности аналоговых сигналов, а также реализовывать АЦП двухтактного интегрирования.

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

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

Система команд AVR весьма развита и насчитывает до 133 различных инструкций. Почти все команды имеют фиксированную длину в одно слово (16 бит), что позволяет в большинстве случаев объединять в одной команде и код операции, и операнд(ы). В последних версиях кристаллов "mega" AVR реализована функция аппаратного умножения. По разнообразию и количеству инструкций AVR больше похожи на CISC (Complex Instruction Set Chip - процессор с полным набором команд, выполняющий до 300 машинных инструкций), чем на RISC процессоры.

AVR функционируют в широком диапазоне питающих напряжений от 1,8 до 6,0 Вольт. Температурные диапазоны работы - коммерческий и индустриальный.

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

ATmega128 – 8 битный КМОП микроконтроллер, построенный по расширенной RISC архитектуре. Благодаря выполнению инструкции за один такт производительность ATmega128 достигает 1 MIPS (миллион инструкций в секунду) на 1 МГц, что позволяет разработчику, оптимизировать потребление энергии за счет вариации скорости обработки.

Возможности микроконтроллера:

– разрядность – 8 бит;

– архитектура – расширенная RISC:

– 133 инструкции – большинство выполняется за один такт;

– 32 x 8 регистров общего назначения, соединенных к АЛУ + регистры управления периферии;

– полностью статичный процессор;

– производительность 16 MIPS на частоте 16 МГц;

– аппаратный 2-тактовый перемножитель;

– энергонезависимая память программ и данных:

– 128 кбайт Flash памяти, программируемой в системе;

– 10 тысяч циклов записи/стирания;

– дополнительная область для загрузочного кода с битом защиты;

– 4 кбайт EEPROM (Electrically Erasable Programmable Read-Only Memory);

– 100 тысяч циклов записи/стирания;

– 4 кбайт встроенного ОЗУ;

– до 64 кбайт внешнего адресуемого пространства памяти;

– программируемые биты для защиты программного кода;

– интерфейс SPI (Serial Peripheral Interface) для внутрисистемного программирования;

– интерфейс JTAG согласно IEEE std. 1149.1:

– граничное сканирование по стандарту JTAG;

– обширная поддержка внутрисхемной отладки;

– программирование Flash, EEPROM, Fuses и битов защиты через интерфейс JTAG;

– периферийные устройства:

– два 8-битных таймеров/счетчиков с отдельными предделителями и режимами сравнения;

– два расширенных 16-битных таймеров/счетчиков с отдельными предделителями и режимами сравнения и захвата;

– счетчик реального времени с отдельным кварцевым резонатором;

– два 8-битных ШИМ каналов;

– 6 ШИМ каналов с программируемым разрешением от 2 до 16 бит;

– 8-канальный 10ти-битный АЦП (8 независимых каналов, 7 дифференциальных каналов, 2 дифференциальных канала с программируемым усилением 1x, 10x или 200x;

– байт-ориентированный двухпроводный последовательный интерфейс;

– два последовательный интерфейса USART (Universal synchronous/asynchronous receiver transmitter);

– последовательный интерфейс SPI (Serial Peripheral Interface);

– программируемый сторожевой таймер с встроенным генератором;

– встроенный аналоговый компаратор

– дополнительные особенности:

– схема сброса по включению питания и детектор правильного напряжения питания;

– встроенный калибруемый RC генератор;

– поддержка внешних и внутренних прерываний;

– 6 режимов пониженного энергопотребления, в том числе режим отключения ядра МК при работе АЦП;

– программно выбираемая тактовая частота;

– глобальное отключения подтягивающих резисторов Pull-up;

– корпус и выводы:

– 53 программируемые линии ввода-вывода;

– корпус TQFP с 64 выводами для поверхностного монтажа;

– напряжение питания 4.5–5.5 В;

– отдельный вход напряжения питания АЦП;

– тактовая частота 0–16 МГц;

Назначение выводов микроконтроллера

VCC Напряжение питания цифровой части

GND Общий провод

Port A(PA7..PA0) Порт A – 8-разрядный двунаправленный порт ввода-вывода с внутренними подтягивающими резисторами, управляемыми отдельно для каждой линии. Имеет три состояния.

Port B(PB7..PB0) Порт В – 8-разрядный двунаправленный порт ввода-вывода с внутренними подтягивающими резисторами, управляемыми отдельно для каждой линии. Имеет три состояния.

Port C(PC7..PC0) Порт С – 8-разрядный двунаправленный порт ввода-вывода с внутренними подтягивающими резисторами, управляемыми отдельно для каждой линии. Имеет три состояния.

Port D(PD7..PD0) Порт D – 8-разрядный двунаправленный порт ввода-вывода с внутренними подтягивающими резисторами, управляемыми отдельно для каждой линии. Имеет три состояния.

Port E(PE7..PE0) Порт В – 8-разрядный двунаправленный порт ввода-вывода с внутренними подтягивающими резисторами, управляемыми отдельно для каждой линии. Имеет три состояния.

Port F(PF7..PF0) Порт F обеспечивает аналоговые входы АЦП. Порт F также может работать как 8-разрядный двунаправленный порт ввода-вывода. Порт имеет подтягивающие резисторы, управляемые отдельно для каждой линии. Имеет три состояния. При активизации интерфейса JTAG, подтягивающие резисторы для линий PF7 (TDI), PF5 (TMS) и PF4 (TCK) будут подключены даже в состоянии сброса.

Port G(PG4..PG0) Порт G – 5-разрядный двунаправленный порт ввода-вывода с внутренними подтягивающими резисторами, управляемых отдельно для каждой линии. Имеет три состояния.

RESET Вход сигнала сброса.

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

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

AVCC Напряжение питания порта F и АЦП. Вывод должен быть подключен к VCC, даже если не используется АЦП. При использовании АЦП вывод подключается к VCC через фильтр низких частот.

AREF Вывод для подключения источника опорного напряжения для АЦП.

PEN Вывод активизации режима последовательного программирования через SPI.

Архитектура микроконтроллера

Ядро микроконтроллера объединяет в себе большой набор инструкций и 32 рабочих регистра общего назначения. Эти регистры непосредственно соединены с арифметико-логическим устройством (АЛУ), что позволяет в одной инструкции, выполняемой за один такт, использовать два независимых регистра. Такая архитектура более эффективная и производительная – в десять раз быстрее чем у обычных CISC микроконтроллеров.

ATmega128 обеспечивает следующие средства: 128К встроенной программируемой Flash-памяти с возможностью чтения во время записи; 4К EEPROM; 4K SRAM; 53 линии ввода/вывода для общих целей; 32 рабочих регистра общего назначения; таймер реального времени; четыре настраиваемых таймера/счетчика с режимом сравнения и «переполнение содержимого»; 2 интерфейса USART; двухпроводной последовательный интерфейс; 8-ми канальный 10-ти битный АЦП с задаваемым диапазоном входных сигналов с программируемым усилением; программируемый сторожевой таймер с внутренним заданием тактовой частоты; интерфейс SPI; интерфейс JTAG IEEE стандарта версии 1149.1; а также шесть программно выбираемых режимов энергосбережения. Режим Idle останавливает процессор, позволяя в то же время SRAM, таймерам/счетчикам, SPI порту и системе прерываний продолжать функционировать. Режим Power-down сохраняет содержимое регистров, но останавливает генератор тактовой частоты, деактивирует все остальные функции микросхемы до появления запроса на прерывание или до аппаратного сброса микросхемы. В режиме Power-save асинхронный таймер/счетчик продолжает работать, позволяя пользователю использовать значение таймера, в то время как вся остальная часть устройства «спит». В режиме уменьшения шумов АЦП центральный процессор, все блоки ввода-вывода и другая периферия кроме асинхронного таймера и АЦП останавливаются, чтобы минимизировать шум переключения во время преобразования в AЦП. В режиме Standby генератор тактовой частоты работает, в то время как вся остальная часть устройства «спит». Это позволяет совместить быстрый запуск с низкий потреблением энергии. В режиме Extended Standby продолжает работать как основной генератор тактовой частоты, так и асинхронный таймер/счетчик.

МК изготовлен с использованием высокоплотной технологии энергонезависимой памяти фирмы Atmel. Встроенная память Flash программируется внутрисхемно через последовательный интерфейс SPI. Можно организовывать начальный загрузчик, который, располагаясь в начальной области Flash, позволяет через любой интерфейс загрузить прикладную программу в прикладную память Flash. ПО в загрузчике продолжает работать во время обновления прикладного ПО, производя чтение во время записи.

Рис. 3.2. Структура микроконтроллера ATmega128

AVR использует Гарвардскую архитектуру с отдельными шинами кода и данных. Инструкции в памяти программы выполняются в единственном конвейере. В то время как одна инструкция выполняется, происходит выборка следующей инструкции. Это позволяет инструкциям выполняться в каждом такте.

Регистровый файл быстрого доступа содержит 32 8-битных регистра общего назначения с временем доступа в 1 такт. Шесть из 32 регистров могут использоваться как три косвенных 16-битных адресных регистра для адресации пространства данных, предоставляя возможность эффективного вычисления адреса. Один из этих указателей также может использоваться как указатель в таблицах поиска в памяти программ Flash. Эти добавочные функциональные регистры получили названия X, Y и Z.

АЛУ поддерживает арифметические и логические действия между регистрами или между константой и регистром. После арифметического действия, регистр статуса обновляется, отражая информацию о результате.

Рис. 3.3. Упрощенная структурная схема микроконтроллера ATmega128

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

Адресное пространство Flash памяти разделено на две секции, секцию загрузчика и секцию прикладной программы. Обе секции содержат выделенные биты запрета для защиты от записи и от записи-чтения. SPM инструкция, которая пишет в секцию прикладной памяти Flash должна постоянно находиться в секции загрузчика.

Во время обработки прерываний и вызовов подпрограмм, адрес возврата сохраняется в стеке. Стек размещен в общем пространстве ОЗУ, а следовательно размер стека ограничен только размером памяти данных. Все пользовательские программы должны инициализировать стек в процедуре сброса (перед исполнением подпрограммы или обработкой прерывания). Указатель стека SP доступен для чтения-записи в пространстве ввода-вывода. К данным в ОЗУ можно обратиться посредством пяти различных режимов адресации.

Модуль прерывания имеет свой управляющий регистр в пространстве ввода-вывода с дополнительным битом активизации глобального прерывания в статусном регистре. Все прерывания имеют отдельные вектора в таблице векторов прерываний. Прерывания имеют приоритет в соответствии с положением их вектора. Чем ниже адрес вектора прерывания, тем выше приоритет.

Программные средства поддержки разработок

AVR Studio - это интегрированная отладочная среда разработки приложений ( IDE ) для микроконтроллеров семейства AVR (AT90S, ATmega, ATtiny) фирмы Atmel.

IDE AVR Studio содержит:

    транслятор языка ассемблера (Atmel AVR macroassembler); отладчик (Debugger); программное обеспечение верхнего уровня для поддержки внутрисхемного программирования (In-System Programming, ISP).

Отладчик AVR Studio поддерживает все типы микроконтроллеров AVR и имеет два режима работы: режим программной симуляции и режим управления различными типами внутрисхемных эмуляторов (In-Circuit Emulators) производства фирмы Atmel. Важно отметить, что интерфейс пользователя не изменяется в зависимости от выбранного режима отладки.

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

AVR Studio распространяется свободно.

Создание и трансляция проекта

После запуска AVR Studio для создания нового проекта необходимо в меню Project выбрать команду New Project. В результате на экране появляется диалоговое окно (рис. 1), в котором необходимо ввести название проекта (Project name), его расположение (Location) и имя исходного файла проекта (Initial Name). Новый проект удобнее создавать в отдельной папке.


Рис. 1.Окно создания нового проекта

Далее выбирается тип проекта:

    AVR Assembler. Использует встроенный макроассемблер AVR Studio.

Далее необходимо выбрать платформу для отладки и целевой микроконтроллер (рис. 2).


Рис. 2. Окно выбора платформы для отладки и целевого микроконтроллера

На экране появляется окно организации проекта (рис. 3), показывающее все связанные с проектом файлы, а также окно редактирования исходного файла проекта (рис. 4)


Рис. 3. Окно организации проекта

Рис. 4. Окно редактирования файла. asm (в центре)

К проекту могут быть добавлены другие ассемблерные файлы. Для этого необходимо в меню Project выбрать пункт Add Existing File или Create New File. Но группа Assembler Files может содержать только один файл, с которого в дальнейшем будет начинаться трансляция проекта. Назовем этот файл входным ассемблерным файлом проекта. Значок этого файла в окне организатора проекта отмечен красной стрелкой, все другие файлы проекта будут отмечены синими стрелками, направленными вниз. Все файлы проекта должны быть включены во входной файл проекта с помощью ассемблерной директивы. include. Для смены входного файла проекта на другой надо установить курсор мыши на нужный файл в окне организации проекта и щелкнуть правой кнопкой мыши. В открывшемся всплывающем окне надо выбрать Set As Entry File.

Для того, чтобы в тексте ассемблерных файлов вместо адресов внутренних регистров микроконтроллера использовать их символические имена, нужно подключить к проекту файл, содержащий назначения символических имен всех регистров выбранного микроконтроллера (обычно его называют включаемым файлом), например, для микроконтроллера ATmega128 файл называется m128def. inc. Включаемые файлы входят в прикладное программное обеспечение AVR Studio и при инсталляции помещаются в папку Appnotes в директории, где установлен AVR Studio.

Для редактирования исходного текста программы необходимо в папке Assembler Files в окне организации проекта открыть нужный файл с расширением. asm. В открывшееся окно для редактирования файла можно с клавиатуры или через буфер компьютера ввести текст программы на языке ассемблера (рис. 5).

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

Перед трансляцией нужно задать установки проекта. В пункте меню Project выбирается AVR Assembler Setup, и в открывшемся окне установок проекта указывается необходимый формат выходного файла. AVR Studio поддерживает следующие выходные форматы:

    Object Generic Intel Intellec 8/MDS (Intel Hex) Motorola S-Record

Для отладки в AVR Studio необходим файл в формате Object (объектный файл), он создается автоматически, если в качестве платформы для отладки выбран AVR Simulator. Большинство программаторов в качестве входных используют файлы в формате Intel Hex.

Далее осуществляется трансляция программы и проверка правильности её написания. Выбирается пункт Build в меню Project. Окно Output содержит сообщения ассемблера. В это окно выводится информация о количестве слов кода и данных, о наличии ошибок, и другая информация (рис. 6).

Нажмите, чтобы увеличить картинку
Рис.6. Окно сообщений ассемблера

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

В результате трансляции создается выходной файл в указанном формате. Если исходный ассемблерный текст содержал сегмент энергонезависимых данных (объявленный директивой. eseg), то при трансляции будет создан также файл с расширением. eep. Этот файл содержит данные для внутренней EEPROM микроконтроллера и имеет тот же формат, что и выходной файл.

Если в результате трансляции не выдается сообщений об ошибках, можно приступать к отладке проекта.

Режимы работы отладчика

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

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

Отметим еще раз, что независимо режима работы отладчика, интерфейс AVR Studio не меняется. При переключении между различными режимами отладки все параметры среды сохраняются. Информация о текущем режиме отладчика выводится в строке состояния AVR Studio.

Отладка проекта при помощи программного симулятора

Для запуска отладчика необходимо выполнить процедуру Build and run, которая вызывается при нажатии на соответствующую кнопку на панели управления. Процедура Build and run выполняется в два этапа. Сперва происходит трансляция входного ассемблерного файла, при которой независимо от установок проекта, кроме выходного файла заданного формата генерируется и объектный файл. Затем этот объектный файл загружается в отладчик.

Для совместимости с прежними версиями в AVR Studio предусмотрен еще один вариант запуска отладчика - загрузка полученного в результате трансляции объектного файла (File -> Open) . Но при этом пользователь не имеет возможности редактировать исходный текст программы непосредственно в отладчике. Кроме того следует помнить, что для того, чтобы транслятор сгенерировал необходимый для запуска отладчика объектный файл, нужно в окне установок проекта указать в качестве формата выходного файла транслятора Object.

При первом для проекта запуске отладчика вызывается окно выбора целевого микроконтроллера (рис. 6).


Рис. 6. Окно выбора целевого микроконтроллера

В этом окне из списка выбирается нужный микроконтроллер (Device), например ATmega103, и тактовая частота процессорного ядра (Frequency). Опции Memory и Architecture при выборе стандартного устройства в окне не используются. Это же окно может быть вызвано в процессе работы отладчика (Options -> Simulator Options).

Экран AVR Studio в режиме отладке представлен на рис. 7.

Нажмите, чтобы увеличить картинку
Рис. 7. Экран AVR Studio в режиме отладки

При выполнении процедуры Build and run (или при загрузке объектного файла) автоматически открывается окно исходного текста исполняемой микроконтроллером программы В окне отображается код, который выполняется в отладочном окружении (эмуляторе или программном симуляторе).

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


Рис. 8. Окно исходного текста программы в режиме отладки

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

В AVR Studio для отладки программы предусмотрены две команды пошагового режима: Step Over и Trace into. Разница между ними в том, что команда Step Over не работает в подпрограммах. С помощью команд пошагового режима можно проследить изменения значений в регистрах устройств ввода/вывода, памяти и регистрового файла. К командам шагового режима относятся также Auto Step и Multi Step. Выбрав в меню Debug пункт Debug Options, можно установить в открывшемся окне параметры режимов Auto Step и Multi Step, а также некоторые другие опции симулятора, речь о которых пойдет ниже.

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

Для установки точки останова в AVR Studio служит пкнкт меню Breakpoints -> Toggle Breakpoint. Точка останова ставится в строке, отмеченной курсором (рис. 9).


Рис. 9. Точка останова в окне исходного текста программы в режиме отладки

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

В процессе отладки также можно выбрать пункт меню Debug -> Run To Cursor. При выборе этого пункта исполняемый код будет выполняется до достижения команды, обозначенной курсором. При этом, если отладчик обнаруживает точку останова, установленную ранее положения курсора, то останов будет выполнен только в случае его разрешения в окне Debug Option, в противном случае выполнение не приостанавливается. Если команда, обозначенная курсором, не достигается, отладчик продолжает исполнять код программы до тех пор, пока исполнение не будет прервано пользователем. Поскольку режим Run To Cursor зависит от позиции курсора, он доступен только при активном окне исходного текста.

Для остановки исполнения программы пользователем служит команда Break. В состоянии останова эта команда недоступна.

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

Пункт меню Debug -> Reset выполняет сброс микроконтроллера. Если программа при этом выполняется, то ее исполнение будет остановлено. После сброса информация во всех окнах модифицируется.

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

Регистровый файл микроконтроллера AVR отображается в окне Registers (рис. 10). Если в процессе выполнения программы в очередном цикле значение какого-либо регистра изменится, то этот регистр будет выделен красным цветом. При этом, если в следующем цикле значение регистра останется прежним, то цветовое выделение будет снято. Такое же цветовое выделение реализовано в окнах устройств ввода/вывода, памяти и переменных.


Рис. 10. Окно состояния регистрового файла.

Состояние встроенных периферийных устройств микроконтроллера отображено в окне I/O Window (рис. 11)


Рис. 11. Окно состояния устройств ввода вывода

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


Рис. 12. Развернутый порт PORTB в окне устройств ввода/вывода

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

:00
:01
:00
:FF

Здесь значение, указанное после разделителя < : > - это шестнадцатеричное представление сигналов, воздействующих на порт микроконтроллера. Значение, указанное до разделителя - это десятичный номер цикла (с момента сброса микроконтроллера), в котором указанное воздействие поступает на выводы порта микроконтроллера. Файл входного воздействия должен заканчиваться строкой с заведомо большим номером цикла, в противном случае будет выдано сообщение об ошибке. Для подключения файла входного воздействия служит пункт меню Options -> Simulator Port Stimuli. В открывшемся окне нужно указать порт микроконтроллера, на который нужно подавать воздействие, и файл этого воздействия. Пользователь может создавать файлы воздействий, записывать изменения значений на выходах портов микроконтроллера в файл (формат этого файла тот же, что и у файла входных воздействий). Для записи служит пункт меню Options -> Simulator Port Logging. В открывшемся окне нужно указать порт микроконтроллера и имя файла для записи. Записываемый файл будет удаляться и создаваться вновь при каждом выполнении сброса микроконтроллера (Debug -> Reset). Подключать файл входного воздействия или задавать имя файла для записи пользователь должен сам при каждом запуске симулятора.

Для наблюдения за изменениями переменных предназначено окно Watch. Переменные, определенные в программе, могут быть отображены в этом окне. Если в процессе выполнения программы значения этих переменных будут изменяться, то все изменения можно будет наблюдать в этом окне (рис. 13).


Рис. 13. Окно просмотра переменных

Для индикации состояния программного счетчика, указателя стека, содержимого регистра статуса SREG и индексных регистров X, Y и Z в процессе отладки программы предназначено окно Processor (рис. 14).


Рис. 14. Окно состояния процессорного ядра

В этом же окне отображается текущее время выполнения программы и тактовая частота ядра микроконтроллера.

Просмотр ячеек памяти программ, памяти данных, EEPROM и регистров портов ввода/вывода в ходе исполнения программы возможно также с помощью диалогового окна Memory. Падающее меню диалогового окна позволяет выбрать один из четырех массивов ячеек памяти: Data, IO, Eeprom, Program Memory. Для одновременного просмотра нескольких областей окно Memory может быть открыто несколько раз. Информация в диалоговом окне может быть представлена в виде байтов или в виде слов в шестнадцатеричной системе счисления, а также в виде ASСII - символов (рис. 15).


Рис. 15. Окно просмотра содержимого памяти

В процессе отладки пользователь может инициализировать внутреннее ОЗУ или EEPROM микроконтроллера (например, данными, содержащимися в полученном при трансляции файле. eep), или сохранить содержимое ОЗУ и EEPROM в виде файлов в формате Intel Hex. Для этого служит пункт меню File -> Up/Download Memory.

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

Для сохранения проекта необходимо воспользоваться пунктом меню Project -> Close. При закрытии проекта сохраняются все его настройки. Во время следующей загрузки настройки будут автоматически восстановлены.

Работая с программным симулятором пакета AVR Studio, следует помнить, что он пока не поддерживает некоторые режимы работы микроконтроллеров AVR и их периферийные узлы:

    Аналого-цифровой преобразователь; Аналоговый компаратор; Режим часов реального времени; Режим пониженного электропотребления (инструкция "sleep" интерпретируется программным симулятором как "nop" ) ;

Возможно, в последующих версиях AVR Studio поддержка этих узлов и режимов будет реализована.

Программирование на языках высокого уровня.

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

Наиболее мощным, с высокой оптимизацией генерируемого кода, является компилятор IAR Embedded Workbench производства компании IAR - разработчика системы команд для микроконтроллеров AVR. Ориентировочная стоимость данного компилятора 3500 долларов.

В качестве альтернативы компилятору IAR широко используются компиляторы CodeVision и ImageCraft, которые являются менее мощными с точки зрения оптимизации кода, но являются более легкими в освоении. Ориентировочная стоимость данных компиляторов 200-300 долларов.

Для тех, кто не готов платить за программное обеспечение существует бесплатный компилятор WinAVR (ранее AVRGCC), который в совокупности с бесплатной графической средой VMLab, обеспечит разработчика необходимыми средствами для разработки программы на языке Си.

Для сторонников программирования на Паскале существует компилятор AVRco (http://www. e-lab. de/AVRco/index. html)