Теоретические сведения. Работа с компилятором Code Vision AVR C Compiler вполне типична для средств разработки
Работа с компилятором Code Vision AVR C Compiler вполне типична для средств разработки. Для создания нового проекта необходимо выбрать File-New-Project и ответить Yes на вопрос о том, использовать ли CodeWizard. В результате на экране появится окошко CodeWizard-а. CodeWizard представляет собой очень удобное средство для генерации начального кода программы и предварительной настройки устройств МК – компаратора, АЦП, таймеров и др. Выберите на закладке Chip микроконтроллер Atmega8, тактовую частоту оставьте без изменений. Перейдите на закладку Ports и сконфигурируйте все ножки порта В, как высокоомные входы (In в состоянии Т), все ножки порта С – как входы с подтяжкой (In в состоянии Р), ножки 0-3 порта D – как выходы с низким уровнем, а ножки 4-7 порта D – как выходы с высоким уровнем. Перейдите на закладку External IRQ и включите прерывание 0. Перейдите на закладку Timers и включите таймер 0, выбрав частоту 500кГц. Включите прерывание по переполнению таймера. Выберите File-Generate, save and exit, выберите папку для сохранения проекта и, введя имена для сохраняемых файлов, сохраните проект. Обратите внимание, что CodeWizad можно повторно запустить, выбрать нужные настройки и не сохраняя просмотреть текст программы (File-Program preview) и скопировать интересующий участок кода. Это может оказаться полезным при отладке программы. После сохранения в окне навигатора в списке файлов проекта появится имя файла программы, а сам текст программы будет представлен в окне рабочего поля. Внимательно изучите текст программы, обращая внимание на комментарии и сравнивая установленные настройки устройств с указанными Вами в CodeWizad-е. Существенно, что для работы с каждым 8-и битным портом ввода-вывода используется 3 регистра: DDR x - регистр направления работы - вход или выход х - означает букву A, B, C, D, E... порта, по числу портов в конкретном МК. PIN х - регистр содержит значения физических (т.е. реальных) уровней сигнала на соответствующих ножках МК, которые можно измерить вольтметром и преобразовать до 1 или 0. PORT х - регистр в который записываются значения " 1" или " 0" - которые программист хочет получить на соответствующих ножках МК при назначении их выходом. Т.е. если соответствующий бит в регистре DDR x установлен (значит равен " 1"). Если бит в регистре DDR x равен " 0", а в такой же бит PORT х записана " 1" то " ножка" МК будет " входом с подтяжкой" т.е. к ней как бы подключен резистор примерно 40 кОм от питания МК. Пока программа бесполезна, она ничего, кроме конфигурации контроллера, не делает, но ее можно скомпилировать нажав кнопку - выполнить полную компиляцию проекта. После компиляции появится информационное окно, в котором будет указано, что программа уже занимает некоторое количество флэш-памяти. Загляните в папку проекта - в результате компиляции, там появилось много новых файлов, очень важные из которых: *.hex - файл-прошивка для загрузки в МК, *__.с - копия файла *.c для симуляторов и *.cof - информация связывающая содержимое файлов *__.с и *.hex. Эти три файла удобно использовать в симуляторах VMLAB, PROTEUS и в других, чтобы наблюдать движение программы прямо по коду на языке Си. Необходимым для реального МК является лишь файл прошивки - *.hex Файлы *.asm, *.lst, *.vec, *.inc содержат программу, написанную на стандартном ассемблере для AVR, с привязкой к тексту на Си. По мере написания текста программы можно выполнять проверку набранного текста нажимая кнопку , чтобы компилятор выявлял ошибки сразу и в малом количестве. В противном случае к концу написания программы может быть выдана гора сообщений об ошибках и хотя компилятор показывает место программы, где ошибка, может быть трудно вспомнить что этот участок делает и как исправить ошибку. Добавьте в тело функции main операцию с двумя не объявленными переменными: while (1) { // Place your code here t=p+2 }; Нажмите кнопку компиляции проекта. Внизу экрана в окне сообщений - Messages - появится сообщение только об одной ошибке. Сообщение содержит название файла и номер строки в которой обнаружена ошибка, а так же краткое описание ошибки. Аналогичное сообщение появилось и в окне навигатора по проекту: Если щелкнуть по сообщению, то будет подсвечена строка в тексте программы, содержащая ошибку. Прим. 1. Подробно о переменных и тапах данных вы можете прочитать в help'е компилятора - раздел Variables и Data Types. Прим. 2. Если переменная х была, например, объявлена так unsigned char х; и х имела значение 254 то после строки х = х + 3; ее значение станет 1 (десятичная единица), так как если прибавлять 3 раза по единице то значение х будет меняться так: вначале 255, затем 0, и наконец 1 Так меняются значения в регистре 8-ми битного таймера МК когда он " тикает" - т.е. считает. Итак, при " переполнении" диапазона допустимых для переменной значений происходит переход от максимального значения к минимальному и затем значение увеличивается далее. т.е. 255 затем 0 затем 1 затем 2 и так далее, по кругу. В обратную сторону - аналогично! Если в свойствах проекта не убирать галочку:
то можете писать просто: char Итак опишем переменную добавив: char t; перед главной функцией main() Обратите внимание, что переменная объявлена, как глобальная. Нажмите кнопку компиляции. Появится сообщение о том, что не описана переменная р. Опишите её, и инициализируйте - т.е. присвойте ей значение при объявлении - число 0xFE - это 16-ричное представление десятичного числа 254: char p = 0xFE, t; В одну строку можно записать объявление нескольких переменных одного типа через запятую. После последней не забудьте поставить точку с запятой. Если при объявлении глобальной переменной не присвоить ей значение, то она будет содержать 0. Теперь обе переменные, будут беззнаковыми символьными, при этом: t содержит число 0 p содержит (хранит) значение 254.
Нажмите кнопку для проверки синтаксиса. Компилятор сообщит нам о пропущенном символе; Теперь проверка программы не выдает сообщений об ошибках и можно выполнить полную компиляцию программы. Важно, что цикл while (1) { // Place your code here t=p+2; }; будет выполняться до тех пор, пока на МК будет подано напряжение питания и пока будет отсутствовать сигнал сброса reset, т.к. условие выполнения цикла всегда истинно, т.е. переменной t каждый раз при выполнении цикла будет присваиваться значение р+2. Прошивка файла с расширением hex в МК может быть осуществлена с помощью встроенного прошивальщика по нажатию кнопки . Необходимо только предварительно выбрать тип программатора Settings Programmer.
|