И так продолжим наш рассказ про МК. Сегодня начнем изучать программу CodeVisionAVR. Данная программа является хорошим компилятором. а так же легко прошивает МК.

Если у Вас еще нет данной программы, то ее можно скачать с официального сайта HP Info Tech или вот отсюда но правда версия по старее. Программа распространяется на коммерческой основе, но для проектов не более 4 кб компилит бесплатно. Я буду рассматривать все примеры на версии 2.04.4а. Если у Вас будет новая версия, то отличия могут быть не значительными. И так начнем. Я думаю что Вы уже скачали и установили программу. Делается это довольно просто. Теперь находим ярлык программы на рабочем столе и запускаем ее. При первой загрузке окно программы будет завалено кучей окон. Я обычно все их закрываю и Вам советую. В общем закройте окна так чтобы основное окно выглядело как на рисунке ниже.

И так продолжим наш рассказ про МК. Сегодня начнем изучать программу CodeVisionAVR. Данная программа является хорошим компилятором. а так же легко прошивает МК. - student2.ru

Если все сделали правильно, то программа должна выглядеть как на картинке. Если да, то идем дальше, а если нет, то смотрите ошибки. Что-то сделали не так. Первая программа которую мы напишем, будет моргание светодиодом. Схему подключения смотрим ниже.

И так продолжим наш рассказ про МК. Сегодня начнем изучать программу CodeVisionAVR. Данная программа является хорошим компилятором. а так же легко прошивает МК. - student2.ru

Питание я не рисовал, но для изготовления реальной модели требуется подключения питания. Теперь давайте рассмотрим схему. Х1 - это кварц. Давайте возьмем частоту в 4 МГц. Кварц нужен для тактирования МК. С1 и С2 нужны для старта кварца. Мы уже про данную схему подключения говорили впрошлой статье

. А вот новенькое добавилось к нулевому порту "В". R1 - это токоограничивающий резистор. Его рассчитать не сложно. Берем напряжение которое будет протекать через светодиод и делим на допускаемый ток светодиода. Далее берем ближайший резистор по номиналу выше расчетной и ву-а-ля. Ток ограничивать надо для того чтобы не сгорел светодиод. Конечно сопротивление порта может на себя перетянуть ток, но можно еще до кучи спалить и порт. Так что лучше поставить резюк. Ну со схемой все впоряде, давайте теперь программить.

Как я уже говорил, что рассматривать будем все подробно. Поехали. Для того чтобы начать писать программу нам необходимо создать новый проект. Делается это так. File->Newи перед нами появляется окошко.

И так продолжим наш рассказ про МК. Сегодня начнем изучать программу CodeVisionAVR. Данная программа является хорошим компилятором. а так же легко прошивает МК. - student2.ru

Выбираем Projectи давим ОК. И смотрим на новое появившееся окошко.

И так продолжим наш рассказ про МК. Сегодня начнем изучать программу CodeVisionAVR. Данная программа является хорошим компилятором. а так же легко прошивает МК. - student2.ru

Здесь написано о том что Вы создали новый проект и программа спрашивает: создать проект с помощью генератора CodeWizardAVR? Если нажать нет, то созданный проект будет с чистого листа, а вот если нажать да... Мы естественно давим ДА.И перед нами появится вот такое окно.

И так продолжим наш рассказ про МК. Сегодня начнем изучать программу CodeVisionAVR. Данная программа является хорошим компилятором. а так же легко прошивает МК. - student2.ru

Все сразу рассматривать не будем. Давайте пока только по нашему проекту. Первое что нужно это выбрать наш МК из списка и выставить частоту кварца во вкладке Chip.

И так продолжим наш рассказ про МК. Сегодня начнем изучать программу CodeVisionAVR. Данная программа является хорошим компилятором. а так же легко прошивает МК. - student2.ru

