В первую очередь это IAR AVR C — почти однозначно признается лучшим компилятором для AVR, т.к. Полетаев ([email protected]). Почитайте раздел 'Учебник' - надеюсь, немножко поможет. Есть такая компания, называется она IAR Systems. Программирование на Си под AVR Первая статья. Знакомство с компилятором IAR AVR. Основы программирования контроллеров AVR на Си Микроконтроллеры. По просьбам посетителей форума пишу мини-учебник по началам. Откроется окно Embedded Workbench Startup, можно создать проект ипользуя его, но мы пойдем другим путем, . Книги и учебники по радиоэлектронике и микроконтроллерам там Скачать весь курс по AVR одним архивом. А в IAR надо отметить галочку 'Элау бит дефинишнс' в свойствах проекта. IAR Embedded Workbench с оптимизацией C и C компилятор. Она обеспечивает расширенную поддержку устройств AVR и создает . I2c, 1-wire, TWI, SPI, UART, USART, rs232, iar, winavr, ATtiny2313, ATtiny15, для МК AVR написаны на языке Бэйсик. Скачать BASCOM- AVR -1.11.8.3. Основы программирования контроллеров AVR на Си - Микроконтроллеры - LASERS. FONAREVKA. RUПо просьбам посетителей форума пишу мини- учебник по началам программирования. Предполагается, что на компьютере уже установлен компилятор Си для AVR (avr- gcc, он же в Windows называется Win. AVR) с прилагаемой к нему стандартной библиотекой avr- libc. Также предполагается, что читатель умеет запускать его и делать из файла *. Все это здесь объясняться не будет, а рассмотрим мы только написание собственно программы, то есть файла на Си. Простейшие программы. Начнем с того, что напишем на Си программу, которая ничего не делает. Вот она: Код: int main(void). В языке Си функция - примерно то же самое, что функция в математике, а в других языках она может называться подпрограммой или процедурой. Функция в Си является кусочком программы, содержащим некоторую последовательность действий. В этом фрагменте кода мы объявляем функцию под названием main, тело которой состоит из единственной строки return 0; , требуемой лишь стандартом Си. Позднее мы поймем, что это значит, а пока просто запомним, что: основное тело программы в Си пишется в функции main. Знаками /* .. Но у нас нет экрана, куда можно было бы вывести такое сообщение. Поэтому мы просто включим светодиод. Подключим светодиод к выводу PORTB0 нашего микроконтроллера через резистор так, чтобы он горел при появлении единицы на этом выводе. Программа, включающая его, будет выглядеть так: Код: #include < avr/io. В программе мы воспользовались портами ввода- вывода процессора. Это не часть языка Си, это библиотечные имена, и содержатся они в файле < avr/io. Работа с портами ввода- вывода AVR. Для каждого порта микроконтроллера в библиотеке < avr/io. Это PORTx, PINx и DDRx, где x - какая- то буква. Например, DDRB и PORTB. Каждый из них представляет собой 1 байт (число из 8 битов, то есть от 0 до 2. Регистр DDR отвечает за направление порта: 0 - вход, 1 - выход. Регистр PORT в режиме выхода просто выдает 0 или 1 на соответствующий вывод. Регистр PORT в режиме входа включает (1) или выключает (0) резистор подтяжки вывода на плюс. Регистр PIN во всех режимах отражает реальное состояние нулей и единиц на ножках контроллера. Он только для чтения, пытаться изменять его бесполезно. У порта на выходе его содержимое просто повторяет содержимое регистра PORT (если только на выводах контроллера не КЗ), а у порта на входе это и есть регистр, через который читают входы. Обращаются к регистрам из Си просто - подставляют их в арифметические выражения. Чтобы зажечь светодиод на PORTB0, нам надо сделать две вещи - переключить PORTB0 в режим выхода (поставить DDRB в двоичное 0. B7- B1 входы, а B0 выход), а потом в PORTB поднять 0- 1 бит (поставить тоже в 0. B7- B1 выключить резисторы подтяжки . Оба числа в десятичной системе - просто 1. Можно было бы написать: и это работало бы. Но из двоичной системы в десятичную переводить в уме трудно. Гораздо проще переводить в шестнадцатеричную - это легко научиться делать в уме. Поэтому мы в шестнадцатеричной системе и запишем: 0. Чтобы Си понял, что это не десятичная система, нужно перед числом написать специальный магический код . И получается: Код: DDRB = 0x. PORTB = 0x. 01; Подставив это в main, получим программу, которая написана выше. Если мы хотим зажечь два светодиода сразу, на PORTB0 и на PORTB7, то мы напишем это так: Код: int main(). Почему эта программа зажигает PORTB0 и PORTB7? Упражнение. Что надо написать, чтобы зажечь PORTB4, PORTB0 и PORTB7 одновременно?
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |