Диплом: Разработка программной и аппаратной поддержки к методическим указаниям "Программирование микроконтроллеров" - текст диплома. Скачать бесплатно.
Банк рефератов, курсовых и дипломных работ. Много и бесплатно. # | Правила оформления работ | Добавить в избранное
 
 
   
Меню Меню Меню Меню Меню
   
Napishem.com Napishem.com Napishem.com

Диплом

Разработка программной и аппаратной поддержки к методическим указаниям "Программирование микроконтроллеров"

Банк рефератов / Радиоэлектроника

Рубрики  Рубрики реферат банка

закрыть
Категория: Дипломная работа
Язык диплома: Русский
Дата добавления:   
 
Скачать
Архив Zip, 878 kb, скачать бесплатно
Заказать
Узнать стоимость написания уникальной дипломной работы

Узнайте стоимость написания уникальной работы

84 Министерство ОБРАЗОВАНИЯ РОССИЙСКОЙ Ф ЕДЕРАЦИИ Воронежский Государственный Университет Физический факультет № ______________________ кафедральной регистрации “К ЗАЩИТЕ ДОПУЩЕНА” Зав . кафедрой физики полупроводников и микроэлектроники проф . __________ Петров Б.К. “ ____” __________2002 г. УДК .681.3 КОРОБКОВ Георгий Николаевич РАЗРАБОТКА ПРОГРАММНОЙ И АППАРАТНОЙ ПОДДЕРЖКИ К МЕТОДИЧЕСКИМ УКАЗАНИЯМ «ПРОГРАММИРОВАНИЕ МИКРОКОНТРОЛЛЕРОВ» Магистерская диссертация по направлению «Физика» Научный руководитель доц . ___________ Клюкин В.И. ВОРОНЕЖ 2002 РЕФЕРАТ УДК. 681.3 КОРОБКОВ Георгий Николаевич РАЗРАБОТКА ПРОГРАММНОЙ И АППАРАТНОЙ ПОДДЕРЖКИ К МЕТОДИЧЕСКИМ УКАЗАНИЯМ «ПРОГРАММИРОВАНИЕ МИКРОКОНТРОЛЛЕРОВ» . – Магистерская диссертац ия по направлению «Физика» , Воронеж , ВГУ , 2002. – 93 с ., илл . 45, табл . 4, прилож . 5, библ . 21 назв. В настоящее время микроконтроллеры принимают все большее распространение . Однако , информации по вопросам обучения программированию микроконтроллеров в сое динении с внешними исполнительными бывает не достаточно . В работе рассмотрены архитектура , аппаратные и программные средства распространенных и недорогих микроконтроллеров фирмы ATMEL серии AVR типа AT 90 S 1200, AT 90 S 2313, AT 90 S 4414 и AT 90 S 8515. Анализ мето дики программирования в интегрированной среде разработке позволил объединить практические рекомендации с некоторыми особенностями обучения программирования микроконтроллеров . На основании этого предложен алгоритм обучения . Предложен макет программатора , к оторый позволяет , как программировать , так и обучать этому процессу . Приведен набор типовых задач которые могут быть реализованы на вспомогательных платах внешних устройств , подключаемых к программатору через соответствующие порты . Так же приведены решени я четырех типовых задач по работе с памятью , индикацией , устройство «кодовый замок» и устройство измерителя частоты звукового диапазона . В приложениях приведены тексты программ и справочные данные на рассмотренные AVR микроконтроллеры . 66 СОДЕРЖАНИЕ ВВЕДЕНИЕ 4 1. ОСНОВЫ АРХИТЕКТУРЫ МИКРОКОНТРОЛЛЕРОВ 6 1.1. ОСНОВНЫЕ ТИПЫ МИКРОКОНТРОЛЛЕРОВ И ИХ АРХИТЕКТУРА 6 1.2. Аппаратные средства 10 1.2.1. Запуск микроконтроллера 10 1.2.2. Тактирование и командные циклы 10 1.2.3. Программный счетчик и АЛУ 11 1.2.4. Подпрограммы и функции 13 1.2.5. Ввод /вывод данных 17 1.3. Инструментальные и программные средства разработки и отладки 20 1.4. Основные типы интерфейсов МК. 27 1.4.1. Подключение переключателей и подавление «звона» к онтактов. 27 1.4.2. Световая индикация. 28 1.4.3. Ввод с матричной клав иатуры. 30 2. ОСОБЕННОСТИ ПОСТРОЕНИЯ И ФУНКЦИОНИРОВАНИЯ МИКРОКОНТРОЛЛЕРОВ ФИРМЫ ATMEL СЕМЕЙСТВА AVR 32 2.1. Архитектура микропроцессорного ядра AVR-микроконтроллеров 32 2.2. Аппаратные средства AVR . 41 2.3. Система команд микроконтроллера AVR 49 3. ПРОГРАММНОЕ И ИНСТРУМЕНТАЛЬНОЕ ОБЕСПЕЧЕНИЕ ПРОЦЕССА ПРОГРАММИРОВАНИЯ МИКРОКОНТРОЛЛЕРОВ 56 3.1. Написание и отладка программного кода с помощью AVR Studio 56 3.1.1. Обзор AVR Studio 57 3.1.2. Создание нового проекта 58 3.1.3. Исполнение программного кода 62 3.2. Анализ методики реализации разработки программного обеспечения 69 3.2.1. Классификация в ариантов заданий 69 3.2.2. Рассмотрение типовых примеров 73 3.3. Описани е макета программатора. 77 ЗАКЛЮЧЕНИЕ 80 БИБЛИОГРАФИЧЕСКИЙ СПИСОК ИСПОЛ ЬЗОВАННЫХ ИСТОЧНИКОВ 81 ПРИЛОЖЕНИЕ 1 Инструкции процессоров AVR. 83 ПРИЛ ОЖЕНИЕ 2. Таблица регистров микроконтроллера AT 90 S 1200 88 ПРИЛОЖЕНИЕ 3. Программа для измерителя звуковой частоты 89 ПРИЛОЖЕНИЕ 4. Программа для устройства «кодовый замок» 91 ПРИЛОЖЕНИЕ 5. Основные характеристики микроконтроллеров AVR 93 В ВЕДЕНИЕ Можно считать что микроконтроллер (МК ) – это компьютер , разместившийся в одной микросхеме . Отсюда и его основные привлека тельные качества : малые габариты ; высокие производительность , надежность и способность быть адаптированным для выполнения самых различных задач . Микроконтроллер помимо центрального процессора (ЦП ) содержит память и многочисленные устройства ввода /вывода : аналого-цифровые преобразователи , последовательные и параллельные каналы передачи информации , таймеры реального времени , широтно-импульсные модуляторы (ШИМ ), генераторы программируемых импульсов и т.д . Его основное назначение – использование в системах ав т оматического управления , встроенных в самые различные устройства : кредитные карточки , фотоаппараты , сотовые телефоны , музыкальные центры , телевизоры , видеомагнитофоны и видеокамеры , стиральные машины , микроволновые печи , системы охранной сигнализации , сис т емы зажигания бензиновых двигателей , электроприводы локомотивов , ядерные реакторы и многое , многое другое . Встраиваемые системы управления стали настолько массовым явлением , что фактически сформировалась новая отрасль экономики , получившая название Embedde d Systems (встраиваемые системы ). Достаточно широкое распространение имеют МК фирмы ATMEL , функциональные возможности которых охватывают все перечисленные задачи [1,2]. Применение МК можно разделить на два этапа : первый – программирование , когда пользоват ель разрабатывает программу и прошивает ее непосредственно в кристалл , и второй – согласование спроектированных исполнительных устройств с запрограммируемым МК . Значительно облегчают отладку программы на первом этапе – симулятор , который наглядно моделиру е т работу микропроцессора . На втором этапе для отладки используется внутрисхемный эмулятор , который является сложным и дорогим устройством , зачастую недоступным рядовому пользователю . В тоже время в литературе мало уделено внимания вопросам обучения програ ммированию некоторых недорогих МК , в сочетании с реальными исполнительными устройствами . Разработка макета программатора отличающегося простотой , наглядностью и низкой себестоимостью , становиться необходимой как для самого программирования кристаллов , так и для наглядного обучения широкого круга пользователей основам программирования МК . 1. ОСНОВЫ АРХИТЕКТУРЫ МИКРОКОНТРОЛЛЕРОВ 1.1. ОСНОВНЫЕ ТИПЫ МИКРОКОНТРОЛЛЕРОВ И ИХ АРХИТЕКТУРА Если представить все типы современных микроконтроллеров (МК ), то можно поразиться огромным количеством разнообразных приборов этого класса , доступных потребителю . Однако все эти приоры можно разделить на следующие основные типы : · Встраиваемые ( embedded ) 8-разрядные МК ; · 16- и 32-разрядные МК ; · Цифровые сигнальные процессоры. Промышленностью выпускаются очень широкая номенклатура встраиваемых МК . В них все не обходимые ресурсы (память , устройства ввода-вывода и т.д .) располагаются на одном кри сталле с процессорным ядром [3]. Если подать питание и тактовые импульсы на соответствующие входы МК , то можно сказать , что он как бы «оживет» и с ним можно будет работать . Обычно МК содержат значительное число вспомогательных устройств , благодаря чему об е спечивается их включение в реальную систему с использованием минимального количества дополнительных компонентов . В состав этих МК входят : · Схема начального запуска процессора ( Reset ); · Генератор тактовых импульсов ; · Центральный процессор ; · Память программ ( E ( E ) PROM ) и программный интерфейс ; · Средства ввода /вывода данных ; · Таймеры , фиксирующие число командных циклов . Общая структура МК показана на рис . 1.1. Эта структура дает представление о том , как МК связывается с внешним миром . Более сложн ые встраиваемые МК могут дополнительно реализовывать следующие возможности : · Встроенный монитор /отладчик программ ; · Внутренние средства программирования памяти программ ( ROM ); · Обработка прерываний от различных источников ; · Аналоговый ввод /вывод ; · Последовательный ввод /вывод (синхронный и асинхронный ); · Параллельный ввод /вывод (включая интерфейс с компьютером ); · Подключение внешней памяти (микропроцессорный режим ). Все эти возможности значительно увеличивают гибкость применения МК и делают бол ее простым процесс разработки систем на и основе . Некоторые МК (особенно 16- и 32-разрядные ) используют только внешнюю память , которая включает в себя как память программ ( ROM ), так и некоторый объем памяти данных ( RAM ), требуемый для данного применения . Они применяются в системах , где требуется большой объем памяти и относительное не большое количество устройств (портов ) ввода /вывода . Типичным примером применения такого МК с внешней памятью является котроллер жесткого диска ( HDD ) с буферной кэш-памятью , к оторый обеспечивает промежуточное хранение и распределение больших объемов данных (порядка нескольких мегабайт ). Внешняя память дает возможность такому микроконтроллеру работать с более высокой скоростью , чем встраиваемый МК . Цифровые сигнальные процессор ы ( DSP ) – относительно новая категория процессоров . Назначение DSP состоит в том , чтобы получать текущие данные от аналоговой системы , обрабатывать данные и формировать соответствующий отклик в реальном масштабе времени . Они обычно входят в состав систем , используясь в качестве устройств управления внешним оборудованием , и не предназначены для автономного применения. Система команд. В зависимости от числа используемых кодов операций системы команд МК можно разделить на две группы : CISC и RISC . Термин CISC означает сложную систему команд и является аббревиатурой английского определения Complex Instruction Set Computer . Аналогично термин RISC означает сокращенную систему команд и происходит от английского Reduce Instruction Set Computer . Систему команд МК 8051 можно отнести к типу CISC. Однако , не смотря на широкую распространенность этих понятий , необходимо признать , что сами названия не отражают главного различия между системами команд CISC и RISC. Основная идея RISC архитектуры – это тщательный подбор таких комбинаций кодов операций , которые можно было бы выполнить за один такт тактового генератора . Основной выигрыш от такого подхода – резкое упрощение аппаратной реализации ЦП и возможность значительно повысить его производительность . Очевидно , что в общем случае одной команде CISC соответствует несколько команд RISC. Однако обычно выигрыш от повышения быстродействия в рамках RISC перекрывает потери от менее эффективной системы команд , что приводит к более высокой эффективности RISC систем в целом по сравнению с CISC. Однако в настоящее время грань между CISC и RISC архитектурой стремительно стирается . Например , МК семе йства AVR фирмы Atmel имеют систему команд из 120 инструкций , что соответствует типу CISC. Однако большинство из них выполняется за один такт , что является признаком RISC архитектуры . Сегодня принято считать , что признаком RISC архитектуры является выполне ние команд за один такт тактового генератора . Число команд само по себе значения уже не имеет . Типы памяти МК. Мо жно выделить три основных вида памяти , используемой в МК : а ) память программ ; б ) память данных ; в ) регистры МК . Память программ представляет собой постоянную память , предназначенную для хранения программного кода и констант . Эта память не изменяет соде ржимого в процессе выполнения программы . Память данных предназначена для хранения переменных в ходе выполнения программы . Регистры МК – этот вид памяти включает внутренние регистры процессора и регистры , которые служат для управления периферийными устройст вами . Для хранения программ обычно служит один из видов постоянной памяти : ROM (масочные ПЗУ ), PROM (однократно программируемые ПЗУ ), EPROM (электрически программируемые ПЗУ с ультрафиолетовым стиранием ) или EEPROM (ПЗУ с электрической записью и стиранием , к этому виду также относятся современные микросхемы Flash -памяти ). Все эти виды памяти являются энергонезависимыми – это означает , что содержимое памяти сохраняется после выключения питания МК. Многократно программируемые ПЗУ – EPROM и EEPROM ( Electrical ly Erasable Programmable Memory ) подразделяются на ПЗУ со стиранием ультрафиолетовым (УФ ) облучением (выпускаются в корпусах с окном ), и МК с электрически перепрограммируемой памятью , соответственно. В настоящее время протоколы программирования современно й EEPROM памяти позволяют выполнять программирование МК непосредственно в составе системы , где он работает . Такой способ программирования получил название – ISP ( In System Programming ). И теперь можно периодически обновлять программное обеспечение МК без у даления из платы . Это дает огромный выигрыш на начальных этапах разработки систем на базе МК или в процессе их изучения , когда масса времени уходит на многократный поиск причин неработоспособности системы и выполнение последующих циклов стирания-программи р ования памяти программ . Функционально Flash -память мало отличается от EEPROM . Основное различие состоит в способности стирания записанной информации . В памяти EEPROM стирание производится отдельно для каждой ячейки , а во Flash -памяти стирание осуществляет ся целыми блоками. ОЗУ ( RAM ) – оперативное запоминающее устройство , используется для хранения данных . Эту память называют еще памятью данных . Число циклов чтения и записи в ОЗУ неограниченно , но при отключение питания вся информация теряется . 1.2. Аппаратные средства 1.2.1. Запуск микроконтроллера Во многих приложениях используется батарейное питание МК , а в некоторых случаях применяются даже конденсаторы большой емкости , которые обес печивают сохранение работоспособности при кратковременных отключеньях питания . Поэтому проблема энергопотребления (энергосбережения ) весьма актуальна для МК . Так как практически все современные МК производятся по КМОП технологии , то они потребляют значит е льно меньше мощности , чем ранее выпускавшиеся биполярные или n -МОП – микроконтроллеры . Сброс в начальное состояние. На рис . 1.3. изображена схема сброса . Эту схему лучшего всего использовать в случаях , когда гарантированно поддержание напряжения питания в рабочем диапазоне . Кнопка RESET используется в процессе разработки устройств для сброса МК в начальное состояние . (См . рис . 1.2. ) Рис . 1.2. Схема RESET . 1.2.2. Тактирование и командные циклы Существует три способа задания тактовой частоты МК . П ервый способ – использование кварцевого резонатора . Второй способ синхронизации – использования RC генератора . Третий способ синхронизации – это подача тактовых импульсов от внешнего генератора . С его помощью можно задать любую частоту синхронизации. Следу ет обратить внимание на то , что командные циклы и такты синхронизации не одно и тоже . Командный цикл состоит обычно из нескольких тактов , которые необходимы процессору для выполнения команды . На рис . 1.3, показан командный цикл , состоящий из четырех такто в . Рис . 1.3. Командный цикл и машинные такты. В течении командного цикла микропроцессор или микроконтроллер выполняет необходимые операции , используя тактовые сигналы для синхронизации этих операций . Некоторые команды требуют для выполнения более одного командного цикла . 1.2.3. Программный счетчик и АЛУ Программный счетчик ( Program Counter ) или счетчик команд (СК ) используется для указания следующей команды выполняемой программы . Реализация этой функции значительно усложняется , когда необходимо сохранить содержимое СК при вызове подпрограмм и обработке запросов прерывания или обеспечить ветвление программы . СК предс тавляет собой счетчик с параллельным вводом /выводом . В процессорах с Принстонской архитектурой содержимое СК поступает оп шине данных в схему управления памятью , указывая адрес считываемой команды . Часто СК входит в состав схемы управления памятью – это п о зволяет избежать передачи адреса по внутренней шине данных . Важные особенности функционирования СК – параллельная загрузка нового содержимого , поступающего с шины данных , возможность сброса (возврат к адресу первой команды программы ), реализация инкремент а . В 8-разрядных МК разрядность СК обычно больше , чем 8 бит . При загрузки в СК нового адреса , он поступает по шине данных частями по 8-бит , что требует выполнения дополнительных машинных циклов . Чтобы сократить время загрузки СК , некоторые МК имеют команды ветвления , при которых загружается только 8 младших разрядов адреса , а старшие разряды остаются без изменения . При выполнении такой команды достаточно передать по шине данных только один байт , тогда как для загрузки полного 16-разрядного адреса требуется п ересылка двух байт . После чтения очередной команды содержимое СК увеличивается (инкрементируется ), чтобы обеспечить переход к адресу следующей команды . Если выполняется вызов подпрограммы или происходит прерывание , то адрес возврата (текущее состояние СК ) может быть сохранен в стеке без выполнения дополнительных тактов для инкремента содержимого СК . В работе с МК необходимо следить , чтобы значение СК не вышло за пределы памяти программ . Так как это может привести к выполнению неопределенных команд и непре д сказуемому результату . Арифметико-логическое устройство (АЛУ ) процессора используется для выполнения всех математических операций в программе . Это операции включают сложение , вычитание , логическое И , логическое ИЛИ , сдвиг содержимого регистров и установку содержимого регистра состояния в соответствии с полученным результатами . АЛУ не используется при чтении или записи данных или команд , оно служит только для обработки данных . АЛУ можно представить как аппаратный блок , который обрабатывает два слова данных (операнды ) и сохраняет полученный результат (см . рис . 1.4). Как вводятся операнды в АЛУ и куда поступает результат – зависит от конкретного типа МК . В этом состоит одно из основных различий между разными типами процессоров и системами команд . Некоторые М К выбирают один операнд из регистра-аккумулятора и сохраняют результат также в аккумуляторе . Другие МК позволяют использовать различные источники операндов и места размещения результатов . Рис . 1.4. Структура АЛУ . АЛУ обычно работает только с положительными целыми числами . Однако при выполнении вычитания получаются отрицательные числа , если вычитаемое больше уменьшаемого . Для представления отрицательных чисел используется дополнительный код – «дополнение до двух» . Это необходимо учитывать при знакомстве с работой АЛУ . Вместо вычитания одного числа из другого , происходит добавление отрицательного числа : А – В = А + (-В ), где отрицательное число (-В ) представляется в дополнительном коде . Чтобы получить дополнительный ко д отрицательного двоичного числа , необходимо инвертировать значение каждого бита , а затем прибавить единицу : -В = ( В ^ 0х ff ) + 1, где ^ - операция «исключительное или». Сложность АЛУ во многом определяет сложность всего МК в целом . Часто над созданием АЛ У работает группа разработчиков , сравнимая по составу с той , которая работает над остальной частью микропроцессора или микроконтроллера . От того , как работает АЛУ , зависит функционирование процессора , входящего в состав МК , а значит и всего МК в целом . 1.2.4. Подпрограммы и функции При вызове подпрограммы или функции требуется сохранить содержимое СК для того , чтобы команда возврата могла вернуть управление исходной программе . Это может выполняться автоматическ и путем сохранения адреса возврата в сетке . При возврате к исходной программе адрес извлекается из стека и загружается в СК . Вызов функции может быть реализован в МК , не имеющих стека , путем использования индексного регистра для эмуляции стека . Если нельз я непосредственно загрузить в стек содержимое СК , то адрес возврата к исходной программе можно сохранить в эмулированном стеке. Иногда приходится передавать функции некоторые параметры . Один из самых эффективных и часто встречаемых способов передачи парамет ров в функцию – это поместить их в стек перед вызовом функции . В подпрограмме можно загрузить индексный регистр значения указателя стека и таким образом получить доступ к параметрам . Другим способом передачи параметров является их сохранение в регистрах процессора или в памяти данных в качестве специальных переменных . Передача параметров через регистры сокращает число регистров , доступных при выполнении функции . Сохранение же параметров в виде специальных переменных уменьшает объем памяти , доступной для и спользования программой . Данное ограничение может быть весьма существенно для МК . Обычно значения возвращаемых параметров загружаются в регистры процессора , т.к . это наиболее быстрый и эффективный способ передачи данных . Прерывания. Прерывание – это запуск специальной подпрограммы (называемой «обработчиком прерывания» или «программой обслуживания прерывания» ), котор ый вызывается сигналом аппаратуры . На время выполнения этой подпрограммы реализация текущей программы останавливается (см . рис .1.5). Термин «запрос на прерывание» ( interrupt request ) используется потому , что иногда программа отказывается подтвердить прерыва ние и выполнить обработчик прерывания немедленно . Рис . 1.5. Выполнение прерываний. МК может не реагировать на прерывания , пока не завершится выполнение текущей задачи – этот реализуется путем запрещения (маскирования ) обслуживания запроса прерывания . После решения задачи возможен один из двух вариантов : сброс маски и разрешение обслуживания прерывания , что пр и ведет к вызову обработчика прерывания , или анализ значения битов , указывающих на поступление запросов прерывания и непосредственное выполнение программы обслуживания без вызова обработчика прерывания . Такой метод обработки прерывания используется , когда т р ебуется обеспечить заданное время выполнения основной программы , так как любое пребывание может нарушить реализацию необходимого интерфейса . Обработчик всегда обеспечивает следующую последовательность действий : 1. Сохранить содержимое регистров контекст а. 2. Сбросить контроллер прерываний и оборудование , вызвавшее запрос . 3. Обработать данные . 4. Восстановить содержимое регистров контекста . 5. Вернуться к прерванной программе . Регистры контекста – это регистры , определяющие текущее состояние выпо лнения основной программы . Обычно к их относят СК , регистры состояния и аккумулятор . Другие регистры МК , такие как индексные регистры , могут быть использованы в процессе обработки прерывания , поэтому их содержимое также необходимо сохранить . Все остальные регистры являются специфическими для конкретного типа МК и его применения . После сброса в исходное состояние контроллер прерываний готов воспринимать следующий запрос , а оборудование , вызывающее прерывание , готово посылать запрос , когда возникают соответс твующие причины . Если поступит новый запрос прерывания , то регистр маскирования прерываний процессора предотвратит обработку прерывания , но регистр состояния прерываний зафиксирует этот запрос , который будет ожидать своего обслуживания . После завершения о б служивания текущего прерывания маска прерывание будет сброшена , и вновь поступивший запрос поступит на обработку . Вложенные прерывания сложны некоторым типам МК , которые не имеют стека . Эти прерывания так же могут вызывать проблемы , связанные с переполнен ием стека . Иногда МК может быстро отреагировать на запрос прерывания , приняв необходимые данные , которые будут потом использованы после решения текущей задачи . Это реализуется путем сохранения поступивших данных в массиве памяти и последующей их обработки , когда выполнение исходной программы буде завершено . Такой способ обслуживания является хорошим компромиссом между немедленной полной обработкой прерывания , которая может потребовать много времени , и игнорированием прерывания , что может привести к потере информации о событии , вызвавшем прерывание. При обработке прерывания содержимое регистра состояния обычно (но не всегда ) автоматически сохраняется вместе с содержимым СК перед обработкой прерывания . Это избавляет от необходимость сохранять его в памяти про граммными средствами с помощью команды пересылки , а затем восстанавливать при возврате к исходной программе . Однако такое автоматическое сохранение реализуется не во всех типах МК . Если содержимое регистра состояния сохраняется перед началом обработки пре рывания , то по команде возврата производится его автоматическое обновление . Если содержимое других регистров изменяется при выполнении обслуживания прерывания , то оно также должно быть сохранено в памяти до изменения и восстановлено перед возвратом в осно в ную программу . «Вектор прерывания» – это адрес , который загружается в СК при переходе к обработчику прерывания . Существует несколько типов векторов . Адрес , который загружается в СК при запуске МК ( RESET ) называется «вектор сброса» . Для различных прерывани й могут быть заданы различные вектора . Но иногда различным прерываниям назначается один вектор . Это не должно вызвать проблем при работе с МК , так как чаще всего он исполняет одну единственную программу . В МК , где аппаратная часть хорошо известна , не долж н о возникнуть каких либо проблем при совместном использовании векторов прерываний. В заключении можно добавить , что системные подпрограммы – это своего рода программные прерывания , которые с помощью специальных процессорных команд имитируют аппаратные преры вания . Они располагаются в произвольном месте памяти , или могут требовать для обращения к ним межсегментных переходов. Таймеры. Таймеры в микропроцессорных системах используются не только для обеспечения заданной задержки , но и для решения гораздо более широкого круга задач . Обычно для переключения таймера используют тактовые импульсы процессора . Загрузив в таймер нач альное значение , можно отсчитывать определенные интервалы времени , фиксируя окончание интервала по моменту переполнения таймера . Часто перед таймером включают предварительный делитель тактовой частоты , чтобы иметь возможность отсчитывать более длинные инт е рвалы времени . Делитель обеспечивает инкремент содержимого таймера после поступления определенного числа тактовых импульсов . Их можно использовать для точного формирования временных интервалов , подсчета импульсов на выходах МК , формирования последовательн ости импульсов , тактирования приемопередатчика последовательного канала связи . Таймеры /счетчики способны вырабатывать запросы прерываний , переключая ЦП на их обслуживание по событиям и освобождая его от необходимости периодического опроса состояний таймер о в . Поскольку основное применение МК находят в системах реального времени , таймеры /счетчики являются их обязательным элементом . В некоторых модификациях число таймеров достигает 32. 1.2.5. Ввод /вывод данных Осно вной интерфейс между МК и внешними устройствами реализуется через параллельные порты ввода /вывода . Во многих МК выводы этих портов служат также для выполнения других функций , например последовательного или аналогового ввода /вывода . Во многих МК отдельные выводы портов могут быть запрограммированы на ввод или вывод данных . Необходимо обратить особое внимание на то , при вводе данных считывается значение сигнала , поступающего на внешний вывод , а не содержимое триггера данных . Если к внешнему выводу подключен ы выводы других устройств , то они могут установить свой уровень выходного сигнала , который будет считан вместо ожидаемого значения данных , записанных в триггер . В некоторых МК существует возможность выбора между чтением данных , установленных на выходе триг г ера или на внешнем выводе . Когда на шину необходимо вывести «0» или « 1» , то сначала записывают соответствующее значение в триггер данных , а затем с помощью триггера управления на выходе устанавливается необходимый уровень потенциала . Триггер управления ра зрешает вывод данных на шину . В современных МК обеспечивается индивидуальный доступ к триггерам данных и управления с помощь адресной шины . Внешний вывод может быть также использован для подачи запроса прерывания . Это обычно реализуется , когда вывод работ ает в режиме ввода . Наиболее распространенный вид связи между различными электронно-вычислительными системами – это последовательный обмен . В этом случае байт данных передается по единственному проводу бит за битом с обеспечением синхронизации между прие мником и источником данных . Очевидное преимущество последовательной передачи данных состоит в том , что она требует небольшого количества линий связи . Существует множество стандартных последовательных протоколов передачи данных . В некоторых МК эти протокол ы реализуются внутренними схемами , размещенными на кристалле , что позволят упростить разработку различных приложений . Аналоговый компаратор. Часто в МК встраивается аналоговый компаратор напряжений . Компаратор представляет собой простую схему , которая , которая сравнивает два напряжения . Обычно один сигнал называют входным , а другой опорным .[7] На выходе устанавливает ся « 1» , если входное напряжение больше , чем опорное (см . рис . 1.6). этот способ наиболее удобно использовать в таких устройствах , как термостаты , где необходимо контролировать достижение определенного уровня измеряемой величины , которая задается значением входного напряжения . Рис . 1.6. Сигналы на входе и выходе аналогового компаратора . Программирование устройств. Программирование устройств , в том числе и микроконтроллеров обычно происходит следующим образом . В регистр программатора загружается значение , которое необходимо разместить по определенному адресу , затем вк лючается схема , которая пересылает содержимое этого регистра по заданному адресу , проходит некоторое время ожидания , пока завершиться процесс программирования выбранной ячейки памяти и , на конец , выполняется верификация , т.е . проверяется правильность запи с анного значения . Программирование всего устройства может занять от нескольких секунд до нескольких минут в зависимости от размера памяти и алгоритма программирования . Часто оборудования для программирования оказывается слишком дорогим , особенно для радиол юбителей и предприятий малого бизнеса . Но в некоторых случаях для программирования требуется весьма простое и доступное оборудование . К примеру , некоторые модели PIC и AVR микроконтроллеров программируются очень легко . Существует также устройства , которые не требуют оборудования для программирования , на пример , МК Basic STAMP , или имеют встроенный аппаратно-программный блок , избавляющий от необходимости использования внешнего оборудования , кроме источника повышенного напряжения для программирования , как МК 68НС 05. Очень важный аспект , касающийся программирования устройств , заключается в том , что может ли устройство быть запрограммировано в системе . Это называется внутрисистемное программирование (ВСП ) – от английского In - System Programming ( ISP ). Если МК до пускает возможность такого программирования , то это означает , что он может быть смонтирован на плату с пустой памятью программ , которая затем может быть запрограммирована без какого либо влияния на остальные компоненты схемы . Это может стать важным обстоя т ельством при выборе МК . Использование ВСП избавляет МК от необходимость покупать специальный программатор , дает возможность обновлять программное обеспечения без изменения расположенных на плате аппаратных средств и позволяет производителям создавать запа с готовых изделий , которые могут легко модифицироваться в соответствии с поступающими заказами . Безопасность памяти программ. Для многих приложений желательно защитить программный код , записанный в МК . Чтобы обеспечить такую возможность многие МК содержат специальные средства для предотвращения считывания хранящихся в них программ . Часто такая возможность реализуется путем установки определенного значения конфигурационного бита в процессе программирования . Обычно значения этого бита можно изменить только в процессе перепрограммирования содержимого памяти МК , например при УФ стирании содержимого EPROM . Встроенная защи та не может предотвратить все возможности считывания программного кода . Такое считывание можно произвести во многих лабораториях , выполняющих анализ причин отказов микросхем , причем за очень короткое время . Чтобы усложнить и сделать операцию считывания ме н ее эффективной , некоторые компании зашифровывают записанные программы путем перемешивания команд и включают специальные аппаратные блоки , которые преобразуют перемешенные данные в поток команд процессора . И все же , установка бита защиты не может гарантир о вать абсолютную защиту программного кода загруженного в МК. 1.3. Инструментальные и программные средства разработки и отладки Самый эффективный способ отладки программ для МК – применение с пециализированных профессиональных инструментальных отладочных средств , к которым следует отнести : · внутрисхемные эмуляторы (ВСЭ ) – программно аппаратное средство , способное замещать собой эмулируемый процессор в реальном устройстве ; · программные симул яторы – программное средство способное имитировать работу МК и его памяти ; · мониторы отладки – специальная программа , загружаемая в память отлаживаемой системы. · платы развития ( Evaluation Boards – оценочные платы ) – своеобразные конструкторы для макети рования прикладных систем ; · эмуляторы ПЗУ – программно-аппаратное средство , позволяющее заменить ПЗУ отлаживаемого устройства на ОЗУ , в которое можно загрузить программу с компьютера через один из стандартных каналов связи. Помимо этого существуют и комби нированные устройства и наборы . Симуляторы Как правило , симулятор состоит из отладчика , модел и ЦП и памяти . Более совершенные устройства содержат в своем составе модели встроенных периферийных устройств (таймеров , портов , АЦП и систем прерываний ). Симулятор должен уметь загружать файлы программ в всех популярных форматах , максимально полно отобра жать информацию о состоянии ресурсов симулируемого МК , а также предоставлять возможности по симуляции выполнения загружаемой программы в различных режимах . В процессе отладки модель выполняет программу , и на экране монитора компьютера отображается текущее состояние модели. Загрузив программу в симулятор , пользователь может запускать ее пошаговом или непрерывном режиме , задавать условные или безусловные точки останова , контролировать и свободно модифицировать содержимое ячеек памяти и регистров симулируемого МК . Симулятор позволяет быстро проверить логику выполнения программы , правильность выполнения арифметических операций. В зависимости от класса используемого отладчика некоторые модели симуляторов поддерживают высокоуровневую отладку программ . Симулятор м ожет содержать и ряд дополнительных программных средств , например интерфейс внешней среды . Наличие такого интерфейса позволяет создавать и гибко использовать модель внешней среды МК , функционирующую и воздействующую на отлаживаемую программу по заданному а лгоритму. В реальной системе МК обычно «занимается» считыванием информации с подключенных к нему устройств (датчиков ), обработкой ее и выдачи управляющих сигналов на исполнительные устройства . Для того чтобы в простом симуляторе смоделировать работу датчик а , нужно в ручную изменять текущее состояние модели периферийного устройства , к которому в реальной системе подключен датчик . Но существует ряд современных разработок программных симуляторов , в которых чтобы имитировать внешние условия и ситуации , обычно и спользуется специальный файл входных воздействий . Этот файл задает последовательность входных сигналов , поступающих на моделируемое устройство . К примеру , для микроконтроллеров AVR этот входной файл программного симулятора может выглядеть следующим обра зом : 000000000:00 000000006:F1 000000015:18 000000109:1C 000000203:61 000000250:10 000000344:1F 000000391:71 999999999: ff где каждая строка содержит – цикл :данные , поступающие на какой либо указанный порт. В некоторых моделях симуляторов эта проблема имит ации внешних сигналов решена таким образом , что симулятор имеет встроенное средство для создания моделей подключенных к МК внешних устройств , включая средства графического отображения информации . Очевидная особенность программных симуляторов в том , что за груженные в них программы выполняются в масштабе времени , отличном от реального . Однако низкая цена , возможность отладки даже при отсутствии макета отлаживаемого устройства делают программные симуляторы весьма привлекательным средством отладки . Необходимо также отметить , что существует целый класс ошибок , которые можно обнаружить только с помощью симулятора. Интегрированные среды разработки Идея единства программного и аппаратного обеспечения систем на базе МК является очень важной . Объединение инструментальных средств разработки программного обеспечения с инструментальными средствами разработки ап паратного обеспечения может стать важным преимуществом при разработке устройств . Существенно облегчают и ускоряют процесс разработки и отладки микропроцессорных систем , так называемые интегрированные среды разработки . Они совмещают в себе текстовый редакт ор для написания исходных текстов , трансляторы с ассемблера и Си , линкер , отладчик , справочную информацию по МК и другие средства , необходимые разработчику . Настройка трансляторов , линкера и других компонентов производится не методом указания ключей в ком а ндной строке , а в виде диалоговых окон , где нужно только расставить «галочки» в нужных местах . Преобразование исходных текстов программ в файл машинных кодов запускается нажатием одной клавишей. Появление интегрированных сред разработки программ ещё больше повысило эффективность создания программ для МК , позволило разработчику сосредоточиться на сути решаемой задачи и отвлечься от конкретных деталей ее реализации . Интегрированные пакеты для разработки программ выпускают несколько фирм , пакеты разных произв о дителей схожи между собой по функциям , но различаются предоставляемыми сервисными возможностями , удобством работы и качеством генерированного машинного кода. Напомним , что при традиционном подходе начальный этап написания программ строится следующим образо м . Исходный текст набирают с помощью какого либо текстового редактора . По завершению набора работа с текстовым редактором прекращается и запускается кросс-компилятор . Как правило , новая программ содержит синтаксические ошибки , и компилятор сообщает о них н а консоль оператора . Затем вновь запускается текстовый редактор , и оператор ищет и устраняет выявленные ошибки . При этом сообщение об их характере , выведенные компилятором уже не видны , так как экран занят текстовым редактором . Этот цикл может повторяться не один раз . И если программа относительно сложна , собирается из различных частей , подвергается редактированию или модернизации , то даже этот начальный этап может потребовать очень много сил и времени программиста. Избежать рутинной работы и тем самым сущ ественно повысить производительность труда программиста позволяет появившиеся и быстро завоевывающие популярность так называемые интегрированные среды (оболочки ) разработки ( Integrated Development Environment – IDE ). Как правило , хорошая интегрированная ср еда объединяет имеющиеся средства отладки (внутрисхемный эмулятор , программный симулятор и программатор ) и обеспечивает работу программиста с текстами программ в стиле диалоговых окон. Интегрированная среда позволяет : · использовать встроенный многофайлов ый текстовый редактор , специально ориентированный на работу с исходными текстами программ ; · наблюдать одновременно в многооконном режиме диагностику выявленных при компиляции ошибок и исходный текст программы доступный редактированию ; · вести параллельную работу над несколькими проектами . Менеджер проектов позволяет использовать любой проект в качестве шаблона для вновь создаваемого . Опции используемых компиляторов и список исходных файлов проекта устанавливаются в диалоговых меню и сохраняются в рамках п р оекта , устраняя необходимость работы с неудобными bat – файлами : · подвергать перекомпиляции , только редактировавшиеся модули ; · загружать отлаживаемую программу в имеющиеся средства отладки и работать с ними без выхода из оболочки ; · подключать к оболочк и практически любые программные средства. В последнее время функции интегрированных сред разработки становится принадлежностью программных интерфейсов наиболее «продвинутых» эмуляторов и отладчиков симуляторов . Такие функциональные возможности в сочетании с дружественным интерфейсом существенно ускоряют работу программиста . Таким образом , выбирая инструментальные средства отладки , целесообразно принимать в расчет следующий комплекс показателей : перечень поддерживаемых МК , ограничения на ресурсы эмулируемых /симулируемых МК , возможность символьной отладки , перечень поддерживаемых компиляторов и , наконец , сервисные возможности . Язык Ассемблера. Прежде чем начать разработку какого либо устройства на база МК очень важно познакомиться с основами программирования на языке Ассемблера . При создании приложений для МК следует не только освоить этот метод программирования , но и н аучиться хорошо понимать , как шаг за шагом выполняется ваша программа , и что при этом происходит в устройстве. Чтобы процесс изучения языка , написание и отладка программ на Ассемблере был более простым и понятным , существует несколько приемов . Во-первых – использование визуализации процедур выполнения команд процессором . Во-вторых – применение методов структурного программирования , чтобы сделать программы более простыми для чтения и понимания . Визуализацию выполнения команд лучше всего осуществлять , исполь зуя структурную схему процессора или МК , на которой отмечается прохождение данных при выполнении каждой команды . В результате обеспечивается хорошее визуальное представление процесса выполнения команд . Языки программирования высокого уровня. Для программирования МК можно использовать различные языки высокого уровня . Термин «язык высокого уровня» служит для обозначени я языков , используемых для написания легко читаемых программ , которые конвертируются (компилируются ) в язык ассемблера , а затем преобразуются в объектный код (биты и байты ) для их выполнения микроконтроллером . Перечислим основные характеристики языков выс окого уровня : · наличие встроенных функций (например , консольный ввод /вывод ) с подключаемыми библиотеками ; · разнообразные типы данных (8-, 16-, 32-битные и с плавающей точкой ); · выполнение арифметических операций с использованием стека ; · использован ие локальных и глобальных переменных , указателей и структур данных ; · распределение памяти ; · доступ к аппаратным регистрам ; · символическая информация для симулятора /эмулятора. Реализация этих характеристик может быть проблематичной для встраиваемых МК , которые обладают следующими особенностями : · ограниченный объем памяти программ ROM и памяти данных RAM ; · отсутствие BIOS или операционной системы ; · переопределяемый ввод /вывод (когда вывод может использоваться как цифровой /аналоговый /последовательн ый вход /выход ). Таким образом , использование ассемблера необходимо , если к размеру и быстродействию генерируемого кода предъявляются очень жесткие требования . В настоящее время таких случаев становится все меньше и меньше , т.к . практически всегда можно взя ть более «быстрый» МК с большим объемом памяти . Кроме того , современные пакеты кросс средств позволяют легко писать смешанные программы , где часть модулей написана на Си , а наиболее критичные к быстродействию части – на ассемблере . Компиляторы Си позволяю т также вставлять в исходные тексты ассемблерные инструкции . При разработке программного обеспечения для МК существует несколько правил , которые следует выполнять , чтобы объем используемых ресурсов не превысил доступный предел . 1. Использовать только оди н вид интерфейса с аппаратными средствами (внешними устройствами ). Применения различных интерфейсов создает проблемы , если потребуется подключать другие типы внешних устройств. 2. Идентифицировать глобальные переменные , специфичные для подпрограмм , и не и спользовать их где-нибудь еще в коде. 3. Использовать везде , где возможно , локальные переменные (это можно реализовать только в языках высокого уровня ). 4. Если предполагается наличие временно используемых переменных , то программа должна обеспечить их ун икальное использование . Следование этим правилам при разработке прикладных программ избавит вас в дальнейшем от проблем , связанных с устранением трудно выявляемых неустойчивых ошибок в программе . 1.4. Основные типы интерфейсов МК. 1.4.1. Подключение переключателей и подавление «звона» контактов. При замыкании и размыкании переключателей в цепи возникают импульсные помехи , вызванные дребезгом контактов . Эти помехи обычно называют «шумом» или «звоном» . Такое явление часто возникает в системах на базах МК , где для ввода данных используется клавиатура , и «звон» может восприниматься как многократное нажатие клавиши (см . рис . 1.7). «Звон» возникает при установке и разр ы ве контакта путем нажатия на клавишу . а ) б ) Рис . 1.7. а ) схема ключа ; б ) дребезг контактов. Чтобы устранить данный эффект , используются специальные схемы или программные методы дл я подавления «звона» . Один из простых схемотехнических способов устранения «звона» состоит в подключении RC -цепи . В этой схеме время , требуемое для заряда разряда конденсатора до порогового напряжения , маскирует «звон» контактов при переключении . Можно так же установить триггер Шмитта между схемой ключа и МК , чтобы усилить эффект подавления «звона» . Недостатки этого метода – дополнительные затраты на компоненты , которые должны быть установлены на плате , и дополнительное время , требуемое для заряда /разряда RC -цепи . Все это может затруднить использование данной схемы , так как для некоторых ключей с большим уровнем шумов дополнительная задержка может составить десятые доли секунды . Значительно лучший способ избавиться от «звона» – сделать это программно . Если у р овень напряжения на выходе ключа не изменяется в течении 20мс , то можно считать , что «звон» окончился , и больше изменения состояний не ожидается . 1.4.2. Световая индикация. Очень часто вывод данных реализуются с помощью светодиодов LED ( Light Emitting Diode ), которые достаточно дешевы и легко подключаются к МК . Обычно для свечения светодиода требуется ток более 16 мА , что для большинства МК находится в диапазоне допустимых значений выходных токов . Следует помни ть , что светодиод является диодом , пропуская ток только в одном направлении. Типичная схема подключения светодиода к выводу МК показана на рис . 1.8. В этой схеме светодиоды будут светиться когда МК выдает сигнал «0» (низкое напряжение ). Когда вывод работ ает в качестве входа данных или на него выводится « 1» , то светодиод будет выключен . Резистор сопротивлением 220 Ом используется для ограничения тока , т.к . слишком большой ток может вывести из строя МК и светодиод . Некоторые МК содержат ограничители тока н а выходных линиях , что устраняет потребность в ограничивающем резисторе . Но все же целесообразно , на всякий случай , включить этот резистор , чтобы гарантировать , что короткое замыкание на «землю» или напряжение питания Vcc , не выведет из строя МК. Рис . 1.8. Подключение светодиода к микроконтроллеру. Семи сегментный индикатор. Вероя тно самый простой вывод числовых десятичных и шестнадцатеричных данных – это использование семи сегментного индикатора (ССИ ). Такие индикаторы были очень популярны в 70х годах , но в последствии их место заняли жидкокристаллические индикаторы (ЖКИ ). Но све т одиодные индикаторы до сих пор являются полезными приборами , которые могут быть включены в схему без больших усилий для создания программного обеспечения . Включая определенные светодиоды (зажигая сегменты ), можно выводить десятичные числа (см . рис . 1.9). Каждый светодиод в индикаторе имеет свой буквенный идентификатор ( A , B , C , D , E , F , G ), и одна из ножек светодиода подключена к соответствующему внешнему выводу . Вторые ножки всех светодиодов соединены вместе и подключены к общему выводу . Этот общий вывод определяет тип индикатора : с общим катодом или с общим анодом . Подключение индикатора к МК осуществляется весьма просто : обычно индикатор подключают как семь или восемь (если используется десятичная точка ) независимых светодиодов . Наиболее важной частью р аботы при подключении к МК нескольких ССИ является назначения линий вводе вывода для каждого светодиода . Решение этой задачи в начале выполнения проекта упростит вам монтаж разводки и отладку устройств в дальнейшем . Типичный способ подключения нескольких и ндикаторов состоит в том , чтобы включить их параллельно и затем управлять протеканием тока через общие выводы отдельных индикаторов . Так как величина этого тока обычно превышает допустимое значение выходного тока МК , то для управления оком включается допо л нительные транзисторы , которые выбирают , какой из индикаторов будет находиться в активном состоянии . Рис . 1.9. Семи сегментный индикатор. На рис . 1.10 показано подключение к МК четырех ССИ . В этой схеме МК выдает данные для индикации , последовательно переходя от одного индикатора к другому . Каждая цифра будет высвечиваться в течении очень короткого интервала времени . Это обычно выполняется с помощью подпрограммы обслуживания прерываний таймера . Чтобы избежать мерц а ния изображения , подпрограмма должна выполняться со скоростью , обеспечивающий включение индикатора , по крайней мере , 50 раз в секунду . Чем больше цифр , тем чаще должны следовать прерывания от таймера . Например , при использовании восьми ССИ цифры должны вы в одиться со скоростью 400 раз в секунду. Рис . 1.10. Подключение к МК четырех ССИ. 1.4.3. Ввод с матричной клавиатуры. Во многих приложениях требуется производить ввод дан ных с клавиатуры . Это может быть реализовано при помощи отдельных кнопок , но такой подход слишком расточителен с точки зрения использования линий ввода /вывода МК . Лучшим решением является использование матричной клавиатуры , которая представляет собой набо р ключей , объединенных в ряды и столбцы (см . рис . 1.11). Рис . 1.11. Подключение к МК матричной клавиатуры. Для чтения состояния определенного ключа на столбец подается сигнал , а затем считывается состояние рядов . Об ычно ряды подключаются к высокому потенциалу , а опрашиваемый столбец соединяется с землей . Если при сканировании считывается низкий уровень сигнала , то это означает , что ключ в данной позиции ряд-столбец замкнут . На рис . 1.11 показаны два МОП-транзистора, которые используются для подключения столбцов к земле . Но в некоторых МК выводы могут работать в режиме с открытым коллектором , и следовательно имитировать работу этих транзисторов , делая их включение ненужным . Матричная клавиатура может быть расширена пр актически до любого размера , используя при этом небольшое число выводов МК . Например , 104-клавишная клавиатура ПК – это матрица , содержащая 13х 8 ключей. 2. ОСОБЕННОСТИ ПОСТРОЕНИЯ И ФУНКЦИОНИРОВАНИЯ МИКРОКОНТРОЛЛЕРОВ ФИРМ Ы ATMEL СЕМЕЙСТВА AVR 2.1. Архитектура микропроцессорного ядра AVR-микроконтроллеров Архитектура AVR была оптимизирована так , чтобы соединить достоинства Гарвардской и Принстонской (Фон Неймана ) архитектуры для достижения очень быстрого и эффективного выполнения программ . Такая организация обеспечивает высокую эффективность процессора при обработке данных . Основной идеей всех RISC (Reduced Instruction Set Computer), как известно , является увеличение быстродействия за счет сокращения количества операций обмена с памятью программ . Для этого каждую команду стремятся уместить в одну ячейку памяти программ . При ограниченной разрядности ячейки памяти это неизбе ж но приводит к сокращению набора команд микропроцессора . У AVR-микроконтроллеров в соответствии с этим принципом практически все команды (исключая те , у которых одним из операндов является 16-разрядный адрес ) также упакованы в одну ячейку памяти программ . Но сделать это удалось не за счет сокращения количества команд процессора , а путем расширения ячейки памяти программ до 16 разрядов . Такое решение является причиной богатства системы команд AVR по сравнению с другими RISC-микроконтроллерами . Организация п амяти AVR выполнена по схеме Гарвардского типа , в которой разделены не только адресные пространства памяти программ и памяти данных , но также и шины доступа к ним . Для более углубленного понимания архитектуры приведем две схемы (см . рис . 2.1 и 2.2). Вся п рограммная память AVR-микроконтроллеров выполнена по технологии FLASH и размещена на кристалле . Она представляет собой последовательность 16-разрядных ячеек и имеет емкость от 512 слов до 64K слов в зависимости от типа кристалла . Разделение шин доступа (р ис . 2.2.) к FLASH памяти и SRAM памяти дает возможность иметь шины данных для памяти данных и памяти программ различной разрядности , а также использовать технологию конвейеризации . Конвейеризация заключается в том , что во время исполнения текущей команды п рограммный код следующей уже выбирается из памяти и дешифрируется. Для сравнения вспомним , что у микроконтроллеров семейства MCS-51 выборка кода команды и ее исполнение осуществляются последовательно , что занимает один машинный цикл , который длится 12 пери одов кварцевого резонатора . В случае использования конвейера приведенную длительность машинного цикла можно сократить . Например , у PIC-микроконтроллеров фирмы Microchip за счет использования конвейера удалось уменьшить длительность машинного цикла до 4 пе риодов кварцевого резонатора . Длительность же машинного цикла AVR составляет один период кварцевого резонатора . Таким образом , AVR способны обеспечить заданную производительность при более низкой тактовой частоте . Именно эта особенность архитектуры и позв о ляет AVR-микроконтроллерам иметь наилучшее соотношение энергопотребление /производительность , так как потребление КМОП микросхем , как известно , определяется их рабочей частотой [9,11]. П рограммная модель AVR и система команд. На рисунке 2.3 изображена программная модель AVR-микроконтроллеров , которая представляет собой диаграмму программно доступных ресурсов AVR. Центра льным блоком на этой диаграмме является регистровый файл из 32 оперативных регистров (R0-R31) или как их обычно называют регистры общего назначения (РОН ). Все РОН непосредственно доступны АЛУ . Старшие регистры (см . рис. 2.4.) объединены парами и образуют т ри 16-разрядных регистра , предназначенных для косвенной адресации ячеек памяти (AVR без SRAM имеют только один 16-битный регистр Z). Рис . 2.3. Программная модель AVR-микроконтроллеров . Регистровый файл , блок реги стров ввода /вывода и оперативная память , как показано на рис . 2.3, образуют единое адресное пространство , что дает возможность при программировании обращаться к 32 оперативным регистрам и к регистрам ввода /вывода как к ячейкам памяти , используя команды до с тупа к SRAM (в том числе и с косвенной адресацией ) [8]. Все арифметические и логические операции , а также часть операций работы с битами выполняются в АЛУ только над содержимым РОН . Следует обратить внимание , что команды , которые в качестве второго операн да имеют константу ( SUBI, SBCI, ANDI, ORI, SBR, CBR ), могут использовать в качестве первого операнда только регистры из второй половины РОН (R16-R31). Команды 16-разрядного сложения с константой ADIW и вычитания константы SBIW в качестве первого операнда и спользуют только регистры R24, R26, R28, R30. Рис . 2.4. Регистровый файл или РОН . Во время выполнения арифметических и логических операций или операций работы с битами АЛУ формирует те или иные признаки результата операции , то есть устанавливает или сбрасывает биты в регистре состояния SREG (Status Register) (см . рис . 2.5). Признаки результата операции могут быть затем использованы в программе для выполнения дальнейших арифметико-логических операций или команд усл овных переходов . Адресация регистров ввода /вывода и памяти SRAM . Регистры ввода /вывода , также изображенные на рис . 1, представляют собой набор регистров управления процессорного ядра и регистров управления и данных аппаратных узлов AVR-микроконтроллера . Регистрами ввода /вывода являются регистры SREG, MCUSR и указатель стека SPH:SPL а также регистры , управляющие систем о й прерывания микроконтроллера , режимами подключения EEPROM памяти , сторожевым таймером , портами ввода /вывода и другими периферийными узлами . Изучение данных регистров удобно выполнять одновременно с изучением конкретного периферийного узла . Все регистры в вода /вывода могут считываться и записываться через РОН при помощи команд IN, OUT (см . группу команд передачи данных приложение 1). Регистры ввода /вывода , имеющие адреса в диапазоне $00 - $1F (знак $ указывает на шестнадцатеричную систему счисления ), облада ют возможностью побитовой адресации . Непосредственная установка и сброс отдельных разрядов этих регистров выполняется командами SBI и CBI (см . группу команд работы с битами приложение 1). Для признаков результата операции , которые являются битами регистра ввода /вывода SREG, имеется целый набор команд установки и сброса . Команды условных переходов в качестве своих операндов могут иметь как биты-признаки результата операции , так и отдельные разряды побитно адресуемых регистров ввода /вывода . На рис . 2.3 показ ано распределение адресов в едином адресном пространстве . Младшие 32 адреса ($0 - $1F) соответствуют оперативным регистрам т.е . РОН . Следующие 64 адреса ($20 - $5F) зарезервированы для регистров ввода /вывода . Внутренняя SRAM у всех AVR начинается с адреса $60. Таким образом , регистры ввода /вывода имеют двойную нумерацию . Если используются команды IN, OUT, SBI, CBI, SBIC, SBIS , то следует использовать нумерацию регистров ввода /вывода , начинающуюся с нуля (назовем ее основной ). Если же к регистрам ввода /выво да доступ осуществляется как к ячейкам памяти , то необходимо использовать нумерацию единого адресного пространства оперативной памяти данных AVR. Очевидно , что адрес в едином адресном пространстве памяти данных получается путем прибавления числа $20 к осн о вному адресу регистра ввода /вывода . Для хранения оперативных данных программист , кроме РОН , может использовать внутреннюю и внешнюю (если они имеются ) блоки SRAM (см . рис. 2.3). Работа с внешней SRAM может быть программно разрешена /запрещена установкой /с бросом бита SRE в регистре ввода /вывода MCUSR. Операции обмена с внутренней оперативной памятью AVR-микроконтроллер выполняет за два машинных цикла . Доступ к внешней SRAM требует одного дополнительного цикла на каждый байт по сравнению с внутренней память ю . Кроме того , установкой бита SRW в регистре ввода /вывода MCUSR можно программно увеличить время обмена с внешней SRAM еще на один дополнительный машинный цикл ожидания . Выполнять арифметико-логические операции и операции сдвига непосредственно над содер жимым ячеек памяти нельзя . Нельзя также записать константу или очистить содержимое ячейки памяти . Система команд AVR позволяет лишь выполнять операции обмена данными между ячейками SRAM и оперативными регистрами . Достоинством системы команд можно считать р азнообразные режимы адресации ячеек памяти . Кроме прямой адресации имеются следующие режимы : косвенная , косвенная с пост-инкрементом , косвенная с пре-декрементом и косвенная со смещением . Поскольку внутренняя и внешняя SRAM входят в единое адресное простр анство (вместе с оперативными регистрами и регистрами ввода /вывода ), то для доступа к ячейкам внутренней и внешней памяти используются одни и те же команды . Следует отметить , что регистры ввода /вывода не полностью используют отведенные для них 64 адреса . Неиспользуемые адреса зарезервированы для будущих применений , дополнительных ячеек памяти по этим адресам не существует . Программный счетчик и стек В ячейках оперативной памяти организуется системный стек , который используется автоматически для хранения адресов возврата при выполнении подпрограмм , а также может использоваться программистом для временного хранения содер жимого оперативных регистров (команды PUSH и POP). В начале любой программы необходимо инициализировать стек программными средствами , т.е . занести в Указатель Стека ( Stack Pointer ) начальное значение , равное самому старшему адресу ячейки в оперативной памя ти . Микроконтроллеры , не имеющие SRAM, содержат трехуровневый аппаратный стек. Следует иметь в виду , что если стек располагается во внешней SRAM, то вызовы подпрограмм и возвраты из них требуют двух дополнительных циклов , если бит SRW не установлен , и четы рех , если установлен . Размер стека , организуемого в оперативной памяти , ограничен лишь размерами этой памяти . Если микроконтроллер содержит на кристалле 128 байт внутренней SRAM и не имеет возможности подключения внешней SRAM, то в качестве указателя верш ины стека используется регистр ввода /вывода SPL. Если есть возможность подключения внешней памяти или внутренняя память имеет размеры 256 байт и больше , то указатель стека состоит из двух регистров ввода /вывода SPL и SPH. При занесении числа в стек автома тически выполняются следующие действия : 1. Число записывается в ячейку памяти по адресу , хранящемуся в указателе стека . (SPH:SPL) <- число ; 2. Содержимое указателя стека уменьшается на единицу . SPH:SPL = SPH:SPL - 1. Обратные действия выполняются при извлечении числа из стека : 1. Содержимое указателя увеличивается на единицу . SPH:SPL= SPH:SPL + 1; 2. Число извлекается из ячейки памяти с адресом , хранящимся в указателе стека . (SPH:SPL) -> число . Таким образом , стек растет от старших адресов к младш им , поэтому , учитывая , что начальное значение указателя стека после сброса равно нулю , программист AVR обязательно должен в инициализирующей части программы позаботиться об установке указателя стека , если он предполагает использовать хотя бы одну подпрогр а мму . Кроме оперативной памяти программно доступными ресурсами микроконтроллера являются энергонезависимые , электрически программируемые FLASH и EEPROM блоки памяти , которые имеют отдельные адресные пространства . Младшие адреса памяти программ имеют специ альное назначение . Адрес $0000 является адресом , с которого начинает выполняться программа после сброса процессора . Начиная со следующего адреса $0001, ячейки памяти программ образуют область векторов прерывания . В этой области для каждого возможного исто ч ника прерывания отведен свой адрес , по которому (в случае использования данного прерывания ) размещают команду относительного перехода RJMP на подпрограмму обработки прерывания (см . рис . 2.3). Следует помнить , что адреса векторов прерывания одних и тех же а ппаратных узлов для разных типов AVR могут иметь разное значение . Поэтому для обеспечения переносимости программного обеспечения удобно , так же как и в случае с регистрами ввода /вывода , использовать символические имена адресов векторов прерывания , которые определены в соответствующем inc -файле . EEPROM блок электрически стираемой памяти данных AVR предназначен для хранения энергонезависимых данных , которые могут изменяться непосредственно на объекте . Это калибровочные коэффициенты , различные установки , кон фигурационные параметры системы и т . п . EEPROM-память данных может быть программным путем как считана , так и записана . Однако специальных команд обращения к EEPROM-памяти нет . Чтение и запись ячеек EEPROM выполняется через регистры ввода /вывода EEAR (реги с тр адреса ), EEDR (регистр данных ) и EECR (регистр управления ). Регистр состояния. Регистр состояния – SREG является частью пространства ввода /вывода и расположен по адресу $3F . В нем устанавливаются признаки результата арифметических операций . Отдельные биты регистра имеют следующее назначение (см . рис . 2.5) Рис . 2.5. Регистр состояния SREG (Status Register). Рассмотрим некоторые из признаков : · Бит 0 – С (carry) Флаг переноса . Устанавливается , если во время выполнения операции был перенос из старшего разряда результата ; · Бит 1 – Z (zero) Флаг нулевого результата. Устанавливается , если результат операции равен 0; · Бит 2 – N Флаг отрицательного результата . Устанавливается , если MSB (Most Significant Bit - старший бит ) результата равен 1 (правильно показывает знак результата , если не было переполнения разрядной сетки знакового числа ); · Бит 3 – V Флаг переполнения дополнения до двух . Устанавливается , если во время выполнения операции было переполнение разрядной сетки знакового результата ; · Бит 4 – : Бит знака , S = N XOR V . Бит S всегда равен исключающему ИЛИ между флагами N (отрицательный результат ) и V (переполнение допол нения до двух ). Правильно показывает знак результата и при переполнении разрядной сетки знакового числа ; · Бит 5 – H Флаг половинного переноса . устанавливается , есл и во время выполнения операции был перенос из 3-го разряда результата . · Бит 6 - T : Хранение копируемого бита . Команды копирования битов BLD (Bit LoaD) и BST (Bit STore) используют этот бит как источник и приемник обрабатываемого бита . Бит из регистра ре гистрового файла может быть скопирован в T командой BST , бит T может быть скопирован в бит регистрового файла командой BLD . · Бит 7 - I : Общее разрешение прерываний . Для разрешения прерываний этот бит должен быть установлен в единицу . Управление отдельным и прерываниями производится регистром маски прерываний - GIMSK/TIMSK. Если флаг сброшен (0), независимо от состояния GIMSK/TIMSK, прерывания не разрешены . Бит I очищается аппаратно после входа в прерывание и восстанавливается командой RETI , для разрешения обработки следующих прерываний. Прерывания. Описать , что происходит внутри процессора во время выполнения прерывания очень просто . Если произошел запрос прерывания , и флаг I в регистре состояния установлен в 1, то адрес следующий команды сохраняется в стеке , а выполнения программы продолжается с адреса , хранящимся в соответствующем векторе прерывания . Когда запрос преры вания получен , и программа перешла по этому вектору (адресу ), флаг I сбрасывается в 0, чтобы предотвратить возможность вызова нового прерывания во время обработки текущего прерывания . Флаг I будет снова установлен в 1 в конце обработчика прерывания , когда выполняется команда возврата RETI . Он также может быть установлен в 1 в процессе обработки (после сохранения контекстовых регистров ), чтобы разрешить вложенные прерывания . Средние и старшие модели AVR могут обрабатывать столько вложенных прерываний , на ск олько хватит объема стека для хранения содержимого счетчика команд и регистров контекста . Младшие модели имеют ограниченный объем стека (три позиции ), который может быстро переполниться при выполнении вложенных прерываний или подпрограмм . 2.2. Аппаратные средства AVR . Системный тактовый генератор. AV R может использовать три различных источника системной частоты : кварцевый или керамический резонатор , внешний тактовый сигнал или встроенный RC -генератор (имеется не во всех моделях ). Обычный диапазон частот для AVR – от 0 до 16 МГц . Кварцевый или керамич еский резонатор может быть подключен к AVR (см . рис . 2.6). Если используется одна из этих схем , то не следует подключать какие-либо другие устройства ни к одному из выводов XTAL . а ) б ) Рис . 2.6. Схемы подключения к AVR керамического и кварцевого резонаторов а ) без встроенных конденсаторов и б ) со встроенными конденсаторами. Также AVR может синхронизироваться внешним тактовым сигналом , поступающим на вход XTAL 1. Последний способ синхрониза ции – использование встроенного RC -генератора . Такой генератор на данный момент есть только в AT 90 S 1200, он обеспечивает тактовую частоту 1 МГц . Этот режим задается при помощи одного из битов конфигурации ( fuse bit ) только при параллельном программировании МК . Таймеры. Источником сигнала переключения таймеров /счетчиков является либо тактовая частота процессора , либо вн ешний синхросигнал . Тактовая частота процессора может использоваться непосредственно или предварительно делиться . Выбор источника сигнала и коэффициента деления производится с помощью мультиплексора (см . рис. 2.8). Биты CSxn , управляющие мультиплексором , р асположены в регистре управления таймера TCCR 0. В AT 90 S 8515, который содержит два таймерных блока , имеется два мультиплексора – по одному на каждый блок . В AT 90 S 1200 есть только один таймерный блок и один мультиплексор . Содержимое таймера инкрементируется при поступлении переднего фронта переключающего сигнала . Поэтому синхросигнал со внешнего вывода МК поступает в мультиплексор в прямом и инвертированном . Значение внешнего сигнала проверяется при поступлении переднего фронта тактового сигнала процессора. Н а рис . 2.7 показан Таймер 0 – простой 8-разрядный таймер , содержимое которого может быть считано или записано . Отключение входного сигнала происходит путем выбора «заземленного» входа при помощи мультиплексора . При переполнении счетчика реализуется маскир у емое прерывание. Таймер 1 – более сложный 16-разрядный таймер . Он может выдавать на выход импульсы и ШИМ-сигналы . Его большим достоинством является возможность реализации дополнительных функций , таких как таймер событий. Рис . 2.7. Структура таймера 0. Сторожевой таймер. Сторожевой таймер представляет собой отдельный таймер с собс твенной частотой на 1 МГц , который при включении будет отсчитывать нужный интервал времени . Если произойдет переполнение до того , как команда WDR сбросит таймер в 0, то производиться перезапуск МК. Сторожевой таймер включается при установке в 1 бита WDE в регистре управления сторожевого таймера WDTCR . Содержимое битов WDPn этого регистра определяет интервал времени до того , как сторожевой таймер произведет перезапуск МК. Устройство внешне го вывода. Схема подключения внешнего вывода , показанная на рис . 2.8, дает представление о его работе . С каждым набором линий («портом» ) связано три адреса ввода /вывода , которые позволя ют определять значения данных , записанных в порт , направление передачи данных (1- вывод , 0 - ввод ) и реальное значение сигнала на внешнем выводе . Вследствие этого есть возможность «подтянуть» выводы порта к высокому потенциалу для работы в режиме ввода да н ных , и использовать состояние некоторых выводов в качестве запросов прерываний . Чтение данных может быть либо непосредственно с внешнего вывода , либо с выхода регистра данных порта . Такая возможность является важной особенностью работы порта . Если внешняя линия перегружена или случайно закорочена на «землю» , то состояние внешнего выхода никогда не будет меняться . Поэтому в некоторых случаях очень важно иметь возможность прочитать содержимое регистра порта и сравнить его с реальным состоянием внешнего выво д а . Рис . 2.8. Схема внешнего вывода. «Подтягивание» внешнего вывода к высокому потенциалу управляется не отдельными битами регистра , а для этого используется специальная комбинационная схема . Эта схема разрешает «подтягивание» только , когда внешний вывод работает в режиме ввода данных , т.е . когда бит регистра направления данных сброшен в 0, а бит регистра данных порта установлен в 1. Аналоговый ввод /вывод. Встроенный аналоговый компаратор напряжений дает возможность не только сравнивать входное напряжение с опорным , но и измерять длительность импульса при помощи встроенного та ймера .[13] Выход компаратора (см . рис . 2.9.) будет находиться в состоянии 1, если значение напряжения на положительном (не инвертирующем ) входе AIN 0 больше , чем на отрицательном (инвертирующем ) AIN 1. Рис . 2.9. Устр ойство компаратора напряжения. Состояние может использоваться для реализации различных вариантов запроса прерывания , которые задаются при помощи битов ACIS 1 и ACIS 0 (см . таблицу 2.1.) в регистре прерывания и состояния аналогового компаратора ACSR . Таблица 2.1. Установки битов ACIS 1 и ACIS 0. ACIS 1 ACIS 0 Тип прерывания 0 0 Прерывание по переключению выхода компаратора 0 1 Зарезервировано 1 0 Прерывание по спадающему фронту (из 1 в 0) 1 1 Прерывание по нарастающему фронту (из 0 в 1) Определить текущее со стояние выхода компаратора можно путем опроса значения бита ACO в ACSR . Для уменьшения мощности потребления можно отключить компаратор , установив в 1 бит ACD в регистре ACSR . Перед тем , как включить или выключить компаратор , надо запретить все его прерыван ия путем сброса в 0 бита ACIE в регистре ACSR , чтобы предотвратить возможность поступления ложных запросов прерывания от компаратора . В МК AT 90 S 8515 к выходу компаратора можно подключить вход захвата таймера . При этом можно зафиксировать момент изменения сигнала на выходе компаратора , если в регистре ACSR бит ACIC установлен в 1. Такая возможность позволяет измерять длительность сигнала , поступающего на компаратор. Конфигурирование МК В AVR есть два типа битов , задающих конфигурацию МК . Биты конфигурирования « fuses bits » (плавкие перемычки ) используются для выбора режима работы AVR , тогда как биты защиты « lock bits » исп ользуются для запрещения доступа к памяти . . Биты конфигурирования различны для разных типов AVR . В AT 90 S 1200 установка в 1 бита RCEN подключает встроенный RC -генератор , при этом внешние тактовые импульсы игнорируются . Когда бит SPIEN сброшен в 0, разреша ется программирование МК по последовательному интерфейсу через порт SPI . Во всех этих моделях биты SPIEN и RCEN по умолчанию сброшены в 0. МК AT 90 S 8515 имеет биты SPIEN и FSTRT , которые позволяют при использовании внешнего тактового генератора производить быстрое включение МК без обычной задержки в 16мс . Биты конфигурирования « fuses bits » могут быть установлены или сброшены только при параллельном программировании . Биты защиты « lock bits » используются для запрещения /разрешения доступа к памяти программ в EEPROM , при этом достигаются свойства приведенные в таблице 2.2. Таблица 2.2. Режимы защиты и биты блокировки Биты блокировки Тип защиты Режим LB1 LB2 1 1 1 Защита не установлена 2 0 1 Дальнейшее программирование флэш-памяти запрещено 3 0 0 Как режим 2, но запрещено и чтение Примечание : биты блокировки стираются только при полном стирании памяти Память данных EEPROM . Операции чтения и записи области данных EEPROM довольно просты и надежны . Обращение к EEPROM производится при помощи команд с индексной адресацией , которые используют адрес , хранящийся в регистре EEAR . Если EEPROM имеет емкость больше 256 бай т , как у AT 90 S 8515, то используются два адресных регистра : EEARH для хранения старшей части адреса и EEARL – для хранения младшей части . Эти регистры должны сохранять правильный адрес до тех пор , пока не буде закончена операция чтения или записи . Запись в память данных EEPROM производится следующим образом : 1. Ожидание сброса в 0 бита EEWE в регистре управления EECR памяти EEPROM ; 2. Запись в EEAR нужного адреса ; 3. Запись в регистр данных EEDR нужных данных ; 4. Установка в 1 бита EEMWE в регистре EECR . (Бит EEMWE не используется в AT 90 S 1200); 5. В течении четырех тактов после установки бита EEMWE установить бит EEWE в 1 для начала записи в EEPROM . Операция записи занимает от 2,5 до 4мс . Бит EEMWE регистра EECR обеспечивает аппаратную блокировку запис и для того , чтобы уменьшить возможность случайного изменения EEPROM . Чтение из EEPROM выполняется аналогичным образом. 1. Ожидание сброса в 0 бита EEWE в регистре управления EECR ; 2. Запись в EEAR нужного адреса ; 3. Установка в 1 бита EERE в регистре EE CR ; 4. Чтение данных из EEDR . Операция записи должна быть закончена до того , как программа произведет попытку чтения из EEPROM . После установки в 1 бита EERE процессор переходит в состояние ожидания в течении двух тактов , пока данные выбираются из EEPROM . Это означает , что выполнение команды « SBI EECR , EERE » , которая инициализирует операцию чтения , занимает не один такт , а три . Подключение питания и запуск. Подключение питания к AVR осуществляется очень просто . Для этого требуется напряжение +5В , шина «земля» развязывающий конденсатор . Все модели имеют широкий диапазон напряжений питания 2,7 В – 6,0 В , что позволяет л егко реализовать батарейное питание , используя от 2 до 4 обычных батареек или никель-кадмиевых элемента . Что касается потребления энергии , то МК потребляют несколько мА в рабочем режиме и несколько сотен мкА в режим ожидания ( sleep mode ). Вывод RESET имее т внутреннее соединение с шиной питания через резистор («потягивания» к питанию ), что избавляет от необходимости использования внешнего соединения . В процессе отладки системы , когда надо постоянно перезапускать МК и наблюдать за его поведением , все , что в а м для этого нужно – это простая кнопка , которая будет замыкать вывод RESET на землю (см . рис . 2.10). В законченной системе вы можете оставлять вывод RESET не подключенным . Рис . 2.10. Запуск AVR при помощи внешнего выключателя . Е сли во время выполнения программы на вход RESET поступит сигнал низкого уровня длительность более двух тактов , то выполнение программы сбрасывается в начальное состояние , а тактовый генератор продолжает работать . Когда на этом выводе снова установиться выс окий уровень , выполнения программы начнется с нулевого адреса . Программирование в системе. Используя программирован ие по последовательному интерфейсу , можно менять программу в памяти МК , уже установленного в готовую к применению систему . Для этого плата с контроллером должна быть подключена к питанию и генератору тактовых сигналов (см . рис . 2.11). Рис . 2.11. Схеме подключения МК для программирования в системе. На рис . 2.11 включены согласующие резисторы в линиях программирования , чтобы быть уверенным , что если схема программирования подает на эти линии сигналы , уровень которых отличается от того , который поступает на них от других устройств системы , состояния выводов не изменяться и на них не возникнет конфликт сигналов . Для линии запуска используется другое подключение . Нормально на этой линии поддерживается высокий уровень с игнала , а программатор может подать на нее низкий , чтобы перевести МК в режим программирования по последовательному интерфейсу . Управление состоянием линии RESET осуществляется схемой , имеющий выход с открытым коллектором . Эту схему можно использовать для программирования прикладной системы . Надо соединить МК (сигналы «земля» , RESET , MISO , MOSI и SCK ) с программатором при помощи 5-и контактного IDC -разъема. 2.3. Система команд микроконтроллера AVR Микроконтроллеры AVR имеют очень широкий набор команд . Это позволяет более просто произвести разработку компиляторов , что также означает , что AVR может быть легко запрограммирован с использованием разнообразных команд , упрощающих решение задачи. Следует обратить внимание на следующие тонкости . Многие команды могут обращаться только к 16-старшим РОН и не имеют доступа к 16-младшим . Значения смещений и констант могут быть ограничены и оказаться не в том диапазоне , который вы ожидали . Существует р азличие между «полноценными» старшими моделями серии 8515 и младшими моделями серии 1200. Младшие модели МК реализуют часть полного набора команд , в которых доступен только один индексный регистр Z . Хотя при переносе программ с младших моделей на старшие вряд ли возникнут проблемы , они весьма вероятны при обратном направлении переноса . Даже с учетом всех этих предостережений AVR – это МК очень простой для программирования благодаря богатству набора команд и особенностям его структуры . Для наглядности , в д анном разделе приведем только некоторые примеры команд . Но прежде чем приступить к изучению команд , целесообразно рассмотреть различные способы адресации данных. Способы адресации данных Прямая адресация к Регистрам Общего Назначения Основным способом доступа к данным является прямое (непосредственное ) обращение к РОН . На рис . 2.12 операнд команды содержится в регистре Rd , а КОП обозначает часть слова команды , соответствующую К оду ОП ерации , Обычно в формате команды отводиться пять бит , которые позволяют адресоваться к любому регистру . Команды , оперирующие с двумя регистрами , действуют , в основном , аналогичным образом . В этих командах регистр-приемник Rd ( destination ) указывается перед регистром-источником Rr ( resource ), то есть является первым параметром (см . рис . 2.13). Таким образом , команда : ADD R 0, R 1 реально выполняется так : R 0 = R 0 + R 1. Рис . 2.12. Прямая адресация одного регистра . Результат сохраняется в регистре Rd . Рис . 2.13. Прямая адресация к двум РОН. Прямая а дресация к регистрам ввода /вывода. На рис . 2.14 адрес операнда содержится в 6 битах слова команды (ячейка Р ). Rd – определяет адрес регистра источника или регистра приемника . К примеру , этот тип адресации могут использовать команды IN или OUT : IN R 0, S REG ; сохранить регистр состояния в регистре R 0 OUT PORTB , R 1 ; записать данные из регистра R 1 в PORTB Рис . 2.14. Прямая адресация регистров ввод а /вывода. Прямая адресация данных. Рис .2.15. Прямая адресация данных. Единое адресное пространство является пространством данных , включая РОН , регистры ввода /вывода , внутренняя память и внешняя память (если есть ). 16-разрядный адрес данных содержится в 16 младших разрядах 32-х разрядной команды . Rd / Rr определяет адрес регистра источника или регистра приемника . Такой тип адресации , к примеру , могут использовать команды LDS и STS : LDS PORTB , R 1 ; записать данные из регистра R 1 в PORTB STS PORTB , R 1 ; записать данные из регистра R 1 в PORTB Косвенная адресация данных Существует четыре типа косвенной адресации данных : простая , с постинкре ментом , с преддекрементом , со смещением . Для первых трех типов косвенной адресации данных адрес операнда содержится в регистре X , Y или Z . Для последнего типа (со смещением ) адрес операнда вычисляется сложением содержимого регистров Y или Z с шестью битами адреса , содержащимися в слове команды . Сами же регистры остаются неизмененными . Смысл косвенной адресации с постинкрементом (с преддекрементом ) заключается в следующем . После (до ) выполнения операции регистр X , Y и Z инкрементируется (декрементируется ). Рассмотрим некоторые примеры : 1) ST X , Rn ; поместить данные из Rn в по адресу указанному в регистре Х ; 2) ST X +, Rn ; тоже что и в 1), но впоследствии X инкрементируется ; 3) ST - X , Rn ; предварительно X декрементируется ; В предыдущих трех примерах вместо Х могут быть Y или Z . 4) STD Y + c , Rn ; к значению Y прибавляется константа смещения ’ c ’ и по этому адресу записываются данные из Rn . Y при это остается неизменен . Вместо Y может быть только Z . Команды пересылки данных. Пересылка данных из одного места в другое является для AVR очень простой операцией , так как имеется очень большое количество команд , предназначенных для вы полнения этой задачи . Ни одна команда пересылки данных не оказывает влияния на биты регистра состояния . Команда LPM – загрузка данных из таблиц , хранящихся в памяти программ . В этой команде младший бит индексного регистра Z используется для указания байта , который будет читаться , если 0 – читается младший байт , 1 – старший . Оставшиеся 14 байт используются для указания адреса слова . Команда MOV – копирует содержимое одного РОН в другой . LDI – загружает в один из 16 старших РОН байт , содержащийся в команде. IN и OUT – доступ к регистрам ввода /вывода , начиная с нулевого адреса . Полный список всех команд пересылки данных можно найти в ПРИЛОЖЕНИИ 1, Таблица А .3. На рис .2.16 наглядно показано схематическое выполнение команды LPM . Команды арифметических и логических операций. Основными арифметическими операциями являются сложение и вычитани е двух чисел . Эти команды по большей части очевидны . Сложение и вычитание содержимого двух регистров производиться при помощи команд ADD и SUB . Модификации этих команд , которые учитывают значение флага переноса , позволяют выполнить операции над 8-, 16-, 24 - и даже 32-разрядными числами со знаком , хранящимися в регистрах . Поясним функции флагов отрицательного результата N ( negative ), переполнения V ( overflow ) и знака S ( sign ), так как они имеют некоторые особенности и сложны для понимания при первоначальном знакомстве . Флаг отрицательного результата N просто копирует значение бита 7 результата , который показывает , является результат положительным или отрицательным числом . Флаг переполнения V в регистре SREG указывает на переполнение во время сложения или в ычитания чисел со знаком . Рассмотрим пример : ADD R 1, R 2 Флаг V будет установлен в 1, если в регистрах R 1 и R 2 содержаться положительные числа , а результат их сложения окажется больше 127, или оба числа отрицательны , а результат будет меньше – 128. Рассмот рим пример с конкретными значениями : LDI R 1, 100 ; 100 = 0 b 01100100 LDI R 2, 100 ; Занести 0 b 01100100 R 1 и R 2 ADD R1, R2 ; R1 = R1 + R2 = 200 = 0b11001000 Десятичное число 200 в двоичной записи имеет значение бита 7 равное 1, что указывает на полу чение отрицательного результата . Следовательно , после выполнения операции сложения флаг N будет установлен в 1. Но в данном случае вместе с флагом N будет так же установлен в 1 флаг V , указывая , что произошло переполнение при обработке чисел со знаком. Есл и содержимое R 1 = R 2 = - 100, то результатом сложения этих чисел будет 0 b 00111000 в двоичной системе счисления , что является положительным числом . При этом флаг N будет сброшен в 0,показывая , что результата положителен , однако будет установлен флаг V , озн ачающий , что на самом деле это не так. Использование флага S = N ^ V позволяет рассматривать результат как 9-разрядное число со знаком , где старшим (знаковым ) разрядом как раз и является флаг S . Как было отмечено при описании флага V , он устанавливается в 1, когда бит 7 результата имеет неправильное значение , то есть результат не представлен правильным числом со знаком в дополнительном коде . Выполнив операцию «ИСКЛЮЧИТЕЛЬНОЕ ИЛИ» над значением флага V и бита 7 результата , который храниться в бите N , вы полу чите реальный знак результата . В первом примере (100 + 100) происходит установка в 1 флагов V и N , в результате флаг S будет равняться нулю (1 ^ 1 = 0). Во втором примере (- 100 - 100) флаг N сбрасывается в 0, а флаг V устанавливается в 1, поэтому флаг S б удет равняться единице , указывая на то , что результат отрицательный . Флаг S должен использоваться со старшим байтом числа . При операциях с 16-, 24- и 32-разрядными числами значение флага S надо проверять только после завершения последней операции со старш им байтом числа . При операциях с младшими байтами используется флаг переноса С , как обычно при выполнении сложения и вычитания . Команды ветвления Команды относительного перехода RJMP и вызова подпрограммы RCALL являются основными для изменения выполнения последовательности команд в МК . При этом содержимое программного счетчика изменяется на величину смещения , которое задается в 12 младших битах кода команды . МК может выполнять команды ветвления по значению определенных битов в регистре состояния SREG . Поскольку номер бита и его значение должны быть указанны в коде команды , то диапазон возможных адресов перехода состав ляет +/- 63 относительно текущего адреса . Это означает , что применение команд условных ветвлений весьма ограничено , но эту проблему можно решить при помощи ветвления к команде , которая затем выполнит необходимый безусловный переход . Еще один класс команд ветвления – это команды пропуска . После проверки указанного условия , данные команды либо выполняют следующую команду , либо пропускают ее . Битовые команды и команды тестирования битов. Команды сброса (очистки ) и установки битов предназначены для модификации регистров ввода /вывода . Но некоторые из них могут работать только с частью регистров ввода /вывода . Это значит , чт о для некоторой части регистров ввода /вывода вы должны сначала переписать их содержимое в РОН , модифицировать , а затем снова сохранить в регистре ввода /вывода . Для выполнения этой процедуры можно написать специальную макрокоманду (макрос ). Часто необходимо переслать бит из одного регистра или переменной в другой . Это можно сделать следующим образом : BST B ,5 ; поместить бит 5 переменно В в бит Т регистра SREG BLD A ,2 ; сохранить бит Т регистра SREG в качестве бита А .2 Команда SWAP меняет местами старши й и младший полубайт регистра . Это полезно когда вы храните в регистре две цифры , а не одно восьмибитовое число . Команды сдвигов и циклических сдвигов LSL , LSR , ROL , ROR и ASR полезны как для выполнения сдвигов данных в процессе их ввода вывода , так и для проверки значения определенного бита в РОН без необходимости выполнения 8 отдельных операций тестирования битов . С помощью циклического сдвига можно произвести индивидуальную проверку любого бита в заданном месте байта . 3. ПРОГРА ММНОЕ И ИНСТРУМЕНТАЛЬНОЕ ОБЕСПЕЧЕНИЕ ПРОЦЕССА ПРОГРАММИРОВАНИЯ МИКРОКОНТРОЛЛЕРОВ 3.1. Написание и отладка программного кода с помощью AVR Studio Известные интегрированные среды разработк и программ , повышающие производительность труда программиста , позволяет избежать рутинной работы . Интегрированные пакеты для разработки программ , выпускаемые разными производителями , схожи между собой по функциям , по различным сервисным возможностям , удоб с тву работы и качеству генерируемого машинного кода. Например пакет программ AVR Studio Version 3.53 (см . рис . 3.1.) является интегрированной средой разработки (ИСР ) для МК серии AVR.[16] Этот программный продукт включает в себя : § встроенный редактор тек ста , для набора исходного кода программы , § транслятор с языка ассемблер , § программный симулятор ЦПУ , памяти и устройств ввода /вывода § поддержку внешних устройств , таких как – внутрисхемный эмулятор (ВСЭ ) ICEPRO , ICE 200 и программатора типа AVRISP и STK 500/501. Компания Atmel распространяет данный продукт совершенно бесплатно , что является огромным преимуществом в начале освоения программирования МК и изучении его архитектур ы. Как и в реальной ИСР , здесь вы можете легко писать исходный текст программы на ассемблере , подключить внешний компилятор для С , отлаживать текст написанной программы используя встроенный программный симулятор или подключить ВСЭ . И в конечном итоге вы мо жете запрограммировать свой МК программатором AVRISP или STK 500/501. 3.1.1. Обзор AVR Studio Для установки AVR Studio требует Microsoft Windows 9 x / NT /2000 Как уже говорилось , AVR Studio позволяет отслеживать ко д программы с помощью внутрисхемного эмулятора или программного симулятора . Для выполнения (отслеживания ) кода программы она сначала должна быть откомпилирована , чтобы сгенерировать объектный файла , который загружается в AVR Studio . Рис . 3.2. AVR Studio в процессе отладки исходного кода программы Ap 1. asm . Ключевое окно в AVR Studio является окно источника ( Source window ), где отображается исходный код программы (см . рис . 3.2). Когда отк рывается объектный файл , то автоматически создается окно источника . Оно показывает выполняемый программный код и имеет название , соответствующее имени открытого файла . Указатель программного счетчика (желтая стрелка ) всегда показывает на строчку , которая будет выполняться . Полоса статуса ( Status bar ) указывает является ли исполнительное устройство ВСЭ или программным симулятором . Окно источника дает информацию о логике программы . В дополнении к этому , AVR Studio может показыв ать другие окна , которые предоставляют пользователю достаточный контроль состояния каждого элемента исполнительного устройства (ВСЭ или симулятор ). Перечислим некоторые доступные окна : § Смотровое окно ( Watch window ) – показывает значения и адреса определ енных переменных . § Окно РОН ( Register window ) – показывает состояние РОН . Регистры могут быть изменены при остановке выполнения программы. § Окно памяти ( Memory window ) – показывает содержимое памяти программ , памяти данных , регистров ввода /вывода и со держимое энергонезависимой памяти EEPROM . Ячейки памяти могут быть отражены в различных форматах : шестнадцатеричном , десятичном или двоичном формате или как ASCII символы . Содержимое памяти , также как и регистры , может быть изменено по желанию при остановк е программы . § Окно регистров ввода /вывода ( I / O window ). Показывает содержимое регистра состояния , таймеров , EEPROM регистров , портов ввода /вывода и т.д . § Окно процессора (Processor window). Показывает важную информацию о выполнении программы включая Счетчик Команд ( Program Counter ), Указатель Стека ( Stack Pointer ),флаги регистра состояния ( Flags ), Счетчик Циклов ( Cycle Counter ) и др. 3.1.2. Создание нового проекта Запустив AVR Studio в меню Project выберит е пункт New. Как показано на рис. 3.3, в появившемся диалоговом окне « Select project name » необходимо будет ввести имя проекта (см . « Project n ame » ), его местоположение « Location » и тип проекта « Project t ype » . Имя может быть любым стандартным именем файла . Каталог можно написать в соответствующем текстовом поле или выбрать из списка имеющихся папок , при нажатии кнопки справа с тремя точками . Если каталога не существует , то он будет создан без всяких напоминаний . Рис . 3.3. Создание нового проекта. Все файлы вашего проекта AVR Studio сохраняет в выбранном каталоге. Тип проекта выбирают из следующи х соображений : § AVR Assembler : для компиляции кода текста проекта используется встроенный транслятор . Не требует ни каких дополнительных настроек . Мы будем использовать именно этот тип. § Generic 3 rd party C compiler : позволяет вручную настраивать AVR S tudio для использования внешних компиляторов . После введения всех вышеперечисленных данных для продолжения нажмите кнопку ‘ OK ’ . Далее появится окно проекта , как показано на рис 3.4. Рис . 3.4. Окно нового проекта. В папках « Assembler Files » и « Other Files » хранятся файлы связанные с вашим проектом . Но на рис . 3.4 они пока пустые . Добавление ассемблерного файла в проект может быть реализовано несколькими способами . Можно добавить существующий файл или создать новый . Далее мы используем и тот , и другой способ . Создадим новый файл исходного кода программы . Для этого с помощью нажатия правой кнопки мыши на папке « Assembler Files » вызовем контекстное меню , как показано на рис . 43 и выберем пункт « Add File …» . Появиться ок но под названием « Add Files to Project » . Убедитесь , что вы находитесь в каталоге своего проекта . В этом каталоге как минимум должен быть файл вашего проекта . В нашем случае это – "Demo_Project.apr". в текстовом поле « File n ame :» введем имя нового файла – " LED_code.asm", и нажмем кнопку « Open » . Заметим , что расширение файла – asm следует ввести вручную , т.к . автоматически оно не создастся . Если все сделано правильно , то создастся файл с тем именем , который вы ввели . Создание файла можно было осуществить с п омощью контекстного подменю « Create New File» . Тогда появиться примерно такое же окно как на рис 3.3, но под названием « Create new file » . В это случае AVR Studio создает файл не в указанной папке ( Assembler или др .), а в корневой папке проекта ( Target ), чт о бывает не всегда полезным . В только что созданный файл добавьте следующий код программы : ;****************************************************** .include "8515def.inc" . def temp = r 16 rjmp RESET ; вектор прерывания по включению питания, ;сбро су RESET или от сторожевого таймера RESET : ldi temp , low ( RAMEND ) ;инициализируем указатель стека out SPL,temp ; ldi temp,high(RAMEND); out SPH,temp ; ser temp ;temp = 0xFF out DDRB , temp ;конфигурируем порт В как выход loop : out PORTB , temp ;выводим temp в порт В inc temp ;инкремент temp rjmp loop ;переход на метку loop ;****************************************************** Теперь добавим в проект уже существующий файл . Для этого , во-первых , скопируем файл "8515def.inc" в каталог на шего проекта (см . рис . 3.3.), т.е . в D:\Project_files\AVRasm\ из подкаталога Appnotes, где находится AVR Studio . Вернувшись в окно проекта проделаем знакомую уже нам операцию по добавлению файла . На папке « Assembler Files » в контекстном меню выберем пункт « Add File …» . В появившемся диалоговом окне добавления файлов к проекту выберем каталог нашего проекта , а из перечисленных файлов – "8515def.inc" и нажмем « Open » . Теперь окно проекта должно соответствовать рис . 3.5. Рис . 3.5. Окно проекта с рабочими файлами. Посмотрев внимательно на рис . 3.5 можно заметить отличие иконок файлов "8515def.inc" и "LED_code.asm". Дело в том , что когда мы добавляем первый файл в новый проект , то AVR Studio помечает его как входной транслир уемый файл – « Assembler entry file » . И при вызове встроенного транслятора (ассемблера ) будет компилироваться именно этот файл , помеченный красной стрелкой вправо , а все остальные , помеченные синей стрелкой вниз – будут игнорироваться . Вообще-то говоря файл "8515def.inc" добавлять в окно проекта совершенно не обязательно . Это было сделано с целью обучения . Важно чтобы этот файл был в том же каталоге , что и ассемблерный файл . Рис . 3.6. Меню « P roject». Теперь самое вр емя транслировать исходный код программы в объектный код . Для этого существует несколько способов . Можно вызвать контекстное меню и кликнуть мышью на « Assemble » , как показано на рис . 3.5, или сделать тоже самое через меню « P roject» ( см . рис . 3.6). А можно просто нажать « F 7» . Появится окно « Project Output » с сообщением об успешной трансляции или ошибках , если они имеются . Если вы еще не сохранили проект , то желательно это сделать , выбрав через меню « P roject » команду « Save » или на панели инструментов нажать кнопку « Save all » . Если трансляция прошла без ошибок , то можно смело приступать к исполнению кода на встроенном симуляторе или ВСЭ , если он имеется в наличии. Заметим , что для создания hex файла , который необходим при прошивки (программирование ) кристалла, необходимо изменить установки проекта ( Project Settings … ) см . рис . 3.5. и рис . 3.6. Для этого в появившемся окне “ AVR Assembler Options” установите “ Output file format:” на “ Intel Intellec 8/MDS (Intel Hex)” . Теперь каждый раз при вызове транслятора будет создаваться выходной файл с расширением hex и файл с расширением eep , если в коде программы есть сегмент EEPROM данных. 3.1.3. Исполнение программного кода Для отладки программы или другими словами , для выполн ения программного кода в режиме симулятора необходимо , конечно же , чтобы программа транслировалась без ошибок . Рис . 3.7. Меню « D ebug ». После успешной трансляции выберете из меню « D ebug » команду « T race into » или на жмите « F 11» , как показано на рис . 3.7. Так как у нас нет ВСЭ , то AVR Studio сама предложит определить соответствующий режим программного симулятора (см . рис. 3.8). Появится окно « Simulator Options » , в котором необходимо будет выбрать тип устройства для сим уляции . В данном примере это AT 90 S 8515. Изменять значения частоты и объема памяти нежелательно , так как они установлены для выбранного устройства по умолчанию согласно техническим параметрам МК . После нажатия кнопки «ОК» , можно сказать , что все готово для работы с кодом программы на симуляторе в пошаговом режиме или другом , каком вы пожелаете. Рис . 3.8. Окно опций программного симулятора. Заметим , что теперь в окне исходного кода программы , слева на серой полосе поя вилась желтая стрелка вправо , которая является указателем программного счетчика . Она указывает на следующую инструкцию , которая будет выполняться . Пример такой стрелки можно увидеть на рис . 3.8. Рис . 3.9. Меню « V iew ». Окно регистров ввода /вывода. Для более наглядного представления , что происходит с регистрами ввода /вывода во в ремя выполнения программы , откроем соответствующее окно – « IO view » . Это можно сделать либо через меню « V iew » команда « New I O View » , либо нажав « Alt » и 5, как показано на рис . 3.9, или на панели инструментов нажать соответствующую кнопку – . Рис . 3.10. Окно регистров ввода /вывода для МК AT 90 S 8515. Так как мы определили для встроенного симулятора микроконтроллер типа AT 90 S 8515, то окно регистров ввода /вывода откроется автоматически со всеми надлежащими устройствами для этого типа МК (см . рис . 3.10). Данное окно содержит перечень устройств , содержимое которых можно просмотреть , как «древовидную» структуру , где один элемент может содержать ряд вложенных подэлементов . Рис . 3.11. С одержимое порта В. Так как наша программа работает с портом В , то рассмотрим его содержимое более подробно . Для этого по названию « Port B » щелкнем мышью два раза ( double click ) или один раз по плюсику слева . Список порта В раскроется , как показано на рис . 3.11, и можно будет увидеть регистр данных ( PORTB ), регистр направления данных ( DDRB ) и выводы порта В ( PINB ) – « Port B Data » , « Data Direction » и « Input Pins » , соответственно. Каждый бит этого регистра представлен в виде флажка . Логическая единица соответс твует установленному флажку , а логический ноль – снятому . Состояния этих флажков обновляются во время выполнения программы и показывают текущее значение каждого бита . Вы также можете устанавливать или очищать значения битов , щелкая мышью по соответствующи м флажкам , тем самым изменяя значения соответствующих регистров ввода /вывода . Существует пара команд для одиночного пошагового выполнения программы . Это « T race into» /F11/ и « S tep Over» /F10/ из меню « D ebug» ( см . рис . 3.7). Отличие состоит в том , что « T rac e into » при вызове подпрограммы входит в неё в пошаговом режиме , т.е . можно отследить каждую команду по отдельности ; а « S tep Over » выполняет подпрограмму целиком и продолжает выполнение в пошаговом режиме со следующей команды после вызова подпрограммы , т.е . как бы «обходит» подпрограмму . Наш пример не содержит подпрограмм , поэтому различие заметно не будет . Дойдя до последней строчки программы , следует обратить внимание на изменение цвета регистров порта В . Те регистры , которые в последнем шаге трассировки поменяли свое значение , становятся красными , остальные – черные . Это облегчает наблюдать за теми регистрами ввода /вывода , которые меняют свое значение при трассировке . Продолжая трассировку (нажимая / F 11/ ) можно наблюдать как регистры порта В меняют свое значение – инкрементируются . Рис . 3.12. Добавление точки останова. Добавляя точки останова , мы можем выполнять программу с максимальной скоростью , останавливаясь лишь там , где установлены точки останова . Установив , курсор на нужном месте и нажав < F 9>, или вызвав контекстное меню и нажав команду « Toggle B reakpoint » можно лег Ы о установить точку останова (см . рис . 3.12). Повторное нажатие приведет к её снятию . Красный квадратик на полоске слева как раз и обозначает то чку останова . В данном примере точка останова установлена для демонстрации увеличения скорости выполнения программы . Когда не было точки останова нам требовалось трижды нажимать < F 11> чтобы совершить один цикл ( loop :). Установив же точку останова на команд е “ rjmp loop ” и запустим программу на выполнение через меню « D ebug » команда « G o » или нажмем < F 5> (см. рис. 3.7), остановка произойдет лишь в точке останова и таким образом для одного цикла потребуется всего лишь одно нажатие < F 5>. Это реальный пример ускор ения отладки программы . Предположим нам надо чтобы регистр порта В не инкрементировался , а декрементировался во время выполнения программы . Для этого немного изменим код программы . В окне исходного кода программы строчку " inc temp " изменим на " dec temp " ( см . рис . 3.13). Если теперь продолжить выполнение программы (нажать < F 5> или < F 10> или < F 11>), то AVR Studio выдаст диалоговое окно , которое информирует об изменение исходного файла и спрашивает , нужно ли перекомпилировать проект . Следует нажать « Y es » . Рис . 3.13. Изменение исходного кода программы и перекомпиляция проекта. После перекомпиляции указатель счетчика команд будет установлен в начало на первую команду . Заметим , что установленные точки останова остаются без изменения . «Смотровое» окно. Для наблюдения за переменными , а точнее за их значениями удобно использовать «Смотровое» окно ( Watch window ). Открыть его можно использовав комбинацию клавиш « Alt » + « 1» или вызвав меню « V iew » команду « W atch » (см. рис. 3.9) или нажав кнопку на панели инструментов – . Переменные , которые определены с помощью макроса “. DEF ” могут быть помещены в «Смотровое» окно несколькими способами . Выделив нужную пере менную ее можно просто перетащить в «Смотровое» окно или в меню « W a tch » нажать команду « A dd Watch » или на панели инструментов нажать кнопку – . В данной программе только переменная “ temp ” является таковой . Ее мы и можем увидеть на рис . 3.14. Рис . 3.14. Смотровое окно. Во время пошагового выполнения программы можно наблюдать , как меняется наша переменная “ temp ” . Заметим , что данное окно также позволяет пользователю изменять значения переменных , т.е . непосредстве нно влиять на ход выполнения программы , облегчая отладку. Рис . 3.15. Окно процессора. Окно процессора. Теперь понаблюдаем за окном процессора . Откроем его , нажав « Alt » + « 3» (см. рис. 3.9) или щелкнув по иконки – . Это окно (см . рис . 3.15.) предоставляет определенную информацию о выполнении программы включая Счетчик Команд ( Program Counter ), Указатель Стека ( Stack Pointer ),флаги регистра состояния ( Flags ), Счетчик Циклов ( Cycle Counter ) и др . Очень полезными для оценки длинны циклов или времени выполнения подпрограммы могут оказаться « Cycle Counter » и « StopWatch » . Хоть в данном примере мы практически не используем это окно , оно все же играет очень важную роль в отладки программы . Перед закрытием проекта необходимо его сохранить . AVR Studio запомнит расположение окон и использует эти установки при следующем запуске проекта . 3.2. Анализ методики реализации разработки программного обеспечения 3.2.1. Классификация вариантов заданий Цель заданий – практическое освоение методики программирования на ассемблере микроконтроллеров ATMEL семейства AVR , отладка программы на симуляторе AVR Studio и программирование кри сталла с помощью программатора расположенного в системе макета . Примеры заданий могут использоваться не только как для проверки знаний и навыков по программированию , но и для наглядного объяснения архитектуры при чтении теоретического материала . После изу чения теоретического материала , а именно : архитектуры МК , аппаратных и программных средств , основных типов интерфейсов , системы команд и симулятора МК , можно приступить к практической реализации различных задач на основе МК . Именно написание программ и ум ение их объяснить является критерием понимания архитектуры МК , а также критерием способности использовать данную архитектуру в сочетании с программированием (ассемблером ). Конкретных примеров заданий может быть очень много . Мы разделим эти примеры на неск олько общих классов . Сначала перечислим достаточно простые классы задач. 1. Работа с памятью. К этому классу задач можно отнести любые операции с различными областями памяти , такие как чтение или запись . К примеру , можно считывать или записывать данные из / в EEPROM , SRAM или даже памяти программ ( Program Memory ). Меняя начальный адрес и размер данных , а также тип (область ) памяти можно создавать различные примеры задач . 2. Индикация. Подключая к выводам портов различные системы индикации , будь то простые св етодиоды , ССИ или ЖКИ можно создать широкий класс задач . Различные варианты примеров можно создать , изменяя очередность или длительность световой индикации . Можно сделать несколько примеров заданий с движущимися символами или «бегущей строкой» , задавая ра з личные символы и строки . Реализация различной длительности индикации может осуществляться либо с помощью таймера , либо с помощью циклов задержки , либо другими способами , что увеличивает разнообразие вариантов заданий . 3. Вычисления и обработка данных Суще ствует много примеров с арифметическими вычислениями . К примеру , можно производить сложение , вычитание , умножение , деление или сравнение 8- или 16-разрядных чисел . Также существуют математические или базисные логические функции , из которых можно строить б о лее сложные произвольные функции. Еще к этому классу задач относятся преобразование 8-, 16-разрядных чисел в упакованные (или нет ) двоично-десятичные ( Binary Coded Decimal – BCD ) и обратно , сортировка чисел различными способами и фильтрация . 4. Измерение внешних параметров и устройства управления : Сюда входят задачи по измерению напряжения , тока , частоты , давления , скорости вращения и других параметров . Создание часов реального времени , калькулятора , кодового замка , управление двигателем , регулировка темпе ратуры. Это достаточно сложный класс задач , так как он может включать в себя и некоторые вышеперечисленные классы (1-3). Варианты заданий Префикс 0 x – обозначает шестнадцатеричное чис ло , 0 b – двоичное , без префикса пишется десятичное число. Во всех вариантах необходимо составить и отладить программу с помощью симулятора и если необходимо запрограммировать микроконтроллер с помощью программатора в системе макета . 1. Дан массив А из 8 ( или др .) однобайтовых чисел распложенных в Program Memory или EEPROM начинающийся с адреса 0 x 0 A (или др .). Переписать из массива А в массив В все числа , большие 0 x 05 (или др .) и меньшие 0 x 2С . Массив В может находиться либо в EEPROM , либо в SRAM . 2. Написат ь программу перекодировки восьмиразрядного или шестнадцатиразрядного двоичного числа в упакованное двоично-десятичное число. 3. Написать программу перекодировки двухразрядного или пятиразрядного двоично-десятичного числа в двоичное. 4. Написать программу с ложения или вычитания двух двухразрядных десятичных чисел 5. Дан массив А из 8 (или др .) однобайтовых или двухбайтовых кодов . Определить , содержит ли он код 0хАС или 0хА FВС . Если "да ", то в регистр Rn занести число таких кодов. 6. Дан массив А из 10 одноба йтовых (или др .) чисел . Переписать его в массив В , упорядочив числа по возрастанию (или по убыванию ). 7. Дан массив А из 10 однобайтовых чисел . Переписать в массив В только числа , содержащие четное (или нечетное ) количество единиц (или нулей ). 8. Зашифрова ть содержащиеся в массиве А коды 10 букв или цифр по следующему правилу : а ) циклический сдвиг влево на 5 (или др .) разрядов и побитовая инверсия ; б ) прибавить константу 2 (или др .) и циклический сдвиг вправо на 3 разряда. 9. Дан массив А из 5 однобайтовых чисел . Определить , содержит ли он число 0х 1F (или др .). Если да , то выполнить операцию "логическое И " (или др .) над всеми числами массива А. 10. Переписать в стек , расположенный в памяти с адреса С , массив А из 10 восьмиразрядных (или др .) чисел . Выполнить операцию суммирования (или др .) над ними. 11. Дан массив А из 10 однобайтовых чисел , содержащий число 0хАА . Выполнить операцию "логическое И " (или др .) над всеми числами до 0 x АА и операцию "логическое ИЛИ " (или др .) над всеми числами после него. 12. Напис ать программу вычисления логической функции V = X *( NOT . Y * Z + NOT . W ) (или др .) ,где + - знак операции ИЛИ ,* - знак операции И , X,Y,Z,W-логические переменные , хранимые в разрядах 3-0 ячейки памяти EEPROM по адресу 0 x 00. 13. Написать программу сложения или вычита ния двух 8 разрядных (или др .) двоичных чисел со знаком (или без ). 14. Дан массив А из 10 однобайтовых чисел . Переписать в массив В все числа , большие (или меньшие ) 0х 20, и записать в регистр Rn (или вывести на индикатор ) число таких чисел. 15. Определить четное или нечетное число единиц (или нулей ) в 8 двоичных кодах , записанных в массиве А , и вывести на индикатор сообщение «Ч» или «Н» (или число единиц ). 16. Дан массив А из 10 однобайтовых чисел . Переписать в массив В все числа , лежащие в диапазоне 0х0 F – 0х F 0 (или др .). Вывести на индикатор число таких чисел. 17. Дан массив А из 8 однобайтовых чисел , содержащий число 0хА 1. Необходимо найти сумму всех чисел массива А , находящихся до этого числа . Результат вывести на индикатор. 18. В массиве А хранится 8 по казаний температуры больных .Проверить , нет ли среди них значений выше 37 и ниже 36 и вывести на индикатор соответственно два числа через пробел. 19. Разработать программу вывода на индикатор отладочного устройства последовательности цифр 1-8,образовав ряд 12345678. 20. Разработать программу вывода на индикатор всех битов регистра состояния процессора SREG в формате : каждому флагу (биту )- один разряд индикатора. 21. Разработать программу для последовательного вывода всех цифр на один семисегментный индик атор с интервалом вывода -1с. 22. Разработать программу мигания одного (или др .) разряда дисплея с интервалом 3сек . (или др .). 23. Разработать программу последовательного гашения всех индикаторов дисплея после его включения. 24. Разработать программу цикл ического перемещения одного символа , хранимого в ячейке памяти , вдоль индикатора (бегущий символ ). 25. Разработать программу для циклического перемещения набора цифр или символов вдоль индикатора в направлении справа налево (или наоборот ). 26. Разработать программу "Электронные часы ", используя для индикации семи сегментный индикатор . Формат вывода « 22.15.30» или « 22.15» , обеспечив мигание точки с интервалом 1с. 27. Разработать программу , чередующую вывод на индикатор сообщений « 1C» , « 2C» и « 4C» (или др .) удерживаемых соответственно 1сек , 2сек и 4сек. 28. Используя матричную клавиатуру 3х 3 и светодиод разработать программу и устройство , которое обеспечивало мигание светодиода такое количество раз равное номеру нажатой клавиши (1 – 9). 29. Используя матрич ную клавиатуру 4х 4 (или др .) и систему индикации разработать программу и устройство кодового замка из 4 (или др .) цифр кода. 30. Используя матричную клавиатуру 4х 4 (или др .) и семи сегментные индикаторы разработать программу и устройство калькулятора , кото рое обеспечивает сложение , вычитание , умножение и делание 16-ти разрядных чисел. 31. Используя генератор звуковых колебаний и несколько разрядов ССИ разработать программу и устройство измерения частоты в диапазоне 20 Гц – 20 КГц. Основные принципы выполнения заданий. Предполагается , что обучающийся должен иметь представление об архитектуре и системе команд микроконтроллеров AVR . При выполнении задания необходимо придерживаться следующих правил : 1) уяснить поставленную задачу , понимая , что должно являться результатом ; 2) выбрать соответствующий микроконтроллер , исходя из требования задания ; 3) составить подробное (побитовое ) описание необходимых для выполнения задания регистров имея перед собой таблицу всех регистров ввода /вывода (см . ПРИЛОЖЕНИЕ 2); 4) определить необходимые векторы прерываний и составить алгоритмы соответствующих обработчиков векторов прерываний ; 5) составить алгоритм основной программы , учитывая особенности МК (стек и т. д .); 6) приступить к написанию программы , выбирая необходимые команды ассемблера. На рис . 3.15.1 изображена структурная схема процесса обучения . Она включает : 1) Написание программы прошивки микроконтроллера , для решения поставленной задачи ; 2) Контроль п равильности разработанной программы на симуляторе с помощью компьютера (первая петля обратной связи ); 3) Прошивка микроконтроллера и сопряжение с системой индикации (внешними устройствами ) для окончательного контроля правильности выполненной задачи (вторая петля обратной связи ). Рис . 3.15.1 Структурная схема процесса обучения. 3.2.2. Рассмотрение типовых примеров В качестве примера работы с памятью рассмотрим следующее задание : Требуется написать программу копирования таблицы из 20 восьмибитных чисел данных из памяти программ (Program Memory) в оперативную память (SRAM) начиная с адреса 0х 80. Рассмотр им выполнение данной программы в соответствии с предложенными выше правилами . В данном примере нам необходимо работать с оперативной памятью SRAM . Так как в МК AT 90 S 1200 её нет , то выбираем к примеру AT 90 S 8515 (или др ). Теперь нам надо позаботиться о прав ильной инициализации стека , загрузив в указатель стека адрес старшей ячейки оперативной памяти . Данную программу можно полностью реализовать на симуляторе AVR Studio Simulator , где наглядно будет видна вся карта памяти . Ниже приведем программу с некоторыми пояснительными комментариями. Программа копирования таблицы данных : ;******************************************************************** .include "8515def.inc" .equ BLOCK1 =$80 ;начальный адрес копируемой таблицы данных в SRAM ;памяти .def flashsize =r16 ;РОН хранящий размер таблицы .def temp =r16 ;РОН для промежуточных действий rjmp RESET ;вектор прерывания по включению питания , сбросу ;RESET или сбросу от сторожевого таймера ;****************************************************** **************** ;* Подпрограмма копирования таблицы данных из памяти программ в SRAM flash2ram: lpm ;загружаем из памяти программ в R0 байт адрес ;которого указан в Z st Y+,r0 ;сохраняем его в SRAM памяти с постинкрементом ;регистра Y adiw ZL,1 ;инкремент Z dec flashsize ; декремент flashsize brne flash2ram ;если предыдущая операция не равна 0 то перейти на ;метку ret ;возврат в основную программу ;*********************************************************************** ;* Основная программа RESET: ldi temp, low(RAMEND) ; инициализируем указатель стека out SPL, temp ; ldi temp, high(RAMEND) ; out SPH, temp ; ldi ZH, high(F_TABLE*2) ;загружаем в регистр Z удвоенный адрес ldi ZL , low ( F _ TABLE *2) ; начала таблицы данных ldi YH, high(BLOCK1) ;загружаем в регистр Y адрес начала ldi YL , low ( BLOCK 1) ; таблицы данных в SRAM памяти ldi flashsize,20 ;определяем размер таблицы rcall flash2ram ;вызываем подпрограмму копирования таблицы данных ;из памяти программ в SRAM па мять forever:rjmp forever ; бесконечный цикл F _ TABLE : . db 0,1 ;начало таблицы из 20 восьмибитных чисел .db 2,3 .db 4,5 .db 6,7 .db 8,9 .db 10,11 .db 12,13 .db 14,15 .db 16,17 .db 18,19 ;****************************************************** **************** В качестве примера задачи по индикации рассмотрим второй пример : Используя два светодиода и кнопку разработать программу и устройство которое вызывает мигание одного светодиода , подключенного к выводу PB 0, и с помощью кнопки , подключенной к выводу PD 5, зажигает светодиод , подключенный к выводу PB 4. Частоту мигания светодиода порядка 2-3 Гц задать с помощью обработчика прерывания от таймера Т 0. Данное устройство можно реализовать на МК AT 90 S 1200. Для обеспечения заданной частоты мигания све тодиода коэффициент предварительного деления тактовой частоты (4Гц ) для таймера Т 0 будет равен 1024. Подпрограмма обработки прерывания по переполнению таймера Т 0 инвертирует значение логического уровня (0 или 1) на 0 выводе порта В , обеспечивая тем самым м игание подключенного светодиода . Светодиоды подключаются согласно разделу « 1.4.2 Световая индикация» . Исходный текст программы цифрового частотомера : ;******************************************************************** .include "1200def.inc" rjmp Start ;вектор прерывания по включению питания , сбросу ;RESET или сбросу от сторожевого таймера nop ;вектор внешнегго прерывания неиспользуется rjmp TmrInt ;вектор прерывания по переполнению таймера Т0 ;********************************************************************** ;* Подпрограмма обработки прерывания по переполнению таймера Т0 TmrInt : in R 0, SREG ;сохранение регистра статуса SREG in R 16, PORTB ;запомнить текущее значение PortB ldi R 17, $1 ; eor R 16, R 17 ;инвертируем 0 бит порта В out PORTB, R16 out SREG, R0 reti ;выход из подпрограммы ;******************************************************************** ;* Основная программа Start : ldi R 18, $11 ;конфигурируем биты порта В out DDRB , R 18 ; как выход clr R18 out PORTB, R18 clr R 18 ;конфигурируем 5 бит порта D out DDRD , R 18 ; как вход ldi R18, $20 out PORTD, R18 ldi R 18, 5 ;устанавливаем коэффициент предварительного деления out TCCR 0, R 18 ; частоты на 1024 ldi R 18, 2 ;разрешаем прерывание по переполнению таймера Т0 out TIMSK , R 18 SEI ; общее разрешение прерываний Loop: ; Loop Around Forever sbis PIND, 5 ; если PIND5=0 ( кнопка нажата ) rjmp PORTB0_Hi ; перейти на метку PORTB0_Hi cbi PORTB , 4 ;обнулить бит 4 порта В rjmp Loop PORTB0_Hi: ; sbi PORTB, 4 ;установить бит 4 порта В rjmp Loop ;********************************************************************** В качестве третьего , достаточно сложного примера рассмотрим программу для измерителя частоты в диапазоне 20 Гц – 20 КГц , используя генератор звуковых колебаний и несколько разрядов ССИ . Согласно схеме изображенной на рис . 3.15.2. преобразуем колебания от генератора в П-импульсы и подаем на выво д прерывания ( INT 0) МК . Диод D 1 обеспечивает однополупериодное выпрямление исследуемой синусоиды . После делителя R 1, R 3 напряжение поступает на ограничитель R 2, D 2 с напряжением ограничения не больше 5 В . Рис . 3.15.2 Схема подключения генератора колебаний к микроконтроллеру. Таймер /счетчик Т 1 ведет подсчет тактовых импульсов с коэффициентом деления частоты равным 64, а при переполнении останавливается и обнуляется. Внешнее прерывание INT 0 вызывает соответствующую подпрограмму обработки при нарастающем фронте сигнала на одноименном выводе INT 0. Эта подпрограмма позволяет таймеру /счетчику Т 1 определить число импульсов за один период внешнего сигнала . Далее основная программа преобразует этот значение в частоту и переведя в двоично-десятичный код выводит на семисегментные индикаторы , которые подключаются к МК согласно разделу 1.4.2. Программа прошивки МК для реализации устройства измерителя частоты на базе М К AT 90 S 8515 приведена в ПРИЛОЖЕНИИ 3. Последний рассмотренный пример представляет устройство «кодовый замок» . Реализованное на основе МК AT 90 S 1200, оно содержит матричную клавиатуру и два светодиода для индикации работы и правильности введенного кода . Прогр амма прошивки МК для реализации этого устройства приведена в ПРИЛОЖЕНИИ 4. 3.3. Описание макета программатора. Макет программатора состоит из общей платы и вспомогательных плат реализующих необходимые функции заданий . Общая плата и меет разъем , соединяющая программатора с параллельным портом компьютера . На общей плате также расположены две контактных колодки (дип панели ) для установки программируемых микроконтроллеров . Они позволяют использовать МК следующих типов : а ) дип панель DIP 2 x 20.2 для МК серий AT 90 S 4414 и AT 90 S 8515; б ) дип панель DIP 2 x 10.1 для МК серии AT 90 S 1200 AT 90 S 2313. Вспомогательные платы позволяют макетировать проектируемое устройство , управляемое микроконтроллером , не подвергая нежелательным механическим воздействиям сам программатор и микросхему контроллера . Вспомогательные платы соединяются с общей платой через дополнительные разъемы , что позволяет более прагматично использовать имеющиеся порты (выводы ) МК . Питание программатора обеспечивается от внешнего блока стаб илизированного питания МС 9011.02 с выходным напряжением Vcc =+5В при максимальном токе нагрузки I н =1.5А. Рис . 3.16. Принципиальная схема макета программатора. На рис 3.16. приведена принципиальная схема макета программатора для последовательного программирования МК серии AT 90 S 1200 и AT 90 S 8515 через параллельный ( LPT ) порт к омпьютера . Подсоединение к компьютеру осуществляется с помощью кабеля подключения изображенного на рис . 3.17. Соединительный кабель для подключения макета программатора к параллельному ( LPT ) порту компьютера состоит из двух разъемов DB 25 F и BH 10.1 и двух ш лейфов по 26 и 10 жил соединенных между собой согласно таблице 3.1. и таблице 3.2. Разъем DB 25 F (штырь ) подсоединяется к параллельному ( LPT ) порту компьютера , а BH 10.1 (гнездо ) к разъему BH 10.2 (штырь ) на макете программатора (см . рис . 3.16). Рис . 3.17. Кабель подключения макета к LPT порту компьютера. Таблица № 3.1. Соответствие номера контакта разъема DB 25 F и порядкового номера 25 жильного шлейфа. Порядковый номер 25 жильного шлейфа 1 (крас-ный ) 2 3 4 5 6 7 8 9 10 11 12 13 Номер контакта в разъеме DB 25 F 1 14 2 15 3 16 4 17 5 18 6 19 7 Порядковый номер 25 жильного шлейфа 14 15 16 17 18 19 20 21 22 23 24 25 26 Номер контакта в разъеме DB 25 F 20 8 21 9 22 10 23 11 24 12 25 13 - Таблица № 3.2. Соответствие номеров контактов разъема DB 25 F и разъема BH 10.1. Разъем DB 25 F Символьное обозначение Разъем BH 10.1 5 XTAL 1 4 6 RESET 5 7 MOSI 1 8 SCK 7 10 MISO 9 19-25 Gnd 10 На приведенной схеме макета программатора кроме соедини тельных разъемов и контактных колодок МК находятся внешние элементы необходимые для обеспечения работы тактового генератора . Это конденсаторы С 2=С 1=39 пФ , С 3=1000 пФ и кварц с частотой генерации колебаний 4 МГц . Кнопка В 1 обеспечивает сброс МК в начальное состояние . Подключение вспомогательных плат к макету программатора осуществляется через штыревые разъемы PLS .1, PLS .2 и PLS .3. Так как разъем PLS .1 соединен с дип панелью DIP 2 x 10.1, в которую устанавливается МК серии AT 90 S 2313 и AT 90 S 1200, а разъемы PLS .2 и PLS .3 соединены с дип панелью DIP 2 x 20.2, в которую устанавливается МК серий AT 90 S 4414 и AT 90 S 8515, то нумерация выводов разъема PLS .1 соответствует нумерации ножек AT 90 S 1200, а нумерация выводов разъемов PLS .2 и PLS .3 соответствует нумерации ножек AT 90 S 4414 и AT 90 S 8515. В макете программатора при программировании и последующей работе должен находиться только один (!) микроконтроллер , либо в панели DIP 2 x 10.1 ( AT 90 S 1200 или AT 90 S 2313), либо в панели DIP 2 x 20.2 ( AT 90 S 4414 или AT 90 S 8515). К разъемам PLS .n ( n = 1,2,3) через соответствующую колодку можно подсоединять любые внешние устройства : светодиоды , ССИ , кнопки , матричную клавиатуру , подавать сигнал на какой либо порт (вывод ) микроконтроллера или считывать его . При этом надо помнить , что на контакт 20 разъем а PLS .1 и на контакт 40 разъема PLS .3 подается напряжение Vcc =+5В . Макет программатора имеет два режима работы . Первый – непосредственное программирование микроконтроллера с помощью компьютера . Как с подключенными внешними устройствами , так и без них . Втор ой режим – автономный , когда происходит работа с внешними устройствами , выполненными на вспомогательных платах . При этом режиме макет программатора должен быть отсоединен от компьютера . Сначала обучающийся должен , получив задание , подготовить (написать и отладить ) программное обеспечение с помощью AVR Studio (см . раздел 3.1.), согласно пп . 1-6 раздела 3.2. (Принципы выполнения заданий ). Результатом данного этапа является безошибочная трансляция разработанной программы . Только после этого можно приступить к использованию макета программатора и построению внешнего устройства на вспомогательной плате , если это предусмотрено заданием . ЗАКЛЮЧЕНИЕ Разработанные методические указания содержат описания программного обеспечения и аппаратны х средств реализации набора примеров заданий , предназначенных для изучения как непосредственной архитектуры МК , так и для выработки конкретных навыков программирования . Проведен анализ архитектуры современных микроконтроллеров . Уделено внимание систематиз ации аппаратных средств и общим вопросом методам отладки разрабатываемых программ. Особое внимание уделено серийным МК фирмы ATMEL семейства AVR . Рассмотрены их особенности построения и функционирования . Анализ системы команд микроконтроллеров AVR и практи ческие рекомендации работы в интегрированной среде разработки « AVR Studio » позволяет эффективно создавать и разрабатывать программы для AVR микроконтроллеров . Представлен набор типовых примеров с наиболее распространенными задачами программирования МК . Пр едложены классификация и принципы выполнения заданий . Дано описание универсального макета программатора . Изготовлен универсальный макет программатора , позволяющий проводить не только прошивку МК AVR четырех типов ( AT 90 S 1200, AT 90 S 2313, AT 90 S 4414, AT 90 S 851 5), но и управление проектируемыми внешними устройствами. Реализован ряд задач по работе с памятью , по перекодировке , сложению и делению чисел , по работе с динамической индикацией и матричной клавиатурой . На основе этого смакетированы реальные устройства к одового замка на основе AT 90 S 1200 и измерителя частоты в звуковом диапазоне на основе AT 90 S 8515. Предлагаемая на этой основе методика обучения программирования и применения МК позволяет ввести интересующихся в эту перспективную область. БИБЛ ИОГРАФИЧЕСКИЙ СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 1. Предко М . Руководство по микроконтроллерам . Том 1. / Пер . с англ . под ред . И. И. Шагурина и С. Б. Лужанского – М .: Постмаркет , 2001. – 416 с. 2. Предко М . Руководство по микроконтроллерам . Том 2. / Пер . с англ . под ред . И. И. Шагурина и С. Б. Лужанского – М .: Постмаркет , 2001. – 488 с . 3. Cady, Fredrick M. Microcontrollers and microcomputers: principles of software and hardware engineering. – New York – Oxford, Oxford University Press, 1997. – 252 p. 4. Вуд А . Микропроцессоры в вопросах и ответах . / Пер . с англ . под ред . Д. А. Поспелова . – М .: Энергоатомиздат . 1985. – 184 с . 5. Уильямс Г.Б . Отладка микропроцессорных систем : / Пер . с . англ . – М .: Энергоатомиздат , 1988. – 253с. 6. Угрюмов Е.П. Цифровая схемотехника . – Спб .: БВХ – Санкт-Петербург , 2000. – 528 с . 7. Алексенко А.Г ., Шагурин И.И . Микросхемотехника . – М .: Радио и связь , 1990. – 496 с . 8. Бродин Б.В ., Шагурин И.И . Микроконтроллеры : Справочник . – М .: ЭКОМ , 1999. – 395 с. 9. Прогр аммируемые логические ИМС на КМОП-структурах и их применение . / П.П. Мальцев , Н.И. Гарбузов , А.П . Шарапов , А.А . Кнышев . – М .: Энергоатомиздат , 1998. – 158 с. 10. Соловьев В.В ., Васильев А.Г . Программируемые логические интегральные схемы и их применение . – Мн .: Беларуская наука , 1998. – 270 с. 11. Bursky D. Embedded Logic and Memory Find a Home in FPGA. – Electronic Design, 1999, № 14, pp. 43-56. 12. Chang D., Mazek-Sadowska M. Dynamically Reconfigable FPGA. – JEEE Transition on Computers, 1999, № 6, pp. 565 – 578. 13. Bursky D. Advanced CPLD Architectures Challenge FPGA, Gas. – Electronic Design, 1998, № 22, pp. 78 – 86. 14. Takai Y. a.o. 250 Mbytes Synchronous DRAM Using a 3-Stage-Pipeline Architecture. – JEEE. Journal of Solid-Stage Circuits. – 1994, v.29, № 4, pp. 426 – 429. 15. Лаптев В . Цифровой измеритель температуры на базе AVR микроконтроллера и RC -цепочки . – Электронные компоненты , 2001. № 2, с . 46 – 49. 16. http://www.atmel.ru/ - описание AVR микроконтроллеров , русскоязычный сайт. 17. http://www.dontronics.com/atmel.html - программные проекты по AVR . 18. http://www.gaw.ru/ , http://www.cec-mc.ru - информация о МК фирмы ATMEL 19. http : //trush.da.ru/ , http:/ / avr.da.ru/ - описание МК AT90S1200 фирмы Atmel 20. http://www.ln.com.ua/~real/avreal , http://www.chat.ru/~avreal : - AVReAl: программа прошивки At90sXXXX через LPT порт 21. http://trush.pp.ru/avr/ - полезные ссылки по AVR . ПРИЛОЖЕНИЕ 1 Инструкции процессоров AVR. Ниже приведен набор команд процессоров AVR, б олее детальное описание их можно найти в AVR Data Book [16,19]. Таблица А .1. Арифметические и логические инструкции. Мнемоника Операнды Описание Операция Флаги Циклы ADD Rd , Rr Суммирование без переноса Rd = Rd + Rr Z,C,N,V,H,S 1 ADC Rd , Rr Суммирование с переносом Rd = Rd + Rr + C Z,C,N,V,H,S 1 SUB Rd , Rr Вычитание без переноса Rd = Rd - Rr Z,C,N,V,H,S 1 SUBI Rd , K8 Вычитание константы Rd = Rd - K8 Z,C,N,V,H,S 1 SBC Rd , Rr Вычитание с переносом Rd = Rd - Rr - C Z,C,N,V,H,S 1 SBCI Rd , K8 Вычитание константы с переносом Rd = Rd - K8 - C Z,C,N,V,H,S 1 AND Rd , Rr Логическое И Rd = Rd · Rr Z,N,V,S 1 ANDI Rd , K8 Логическое И с константой Rd = Rd · K8 Z,N,V,S 1 OR Rd , Rr Логическое ИЛИ Rd = Rd V Rr Z,N,V,S 1 ORI Rd , K8 Логическое ИЛИ с константой Rd = Rd V K8 Z,N,V,S 1 EOR Rd , Rr Логическое исключающее ИЛИ Rd = Rd EOR Rr Z,N,V,S 1 COM Rd Побитная Инверсия Rd = $FF - Rd Z,C,N,V,S 1 NEG Rd Изменение знака (Доп . код ) Rd = $00 - Rd Z,C,N,V,H,S 1 SBR Rd , K8 Установить бит (биты ) в регистре Rd = Rd V K8 Z,C,N,V,S 1 CBR Rd , K8 Сбросить бит (биты ) в регистре Rd = Rd · ($FF - K8) Z,C,N,V,S 1 INC Rd Инкрементировать значение регистра Rd = Rd + 1 Z,N,V,S 1 DEC Rd Декрементировать значение регистра Rd = Rd -1 Z,N,V,S 1 TST Rd Проверка на ноль либо отрицательность Rd = Rd · Rd Z,C,N,V,S 1 CLR Rd Очистить регистр Rd = 0 Z,C,N,V,S 1 SER Rd Установить регистр Rd = $FF None 1 ADIW Rdl , K6 Сложить константу и слово Rdh:Rdl = Rdh:Rdl + K6 Z,C,N,V,S 2 SBIW Rdl , K6 Вычесть константу из слова Rdh:Rdl = Rdh:Rdl - K6 Z,C,N,V,S 2 MUL Rd , Rr Умножение чисел без знака R1:R0 = Rd * Rr Z,C 2 MULS Rd , Rr Умножение чисел со знаком R1:R0 = Rd * Rr Z,C 2 MULSU Rd , Rr Умножение числа со знаком с числом без знака R1:R0 = Rd * Rr Z,C 2 FMUL Rd , Rr Умножение дробных чисел без знака R1:R0 = (Rd * Rr) << 1 Z,C 2 FMULS Rd , Rr Умножение дробных чисел со знаком R1:R0 = (Rd *Rr) << 1 Z,C 2 FMULSU Rd , Rr Умножение дробного числа со знаком с числом без знака R1:R0 = (Rd * Rr) << 1 Z,C 2 Таблица А .2. Инструкции ветвления. Мнемоника Опе ранды Описание Операция Флаги Циклы RJMP k Относительный переход PC = PC + k +1 None 2 IJMP Нет Косвенный переход на ( Z ) PC = Z None 2 EIJMP Нет Расширенный косвенный пере ход на ( Z ) STACK = PC+1, PC(15:0) = Z, PC(21:16) = EIND None 2 JMP k Переход PC = k N one 3 RCALL k Относительный вызов подпро граммы STACK = PC+1, PC = PC+k+1 None 3/4* ICALL Нет Косвенный вызов ( Z ) STACK = PC+1, P C = Z None 3/4* EICALL Нет Расширенный косвенный вы зов ( Z ) STACK = PC+1, PC(15:0) = Z, PC(21:16) =EIND None 4* CALL k Вызов подпрограммы STACK = PC+2, PC = k None 4/5* RET Нет В озврат из подпрограммы PC = STACK None 4/5* RETI Нет Возврат из прерывания PC = STACK I 4/5* CPSE Rd , Rr Сравнить , пропустить если равны if (Rd ==Rr) PC = PC 2 or 3 None 1/2/3 CP Rd , Rr Сравнить Rd -Rr Z,C,N,V,H,S 1 CPC Rd , Rr Сравнить с переносом Rd - Rr - C Z,C,N,V,H,S 1 CPI Rd , K8 Сравнить с константой Rd - K Z,C,N,V,H,S 1 SBRC Rr , b Пропустить если бит в реги стре очищен if(Rr(b)==0) PC = PC+2 or 3 None 1/2/3 SBRS Rr , b Пропустить если бит в регистре установлен if(Rr(b)==1) PC = PC+2 or 3 None 1/2/3 SBIC P , b Пропустить если бит в порту очищен if(I/O(P,b)==0) PC = PC+ or 3 None 1/2/3 SBIS P , b Пропустить если бит в порту установлен if(I/O(P,b)==1) PC = PC+2 or 3 None 1/2/3 BRBC s , k Перейти если флаг в SREG очищен if(SREG(s)==0) PC = PC+k+1 None 1/2 BRBS s , k Перейти если флаг в SREG установлен if(SREG(s)==1) PC = PC+k+1 None 1/2 BREQ k Перейти если равно if(Z==1) PC = PC + k + 1 None 1/2 BRNE k Перейти если не равно if(Z==0) PC = PC + k + 1 None 1/2 BRCS k Перейти если перенос установлен if(C==1) PC = PC + k + 1 Non e 1/2 BRCC k Перейти если перенос очищен if(C==0) PC = PC + k + 1 None 1/2 BRSH k Перейти если равно или больше if(C==0) PC = PC + k + 1 None 1/2 BRLO k Перейти если меньше if(C==1) PC = PC + k + 1 None 1/2 BRMI k Перейти если минус if(N==1) PC = PC + k + 1 None 1/2 BRPL k Перейти если плюс if(N==0) PC = PC + k + 1 None 1/2 BRGE k Перейти если больше или равно (со знаком ) if(S==0) PC = PC + k + 1 None 1/2 BRLT k Перейти если меньше (с о знаком ) if(S==1) PC = PC + k + 1 None 1/2 BRHS k Перейти если флаг внутреннего переноса установлен if(H==1) PC = PC + k + 1 None 1/2 BRHC k Перейти если флаг внутреннего переноса очищен if(H==0) PC = PC + k + 1 None 1/2 BRTS k Перейти если флаг T установлен if(T= =1) PC = PC + k + 1 None 1/2 BRTC k Перейти если флаг T очищен if(T==0) PC = PC + k + 1 None 1/2 BRVS k Перейти если флаг переполнения установлен if(V==1) PC = PC + k + 1 None 1/2 BRVC k Перейти если флаг переполнения очищен if(V==0) PC = PC + k + 1 None 1/2 BRIE k Перейти если прерывания разрешены if(I==1) PC = PC + k + 1 None 1/2 BRID k Перейти если прерывания запрещены if(I==0) PC = PC + k + 1 None 1/2 * Для операций доступа к данным количество циклов указано при условии доступа к внутренней памяти данных , и не корректно при работе с внешним ОЗУ . Для инструкций CALL, ICALL, EICALL, RCALL, RET и RETI, необходимо добавить три цикла плю с по два цикла для каждого ожидания в контроллерах с PC меньшим 16 бит (128KB памяти программ ). Для устройств с памятью программ свыше 128KB , добавьте пять циклов плюс по три цикла на каждое ожидание . Таблица А .3. Инструкции передачи данных. Мнемоника Операнды Описание Операция Флаги Циклы MOV Rd , Rr Скопировать регистр Rd = Rr None 1 MOVW Rd , Rr Скопировать пару регистров Rd+1:Rd = Rr+1:Rr, r,d even None 1 LDI Rd , K8 Загрузить константу Rd = K None 1 LDS Rd , k Прямая загрузка Rd = (k) None 2* LD Rd , X Косвенная загрузка Rd = (X) None 2* LD Rd , X+ Косвенная загрузка с пост-инкрементом Rd = (X), X=X+1 None 2* LD Rd , -X Косвенная загрузка с пре-декрементом X=X-1, Rd = (X) None 2* LD Rd , Y Косвенная загрузка Rd = (Y) None 2* LD Rd , Y+ Косвенная загрузка с пост-инкрементом Rd = (Y), Y=Y+1 None 2* LD Rd , -Y Косвенная загрузка с пре-декрементом Y=Y-1, Rd = (Y) None 2* LDD Rd , Y + q Косвенная загрузка с замещением Rd = (Y+q) None 2* LD Rd , Z Косвенная загрузка Rd = (Z) None 2* LD Rd , Z+ Косвенная загрузка с пост-инкрементом Rd = (Z), Z=Z+1 None 2* LD Rd , -Z Косвенная загрузка с пре-декрементом Z=Z-1, Rd = (Z) None 2* LDD Rd , Z + q Косвенная загрузка с замещением Rd = (Z+q) None 2* STS k, Rr Прямое сохранение (k) = Rr None 2* ST X , Rr Косвенное сохранение (X) = Rr None 2* ST X+ , Rr Косвенное сохранение с пост-инкрементом (X) = Rr, X=X+1 None 2* ST -X , Rr Косвенное сохранение с пре-декрементом X=X-1, (X)=Rr None 2* ST Y , Rr Косвенное сохранение (Y) = Rr None 2* ST Y+ , Rr Косвенное сохранение с пост-инкрементом (Y) = Rr, Y=Y+1 None 2 ST -Y , Rr Косвенное сохранение с пре-декрементом Y=Y-1, (Y) = Rr None 2 ST Y + q , Rr Косвенное сохранение с замещением (Y+q) = Rr None 2 ST Z , Rr Косвенное сохранение (Z) = Rr None 2 ST Z+ , Rr Косвенное сохранение с пост-инкрементом (Z) = Rr, Z=Z+1 None 2 ST -Z , Rr Косвенное сохранение с пре-декрементом Z=Z-1, (Z) = Rr None 2 ST Z + q , Rr Косвенное сохранение с замещением (Z+q) = Rr None 2 LPM Нет Загру зка из программной памяти R0 = ( Z ) None 3 LPM Rd , Z Загрузка из программной памяти Rd = ( Z ) None 3 LPM Rd , Z+ Загрузка из программной памяти с пост-инкрементом Rd = ( Z ), Z=Z+1 None 3 ELPM Нет Расширенная загрузка из программной памяти R0 = (RAMPZ: Z ) None 3 ELPM Rd , Z Расширенная загрузка из программной памяти Rd = (RAMPZ: Z ) None 3 ELPM Rd , Z+ Расширенная загрузка из программной памяти с пост-инкрементом Rd = (RAMPZ: Z ), Z = Z+1 None 3 SPM Нет Сохранение в программной памяти ( Z ) = R1:R0 None - ESPM Нет Расширенное сохр анение в программной памяти (RAMPZ: Z ) = R1:R0 None - IN Rd , P Чтение порта Rd = P None 1 OUT P , Rr Запись в порт P = Rr None 1 PUSH Rr Занесение регистра в стек STACK = Rr None 2 POP Rd Извлечение регистра из стека Rd = STACK None 2 * Для операций доступа к данным количество циклов указано при условии доступа к внутренней памяти данных , и не корректно при работе с внешним ОЗУ . Для инструкций LD, ST, LDD, STD, LDS, STS, PUSH и POP, необходимо добавить один цикл плюс по одному циклу для к аждого ожидания . Таблица А .4. Инструкции работы с битами. Мнемоника Операнды Описание Операция Флаги Циклы LSL Rd Логический сдвиг влево Rd(n+1)=Rd(n), Rd(0)=0, C=Rd(7) Z,C,N,V,H,S 1 LSR Rd Логический сдвиг вправо Rd(n)=Rd(n+1), Rd(7) =0, C=Rd(0) Z,C,N,V,S 1 ROL Rd Циклический сдвиг влево через C Rd(0)=C, Rd(n+1)=Rd(n), C=Rd(7) Z,C,N,V,H,S 1 ROR Rd Циклический сдвиг вправо через C Rd(7)=C, Rd(n)=Rd(n+1), C=Rd(0) Z,C,N,V,S 1 ASR Rd Арифметический сдвиг вправо Rd(n)=Rd (n+1), n=0,...,6 Z,C,N,V,S 1 SWAP Rd Перестановка тетрад Rd(3..0) = Rd(7..4), Rd(7..4) = Rd(3..0) None 1 BSET s Установка флага SREG(s) = 1 SREG(s) 1 BCLR s Очистка флага SREG(s) = 0 SREG(s) 1 SBI P , b Установить бит в порту I/O(P,b) = 1 None 2 CBI P , b Очистить бит в порту I/O(P,b) = 0 None 2 BST Rr , b Сохранить бит из регистра в T T = Rr(b) T 1 BLD Rd , b Загрузить бит из T в регистр Rd(b) = T None 1 SEC Нет Установить флаг переноса C =1 C 1 CLC Нет Очистить флаг переноса C = 0 C 1 SEN Нет Установить флаг отрицательного ч исла N = 1 N 1 CLN Нет Очистить флаг отрицательного числа N = 0 N 1 SEZ Нет Установить флаг нуля Z = 1 Z 1 CLZ Нет Очистить флаг нуля Z = 0 Z 1 SEI Нет Установить флаг прерываний I = 1 I 1 CLI Нет Очистить флаг прерываний I = 0 I 1 SES Нет Установить флаг числа со знаком S = 1 S 1 CLN Нет Очистить флаг числа со знаком S = 0 S 1 SEV Нет Установить флаг переполнения V = 1 V 1 CLV Нет Очистить флаг переполнения V = 0 V 1 SET Нет Установить флаг T T = 1 T 1 CLT Нет Очистить флаг T T = 0 T 1 SEH Нет Установить флаг внутреннего переноса H = 1 H 1 CLH Нет Очистить флаг внутреннего переноса H = 0 H 1 NOP Нет Нет операции Нет None 1 SLEEP Нет Спать (уменьшить энергопотребление ) Смотрите описание инструкции None 1 WDR Нет Сброс сторожевого таймера См отрите описание инструкции None 1 Ассемблер не различает регистр символов . Операнды могут быть таких видов : § Rd: Результирующий (и исходный ) регистр в регистровом файле § Rr: Исходный регистр в регистровом файле § b: Константа (3 бита ), может быть константное выражение § s: Константа (3 бита ), может быть константное выражение § P: Константа (5-6 бит ), может быть константное выражение § K6; Константа (6 бит ), может быть константное выражение § K8: Константа (8 бит ), может быть константное выражение § k: Константа (размер зависит от инструкции ), может быть константное выражение § q: Константа (6 бит ), может быть константное выражение § Rdl : R 24, R 26, R 28, R 30. Для инструкций ADIW и SBIW § X,Y,Z: Регистры косвенной адресации (X=R27:R26, Y=R29:R28, Z=R31:R30)
1Архитектура и строительство
2Астрономия, авиация, космонавтика
 