Теперь поговорим немного о портах. У МК AVR перед работой с портами требуется их настройка. А именно объяснить МК какой порт будет работать на вход, а какой на выход. Для этих целей у МК есть регистр под названием DDRx где х имя порта. Если в какой-то бит этого порта записать 1, то соответствующий вывод порта будет работать как выход. А если 0, то как вход. Например нам нужно чтобы наш вывод под названием PB0 работал как выход, ведь на него мы будем выводить 0 и 1, то нам нужно в регисть DDRBзаписать значение 0х01 0х - это указатель того, что число после него записано в шеснадцатиричном формате. Если тяжело с шеснадцатеричным форматом, то можно написать его эквивалент в бинаре, а именно так 0b00000001. 0b - это указатель того, что число после него записано в бинаре(двоичном формате). Как видно 0-й бит (биты в байтах считаются от 0 до 7 справа налево) выставлен в 1, а остальные в 0. Поэтому PB0 будет работать как выход, а остальные выводы как вход. Чтобы настроить порт, мы просто открываем вкладку в конфигураторе с названием Ports.

И так продолжим наш рассказ про МК. Сегодня начнем изучать программу CodeVisionAVR. Данная программа является хорошим компилятором. а так же легко прошивает МК. - student2.ru

Выбираем порт В нажимаем напротив Bit 0 кнопку In пока не появится Out(выход). В колонке напротив выставляется значение бита 0 или 1 которое будет выведено по умолчанию. То есть после начала выполнения программы, при настройке порта на выход, будет сразу же выведено значение по умолчанию. Мы поставили 1 значит при старте программы после настройки порта на выход на выводе PB0будет логическая единица, то есть +5в и наш светодиод загорится. Теперь нам надо сохранить проект и сгенерировать начальный код. Для этого жмем на иконку дискетки в конфигураторе кода.

И так продолжим наш рассказ про МК. Сегодня начнем изучать программу CodeVisionAVR. Данная программа является хорошим компилятором. а так же легко прошивает МК. - student2.ru

Даем имя например led и жмем Сохранить.Затем нажимаем на иконку Шестеренка и даем такое же имя.

И так продолжим наш рассказ про МК. Сегодня начнем изучать программу CodeVisionAVR. Данная программа является хорошим компилятором. а так же легко прошивает МК. - student2.ru

Жмем Сохранить, появится еще раз окно, запишем еще раз тоже имя и снова Сохранить.После этого программа сохранит проект и создаст начальный код. Весь код сразу рассматривать не будем, а лишь отведем время двум моментам. Первый это самое начало кода который расположен в блоке обрамленным знаками /* и */. Эти знаки означают многострочный комментарий. Все что написано между ними компилятор игнорирует. Все комментарии программа выделяет синим цветом для упрощения чтения кода. Так вот в этом блоке расположено описание МК, частоты кварца, величину стека и еще чего-то. В общем информацию о проекте. Второй момент это наш регистр настройки порта.

И так продолжим наш рассказ про МК. Сегодня начнем изучать программу CodeVisionAVR. Данная программа является хорошим компилятором. а так же легко прошивает МК. - student2.ru

