AVR учебный курс. Первая программа на Си По сложившейся до меня традиции программирование микроконтроллеров начинается с программы управляющей светодиодом. J_WnszNN_5g/UKUQMnAGTBI/AAAAAAAAApc/1TpkT0brnR4/s400/iar.png' alt='Iar Для Avr Скачать' title='Iar Для Avr Скачать' />И я в свое время наморгался светодиодами на старом добром AVRовском ките STK2. Это было несколько лет назад, и я до сих пор помню восторг от первых работающих программ, пускай и примитивно простых. Мощная среда для разработки программ на си для микроконтроллеров. IAR Embedded Workbench с оптимизацией C и C компилятор. Я начинал изучение микроконтроллеров с ассемблера и только спустя пару тройку лет постепенно перешел на Си. К этому времени я уже хорошо знал всю периферию AVR микроконтроллеров, поэтому больших затруднений этот переход не вызвал. Рабочая Тетрадь 4 Класс Часть 2 Климанова далее. На интернет форумах время от времени возникают религиозные войны ассемблерных и сишных программистов. По правде говоря, я и сам принимаю в них участие, но не для того чтобы отстоять какую либо точку зрения, а просто шутки ради. Лично я считаю, что ассемблер полезно знать, но программировать нужно на Си. Знание ассемблера позволят лучше понимать работу микроконтроллера, писать более компактный код на Си. В некоторых случаях к ассемблеру нужно прибегать для написания критичных по времени исполнения или по объему кода кусков программы. Писать же полностью программу на ассемблере. И для начала нам нужно определиться с компилятором. На данный момент существует довольно много Си компиляторов для AVR микроконтроллеров. IAR это один из лучших компиляторов СС для множества микроконтроллеров, начиная от 8051 и заканчивая продвинутыми. Начнм с IAR Embedded Workbench IDE for AVR посмотрим, как хотя бы запустить в нем проект. Будем рассматривать язык С без плюсов поэтому. Полезная информация, которая может помочь в среде программирования IAR Embedded Workbench for AVR язык C. Наиболее популярные из них Code. Vision, WINAVR, ICC Image. Craft, IAR AVR. Какой из них использовать личное дело каждого. Я немного пользовался всеми, но в конце концов отдал предпочтение IAR AVR. Это платный компилятор, он не так прост в освоении как ICC или Code. Vision, для него нет такого количества библиотек как для WINAVR и по нему мало информации на русском языке. За что же я его тогда так люблю За его мощь. Мало какой из компиляторов может сравниться с IARом по качеству компиляции сишного кода. И это неудивительно, ведь система команд и внутреннее устройство микроконтроллеров AVR разрабатывались совместно с фирмой IAR Systems. Если вы разделяется мой энтузиазм по поводу этого компилятора или просто решили довериться моему мнению, то эта и последующие статьи по программированию на Си для AVR микроконтроллеров в среде IAR AVR для вас. Есть несколько путей решения этой проблемы. Можно скачать программу с официального сайта IAR Systems iar. В разделе Download есть две версии 3. Kickstart edition. Первый вариант полнофункциональная 3. Можно найти программу на просторах сети поискать на торрентах, на форумах по электронике. Я использую полнофункциональную программу без ограничений версии 5. До сих пор никаких нареканий эта версия у меня не вызывала. Дальше я опишу последовательность действий для создания первого проекта в IARе. Возможно, чересчур подробное описание вызовет у некоторых читателей изрядную степень раздражения. Спокойно, без пены. Люди разные. Кому то просто необходимо разжевать материал. Итак, запускаем программу. Откроется диалоговое окно Embedded Workbench Startup. Выбираем пункт Create new project in current workspace создать новый проект в текущем рабочем пространстве. Откроется окно Create New Project. IAR предложит вам выбрать тип шаблона проекта Project templates. Выбираем C main. В стандартном Save As диалоге указываем название проекта led. Сохраняем workspace File Save Workspace. Проект создан. Приглядимся к IARу. Ниже tool bar с кнопками. С левой стороны рабочее пространство workspace, в котором отображается структура нашего проекта. С правой стороны находится редактор кода. Сейчас там открыт файл main. IAR позволяет объединять несколько проектов в одном workspace. Это очень удобно для быстрой навигации между проектами. Каждый workspace может содержать один или несколько проектов, а каждый проект должен быть частью, по крайней мере, одного workspace. Каждый проект имеет так называемые build configuration. По умолчанию их две Debug и Release. Эти конфигурации отличаются настройками проекта. В простейшем случае это опции оптимизации, формат выходного файла. Это позволяет быстро менять настройки, не залезая в меню Project Options. Подробнее об организации проектов в IARе. Зададим настройки проекта для конфигурации Release. Выбираем тип микроконтроллера. General Options Target Processor configuration. У меня это ATmega. B поле Output file cтавим галочку Override default и заменяем расширение d. В поле Format выбираем Other и в выпадающем меню Output format выбираем тип файла intel standart. Жмем ОК. Сформулируем нашу задачу заставить микроконтроллер моргать светодиодом с частотой видимой человеческому глазу. Схема для нашего примера. Алгоритм программы следующий 1. Назначение комментариев помогать разбираться в программе. Ну то есть пояснять трудные участки кода, назначение функций и тому подобное. Иногда бывает, откроешь свою старую программу и не можешь вспомнить, как она работает. А все почему Да потому что впопыхах не написал комментариев к ней. Часто символы комментариев используются, когда нужно исключить часть кода из программы, не удаляя его при этом. Пусть первой строчкой нашей программы будет комментарий. Си для AVR В нашей программе мы будем использовать имена регистров микроконтроллера и для того чтобы компилятор их понимал, мы должны подключить к нашей программе заголовочный файл хедер файл или просто хедер, который содержит описание адресов регистров, адресов векторов прерываний, имен битов регистров микроконтроллера ATMega. Это делается с помощью директивы препроцессора include Препроцессор это специальная часть компилятора, обрабатывающая текст программы перед началом процесса компиляции кода. Все директивы препроцессора начинаются с символа. Двойные кавычки и указывают компилятору начинать поиск с директории, в которой хранится проект. Для ATMega. 85. 35 этот файл называется iom. ATMega. 16 iom. По идее мы должны в начале каждой программы подключать заголовочный файл того микроконтроллера, который мы используем. Препроцессор обрабатывает этот файл и в зависимости от настроек проекта включает в нашу программу нужный заголовочный файл. Итак, следущая строчка программы include lt ioavr. В нашей программе мы будем использовать задержку. Задержку можно реализовать программно и аппаратно. Сейчас нас интересует программная задержка. IAR содержит библиотеку, в которой уже есть готовая функция задержки. Нам нужно подключить к нашей программе эту библиотеку. Как это сделать Каждая библиотека имеет свой заголовочный файл в котором описано какие фукции она содержит. Этот файл мы и должны включить в программу. Делается это, как вы догадались с помощью директивы include. Основу любой сишной программы составляют функции, и любая программа на Си имеет хотя бы одну функцию main. Вообще то на примере main не хотелось бы объяснять синтаксис функций, потому что main хоть и является функцией, но вызывается не как обычно, а автоматически. С этой функции микроконтроллер начинает выполнение написанной нами программы. Вызовы всех других функций, наших или библиотечных, должны быть записаны в коде. Как вызывается функция, мы увидим дальше. У функции есть заголовок int mainvoid и тело оно ограниченно фигурными скобками. В тело функции мы и будем добавлять наш код. Если функция не возвращает значение используется ключевое void. После имени функции в скобках указываются параметры, которые передаются функции при ее вызове. Если функция без параметров используется ключевое слово void Для того чтобы завершить выполнение функции используется ключевое слово return. Если функция возвращает значение, то оно пишется после слова return. Режим работы порта определяется содержимым регистра DDRC. Ничего кроме светодиода на данный момент к порту C не подключенно, поэтому можно весь порт конфигурировать на выход. Это делается записью в регистр DDRC числа 2. В языке Си нет поддержки двоичных чисел, но это можно обойти с помощью макроопределений. Об этом мы поговорим позжеДополнительную информацию по портам ввода вывода микроконтроллеров AVR вы можете почерпнуть здесь.