3Безопасность жизнедеятельности
4Биология
 
5Военная кафедра, гражданская оборона
 
6География, экономическая география
7Геология и геодезия
8Государственное регулирование и налоги
 
9Естествознание
 
10Журналистика
 
11Законодательство и право
12Адвокатура
13Административное право
14Арбитражное процессуальное право
15Банковское право
16Государство и право
17Гражданское право и процесс
18Жилищное право
19Законодательство зарубежных стран
20Земельное право
21Конституционное право
22Конституционное право зарубежных стран
23Международное право
24Муниципальное право
25Налоговое право
26Римское право
27Семейное право
28Таможенное право
29Трудовое право
30Уголовное право и процесс
31Финансовое право
32Хозяйственное право
33Экологическое право
34Юриспруденция
 
35Иностранные языки
36Информатика, информационные технологии
37Базы данных
38Компьютерные сети
39Программирование
40Искусство и культура
41Краеведение
42Культурология
43Музыка
44История
45Биографии
46Историческая личность
47Литература
 
48Маркетинг и реклама
49Математика
50Медицина и здоровье
51Менеджмент
52Антикризисное управление
53Делопроизводство и документооборот
54Логистика
 
55Педагогика
56Политология
57Правоохранительные органы
58Криминалистика и криминология
59Прочее
60Психология
61Юридическая психология
 
62Радиоэлектроника
63Религия
 
64Сельское хозяйство и землепользование
65Социология
66Страхование
 
67Технологии
68Материаловедение
69Машиностроение
70Металлургия
71Транспорт
72Туризм
 
73Физика
74Физкультура и спорт
75Философия
 
76Химия
 
77Экология, охрана природы
78Экономика и финансы
79Анализ хозяйственной деятельности
80Банковское дело и кредитование
81Биржевое дело
82Бухгалтерский учет и аудит
83История экономических учений
84Международные отношения
85Предпринимательство, бизнес, микроэкономика
86Финансы
87Ценные бумаги и фондовый рынок
88Экономика предприятия
89Экономико-математическое моделирование
90Экономическая теория

 Анекдоты - это почти как рефераты, только короткие и смешные Следующий
Дворники-таджики отказываются работать за рубли и хотят быть валютными дворниками.
Anekdot.ru

Узнайте стоимость курсовой, диплома, реферата на заказ.

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

Смотрите также:


Банк рефератов - РефератБанк.ру
© РефератБанк, 2002 - 2016
Рейтинг@Mail.ru