Как мы видим конфигуратор нам все настроил как надо. DDRB=0x01; PORTB=0x01;что тут к чему. Для того чтобы записать в регистр значение нам нужно написать DDRB=0x01; DDRB-это название регистра. Знак равенства это оператор присвоения. 0х01 - это значение которое мы присваиваем DDRB. А чтобы компилятор понял что выражение закончено мы должны в конце поставить точку с запятой. Короче мы регистру DDRB присвоили значение 0х01. PORTB=0x01;тут Вы должны сами догадаться что к чему.PORTB- это выходной регистр порта В. Все что в него запишем будет выведено непосредственно на выводы порта В МК. Помните при настройке мы сказали чтоб по умолчанию МК вывел на выводе РВ0значение 1? Вот он это и сделал. Ну вроде все настроили, теперь давайте писать основную программу. Задача: моргать светодиодом с интервалом в 1 секунду. Сказано сделано. Начнем с 1 секунды. Можно воспользоваться прерыванием таймера счетчика, но так как мы начинаем с нуля, то давайте воспользуемся библиотекой. Что это такое. Авторы данного компилятора написали за нас набор библиотек. Это нужно чтобы нам облегчить жизнь. К нашим баранам. Зачем нам сочинять свои временные задержки? Так как ими часто пользуются, то разработчики учли это и сделали все за нас. Нам остается только подключить нужную библиотеку и пользоваться ей как нашей душе угодно. Вот мы это сейчас и сделаем. Для этого в языке С есть такая запись: #include<delay.h>Эта фраза означает что мы хотим подключить файл с названием delay.hк нашей программе. Если Вы заметили, то файл имеет только имя и расширение, а полный адрес не написан. Это не ошибка, так как #includeесли не видит полного адреса, то ломится в папку по умолчанию, а находится она C:\cvavr\incесли конечно Вы не изменили директорию установки при инсталяции программы. Что значит подключить файл к нашей программе? А значит что код написанный в этом файле при компиляции будет записан на место #include<delay.h>.То есть тот код что писали разработчики программы нам стал доступен. Давайте теперь запишем эту строчку после строчки#include<mega8.h>.

И так продолжим наш рассказ про МК. Сегодня начнем изучать программу CodeVisionAVR. Данная программа является хорошим компилятором. а так же легко прошивает МК. - student2.ru

Теперь нам доступны временные задержки. Спускаемся в самый низ к циклу while.И напишем тело нашей программы.

И так продолжим наш рассказ про МК. Сегодня начнем изучать программу CodeVisionAVR. Данная программа является хорошим компилятором. а так же легко прошивает МК. - student2.ru

Давайте разберем ее по строкам.

1. while(1) { } - это цикл с предусловием. Это значит что пока в скобках значение истинно(больше нуля или true(истина)), то цикл будет выполнять команды записанные в фигурные скобки. Как только значение сменится на не истину(меньше или равно нулю либо false(лож)), то цикл прекращает выполняться и передает выполнение следующему оператору идущему за ним. У нас значение всегда 1, значит всегда истина. Поэтому цикл будет выполнятся бесконечно. Для изменение значения цикла пользуются либо каким-то выражением, либо переменной. Об этом мы поговорим позже.

2. PORTB.0=0; - это выражение нам уже знакомо за некоторыми но. После названия регистра вывода порта, стоит точка и ноль. Это означает что мы хотим выполнить вывод значения не всего байта(8бит), а только одного бита. А именно нулевого бита порта "В". То есть ври выполнении этого выражения на выходе РВ0 появится логический 0 и светодиод погаснет.

3. delay_ms(1000); Это наша подключенная библиотека. Тут все просто. Мы вызываем функцию задержки. Имя функции delay_ms ms в имени функции означает что аргумент будет задан в миллисекундах. Аргумент функции задается в скобках сразу после имени функции. О функциях мы поговорим позже. Так как в 1 с содержится 1000 мс, то мы так и написали.

4. PORTB.0=1; подождав секунду зажигаем светодиод.

5. delay_ms(1000); ждем секунду.

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

Теперь осталось за малым. Скомпилить и залить. Скомпилить просто, жмем на значек с квадратиками справа)

И так продолжим наш рассказ про МК. Сегодня начнем изучать программу CodeVisionAVR. Данная программа является хорошим компилятором. а так же легко прошивает МК. - student2.ru

Ну вот и все. Ошибок нет. Программа занимает Program size: 101 words (202 bytes), 2,5% of FLASH.Ошибок нетNo errors.

И так продолжим наш рассказ про МК. Сегодня начнем изучать программу CodeVisionAVR. Данная программа является хорошим компилятором. а так же легко прошивает МК. - student2.ru

Ну вот и все. В следующей статье мы уже будем заливать все это в МК и радостно наблюдать за миганием светодиода.

Наши рекомендации