Примеры программ для авр

При установке интегрированной среды разработки AVR Studio в папке Appnotes размещён ряд подпрограмм на языке ассемблера часто встречающихся при решении практических задач. Все исходные тексты приведенных программных фрагментов разработаны специалистами фирмы Atmel corp. и достаточно подробно откомментированы на английском языке. Перечень названий файлов с исходными текстами и их назначение приведены в приложении 4. Для углублённого изучения программирования для микроконтроллеров семейства AVR можно обратиться к руководящим техническим материалам (Application Notes) размещенным на сайте Atmel corp. (www.atmel.com).

Библиографический список

К разделу 1

    1. Кривченко И.В AVR — микроконтроллеры: очередной этап на пути развития/ «Компоненты и технологии» N3, М., 2002г. С 5 14.

    1.2 AVR RISC Microcontroller Data Book. Atmel Corp. 1999

    К разделу 2

    2.1Микроконтроллер архитектуры AVR AT90S2313./ Пер. с англ. Ю. Андриенко. Atmel corp. 2002г.

    AVR ISP2 — пример практического использования

    К разделу 3

    3.1 Справка по Ассемблеру для AVR / Пер. с англ Руслан Шимкевич, Atmel corp. 2000г

    К разделу 4

    4.1 Гребнев В.В. Микроконтроллеры семейства AVR фирмы Atmel.-M.: ИП Радиософт, 2002 -176с.:ил

    4. 2. Золотухо Р.Н. Аппаратно-программные средства поддержки разработок на основе микроконтроллеров AVR фирмы Atmel / Электронная версия: http://atmel.ru/Articles/Atmel20.htm#n1

    К разделу 5

    5.1 А. Редчук AVReAl — программирование AVR через LPT ver1.23rev4/

    Электронная версия: http://www.ln.com.ua/~real/avreal/index.html

    Основные параметры микроконтроллеров семейства avr

    Таблица 1. Cемейство «tiny»

    Источник: studfile.net

    Побитовые операции | Программирование микроконтроллеров AVR на C

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

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

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

    Побитовые операции

    Чаще всего при программировании микроконтроллеров AVR мы пользовались двоичной системой счисления, поскольку она имеет большую наглядность по сравнению с шестнадцатеричной и хорошо понятна для начинающих программистов МК. Например, нам нужно установить только 3-й бит порта D. Для этого, как мы уже знаем, можно воспользуемся следующим двоичным кодом:

    Первая программа на avr gcc

    Однако этой командой мы устанавливаем 3-й разряд в единицу, а все остальные (0, 1, 2, 4, 5, 6 и 7-й) мы сбрасываем в ноль. А теперь давайте представим ситуацию, что 6-й и 7-й разряды задействованы как входы АЦП и в это время на соответствующие выводы МК поступает сигнал от какого-либо устройства, а мы, применяемой выше командой, обнуляем эти сигналы. В результате чего микроконтроллер их не видит и считает, что сигналы не приходили. Поэтому вместо такой команды нам следует применить другую, которая бы установила только 3-й бит в единицу, при этом не влияя на остальные биты. Для это обычно применяется следующая побитовая операция:

    Синтаксис ее мы подробно разберем далее. А сейчас еще один пример. Допустим нам нужно проверить состояние 3-го разряда регистра PIND, тем самым проверяя состояние кнопки. Если данный разряд сброшен в ноль, то мы знаем, что кнопка нажата и далее выполняется код команды, который соответствует состоянию нажатой кнопки. Ранее мы бы воспользовались следующей записью:

    Читайте также:
    Программа закачки файлов лучшая

    if (PIND == 0b00000000)

    Однако с помощью нее мы проверяем не отдельный, – 3-й, а сразу все биты регистра PIND. Поэтому даже если кнопка нажат и нужный разряд сброшен, но в это время на какой-либо другой вывод порта D поступит сигнал, то соответствующий быт установится в единицу, и условие в круглых скобках будет ложным. В результате код, находящийся в фигурных скобках, не будет выполняться даже при нажатой кнопке. Поэтому для проверки состояния отдельного 3-го бита регистра PIND следует применять побитовую операцию:

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

    Установка отдельного бита

    Для установки отдельного бита, например порта D, применяется побитовая операция ИЛИ. Именно ее мы применяли в начале статьи.

    PORTD = 0b00011100; // начальное значение

    PORTD == 0b00011101; // результат

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

    Для примера установим еще 6-й разряд порта D.

    PORTD = 0b00011100; // начальное состояние порта

    PORTD == 0b01011100; // результат

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

    PORTB = 0b00011100; // начальное значение

    PORTB == 0b1011101; // результат

    Сброс (обнуление) отдельных битов

    Для сброса отдельного бита применяются сразу три ранее рассмотренные команды:

    Давайте сбросим 3-й разряд регистра PORTC и оставим без изменений остальные.

    Выполним подобные действия для 2-го и 4-го разрядов:

    Переключение бита

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

    Изменим состояние нулевого, второго и шестого битов:

    Побитовые операции Установка отбельных битов

    Проверка состояния отдельного бита. Напомню, что проверка (в отличии от записи) порта ввода-вывода осуществляется с помощью чтения данных из регистра PIN.

    Наиболее часто проверка выполняется одним из двух операторов цикла: if и while. С этими операторами мы уже знакомы ранее.

    Проверка разряда на наличие логического нуля (сброса) с if

    Если третий разряд порта D сброшен, то выполняется Код1. В противном случае, выполняется Код2.

    Аналогичные действия выполняются при и такой форме записи:

    Проверка разряда на наличие логической единицы (установки) с if

    Приведенные выше два цикла работаю аналогично, но могут, благодаря гибкости языка программирования C, иметь разную форму записи. Операция != обозначает не равно. Если третий разряд порта ввода-вывода PD установлен (единица), то выполняется Код1, если нет ‑ Код2.

    Ожидание сброса бита с while

    Код1 будет выполняться пока 5-й разряд регистра PIND установлен. При сбросе его начнет выполняться Код2.

    Ожидание установки бита с while

    Здесь синтаксис языка С позволяет записать код двумя наиболее распространёнными способами. На практике применяются оба типа записи.

    Алгоритм работы данной функции противоположен предыдущей функции. Цикл будет выполняться до тех пор, пока 4-й разряд порта D сброшен.

    Побитовые операции | Проверка отдельного бита

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

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

    Источник: diodov.net

    AVR: программирование в среде AVR Studio

    Для программирования AVR-микроконтроллеров существует немало средств разработки, однако, наиболее популярным, несомненно, следует признать пакет AVR Studio. Есть ряд причин такой популярности – это бесплатный пакет, разработанный фирмой ATMEL, он объединяет в себе текстовый редактор, ассемблер и симулятор. Пакет AVR Studio также используется совместно с аппаратными средствами отладки. В предлагаемой статье на примерах рассматриваются приемы работы с пакетом, что поможет начинающим программистам быстрее понять взаимодействие отдельных компонентов AVR Studio.

    Читайте также:
    Как составить программу для станка с чпу

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

    Пакет AVR Studio имеет солидную историю развития, что отражается в количестве существующих версий. В конце 2003 г. выпущена версия 4.08, которая имеет ряд полезных дополнений, а в начале 2004 г. вышло обновление (Service Pack 1), добавляющее поддержку AVR-контроллеров третьего поколения семейства ATmega48. Производство микросхем этого семейства намечено на вторую половину 2004 г.

    Дистрибутив пакета и Service Pack можно загрузить с сайта www.atmel.com или получить компакт-диск с этим дистрибутивом у российского дистрибьютора фирмы ATMEL.

    Работу пакета AVR Studio удобно рассматривать на какой-либо конкретной программе. В качестве илюстрации мы рассмотрим создание проекта для простейшей программы, которая будет по очереди зажигать два светодиода. Для определенности возьмем микросхему Atmega128 и подключим два светодиода в выводам 31 и 32 (это биты 6 и 7 порта D микросхемы ATmega128).

    AVR-контроллеры имеют мощные выходные каскады, типовой ток каждого вывода составляет 20 мА, максимальный ток вывода – 40 мА, причем это относится как к втекающему, так и к вытекающему току. В нашем примере светодиоды подключены анодами к выводам контроллера, а катоды через гасящие резисторы соединены с землей. Это означает, что светодиод зажигается подачей «1» на соответствующий вывод порта. Принципиальная схема приведена на рисунке. На схеме также показаны две кнопки, которые будут использованы в одной из программ.

    Здесь уместно сделать небольшое отступление о выборе типа микросхемы для простейшего примера. Действительно, с первого взгляда может показаться странным, зачем нужен такой мощный кристалл в 64-выводном корпусе там, где хватит и 8-выводной микросхемы ATtiny12? Однако, в таком подходе есть логика. Известно, что в основе практически любого AVR-контроллера лежит одинаковое ядро.

    По большому счету, контроллеры различаются объемом памяти, количеством портов ввода/вывода и набором периферийных модулей. Особенности каждого конкретного контроллера – привязка логических имен регистров ввода/вывода к физическим адресам, адреса векторов прерываний, определения битов портов и т.д. описаны в файлах с расширением .inc, которые входят в состав пакета AVR Studio.

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

    Таким образом, например, можно отлаживать на ATmega128 программу, которая будет выполняться на ATtiny13. При этом исходный код останется практически тем же, изменится лишь имя подключаемого файла с 128def.inc на tn13def.inc. У такого подхода также есть свои преимущества.

    Например, «лишние» порты ввода/вывода можно использовать для подключения ЖК-индикатора, на который можно выводить отладочную информацию. Или, воспользоваться внутрисхемным эмулятором, который подключается к JTAG-порту микросхемы ATmega128 (контроллер ATtiny13 такой порт не имеет).

    Таким образом, можно использовать единственную отладочную плату, на которой установлен «старший» AVR-контроллер, для отладки любых вновь разрабатываемых систем, естественно, базирующихся также на AVR-микроконтроллерах. Одна из таких плат называется AS-megaM. Именно она использовалась для создания примеров программ, приводимых в статье.

    Это универсальный одноплатный контроллер на базе микросхемы ATmega128, который содержит внешнее ОЗУ, два порта RS-232, порт для подключения ЖК-индикатора, внутрисхемного программатора и эмулятора AT JTAG ICE. На плате также есть место для распайки микросхемы FLASH-ПЗУ серии АТ45 в корпусах TSOP32/40/48 и двухканального ЦАП серии AD5302/ AD5312/ AD5322. Теперь, после объяснения причин использования AVR-монстра для зажигания пары сватодиодов, можно идти дальше.

    При программировании в среде AVR Studio надо выполнить стандартную последовательность действий:

    • создание проекта
    • загрузка файла
    • компиляция
    • симуляция
    • загрузка hex-кода в микроконтроллер
    Читайте также:
    В гостях у сказки программа во сколько начиналась время

    ; Пример «Управление светодиодами» ; написан для отладочной платы AS-MegaM ; Частота задающего генератора 7,37 МГц ; светодиоды подключены к выводам PD6 и PD7 и через резисторы — на общий провод. ; подключение файла описания ввода-вывода микросхемы ATmega128 .include «m128def.inc» ; начало программы begin: ; первая операция — инициализация стека ; если этого не сделать, то вызов подпрограммы или прерывания ; не вернет управление обратно ; указатель на конец стека устанавливается на последний адрес внутреннего ОЗУ — RAMEND ldi r16,low(RAMEND) out spl,r16 ldi r16,high(RAMEND) out sph,r16 ; для того, чтобы управлять светодиодами, подключенными к выводам PD6 и PD7, ; необходимо объявить эти выводы выходными. ; для этого нужно записать «1» в соответствующие биты регистра DDRD (DataDiRection) ldi r16,(1<<6) | (1<<7) out DDRD,r16 ; основной цикл программы loop: ldi r16,(1<<6) ; светится один светодиод out PORTD,r16 rcall delay ; задержка ldi r16,(1<<7) ; светится второй светодиод out PORTD,r16 rcall delay ; задержка rjmp loop ; повторение цикла ; процедура задержки ; примерно полсекунды при частоте 7,37 МГц ; три пустых вложенных цикла соответственно delay: ldi r16,30 ; 30 delay1: ldi r17,200 ; 200 delay2: ldi r18,200 ; и еще 200 итераций delay3: dec r18 brne delay3 dec r17 brne delay2 dec r16 brne delay1 ret ; возврат в главную программу
    ; Пример «Управление светодиодами от кнопок» ; написан для отладочной платы AS-MegaM ; светодиоды подключены к выводам PD6 и PD7 и через резисторы — на общий провод. ; кнопки — на PE4 и PE5 .include «m128def.inc» ; основная программа begin: ; инициализация стека ldi r16,low(RAMEND) out spl,r16 ldi r16,high(RAMEND) out sph,r16 ; инициализация светодиодов ldi r16,(1<<6) | (1<<7) out DDRD,r16 ; инициализация выводов, к которым подключены кнопки (на вход) ; внутренние подтягивающие резисторы подключены ; для этого в PORTE нужно установить соответствующие биты в единицы ldi r16,(1<<4) | (1<<5) out PORTE,r16 ; а в DDRE — в нули ldi r16,0 out DDRE,r16 ; бесконечный цикл forever: in r16,PINE ; теперь в r16 находится текущее «состояние» кнопок com r16 ; кнопка «нажимается» нулем, поэтому инвертируем регистр lsl r16 ; переносим биты 4,5 в позиции 6,7 lsl r16 ; и обновляем «показания» светодиодов andi r16,(1<<6) | (1<<7) out PORTD,r16 rjmp forever ; цикл выполняется бесконечно

    Во время посещения «родины AVR» — норвежского офиса фирмы ATMEL, один из авторов статьи беседовал с Ларсом Квенилдом, руководителем группы программистов, которая создала и поддерживает пакет AVR Studio. Этот человек, классический программист, с бородой, в свитере и обутый в сандали на носки, рассказал о перспективах развития пакета. В следующую версию (4.09) — будет включен интерфейс для нового внутрисхемного эмулятора – JTAGICE mkII (он называется также AT JTAGICE2), который во второй половине года придет на смену AT JTAGICE. У этого эмулятора есть два существенных отличия. С одной стороны, добавлена поддержка нового однопроводного отладочного интерфейса для младших AVR-контроллеров, debugWIRE. Этот интерфейс интересен тем, что он не занимает для своей работы дополнительные выводы микроконтроллера, так как использует для обмена вывод Reset микроконтроллера! С другой стороны (можно понимать это выражение буквально), у эмулятора AT JTAGICE2 появится, наконец, интерфейс USB для связи с компьютером. Литература

    1. Материалы технического семинара AVR Technical Training. Atmel. Norway. December 2003.
    2. Николай Королев, Дмитрий Королев AVR-микроконтроллеры второго поколения: средcтва разработчика. // Компоненты и технологии, 2003 № 7
    3. Николай Королев, Дмитрий Королев. AVR-микроконтроллеры второго поколения: новые аппаратные возможности // Компоненты и технологии. 2003. № 4.
    4. Николай Королев, Дмитрий Королев. AVR-микроконтроллеры: большое в малом. //Схемотехника», 2001, №5
    5. Николай Королев, Дмитрий Королев. AVR-микроконтроллеры: программные средства // Компоненты и технологии, 2000. № 4.
    6. Николай Королев. AVR: аппаратные средства разработчика // Компоненты и технологии, 1999 № 1
    7. Николай Королев. RISC- микроконтроллеры фирмы ATMEL //Chip-News 1998, №2
    8. Николай Королев, Дмитрий Королев AVR: новые 8-разрядные RISC-микроконтроллеры фирмы ATMEL //Микропроцессор Ревю, 1998, №1

    Источник: www.compitech.ru

    Рейтинг
    ( Пока оценок нет )
    Загрузка ...
    EFT-Soft.ru