- •Методические указания
- •Лабораторная работа № 1 Изучение аппаратных средств и структурной организации микроконтроллеров семейства avr aTmega, на примере avr aTmega 8515.
- •Лабораторная работа № 2 Изучение основ языка Си для микроконтроллеров семейства avr Atmega.
- •Лабораторный стенд для изучения работы микроконтроллеров.
Лабораторная работа № 2 Изучение основ языка Си для микроконтроллеров семейства avr Atmega.
Цель работы: изучить основы языка Си для микроконтроллера AVR Atmega8515 на примере создания проекта в программе CodeVision AVR Evaluation V2.05.4.
Научиться производить запись программы в микроконтроллер по средствам LPT программатора.
Ход работы
Для начала работы необходимо произвести запуск программы CodeVisionAVR, для чего производим активацию ярлыка программы. Для создания проекта необходимо следующую последовательность действий:
В меню «File» выбираем пункт «New».
В появившемся окне «Create New File» активируем кнопку «Project» и нажимаем «Ok».
В следующем окне «Confirm» выбираем «No», программа предлагает запустить автоматический генератор кодa.
В папке «Студент» создаем файл с именем «изучение Atmega8515U» и нажимаем «Сохранить»
Во всплывшем окне «Configure Project» переходим на вкладку «С Compiler»
В выпадающем списке «Cheap» выбираем нужный нам тип чипа, а именно Atmega8515.
В пункте «Clock:» устанавливаем частоту 1,000000 MHz.
Остальные пункты оставляем без изменений и нажимаем «ОК».
Далее создаем текстовый файл, в котором и будет производиться написание программы, для этого в меню File выбираем пункт «New».
В появившемся окне «Create New File» активируем кнопку «Source» и нажимаем «ОК».
Затем сохраняем созданный файл в туже папку, в которой находится проект, для чего в меню File выбираем пункт «Save As...»
И сохраняем его под тем же именем, что и проект «изучение Atmega8515» и нажимаем «Сохранить».
Далее подключаем созданный файл к нашему проекту, для этого в меню «Project», выбираем пункт «Configure»
В появившемся окне нажимаем кнопку «Add» и выбираем в папке проекта файл с расширением *.с и именем, которое мы ему дали ранее, нажимаем «ОК».
Проект создан, теперь можно перейти к написанию программы.
Написание программы на языке Си, для микроконтроллера Атmega8515.
Ниже приведен текст программы:
// управление микроконтроллером
#include <mega8515.h> // информация для компиляции
#include <delay.h> // подключение оператора «delay»
void main (void) //основная функция
{
DDRA – 0b11111111; // порт А настроен на вывод информации
DDRC – 0b11111111; // порт С настроен на вывод информации
DDRD – 0b00000000; // порт D настроен на ввод информации DDRB – 0b00000000; // порт B настроен на вывод информации DDRE = 0b111; // порт Е настроен на вывод информации
while (1==1); // оператор цикла
{ if (PIND ==0b00000001) есть ли 1 на D0?, если есть то выполнить условие в скобках }}
{PORTA = 0b00101000; //1 на индикатор }
if (PIND == 0b00000010); // есть ли 1 на D1?
{РORTA = 0b11001101; //2 на индикатор }
if (PIND = 0b00000100) // есть ли 1 на D2?
{PORTA = 0b01101101; //3 на индикатор }
if(PIND==0b00001000)// есть ли 1 на D3?
(PORTA = 0b00101011; //4 на индикатор }
if(PIND — 0b00010000)// есть ли 1 на D4?
{ PORTA = 0b01101111;// вывести цифру 9 на индикатор
delay_ms (900); //выполнять 900 мили секунд
PORTA = 0b11101111; //8
delay_ms (900);
PORTA = 0b00101100; //7
delay_ms (900);
PORTA = 0b11100111; //6
delay_ms (900);
PORTA = 0b01100111; //5
delay_ms (900); PORTA = 0b00101011; //4
delay_ms (900);
PORTA = 0b01101101; //3
delay_ms (900);
PORTA = 0b11001101; //2
delay_ms (900);
PORTA = 0b00101000; //1
delay_ms (900);
PORTA = 0b11101110; //0
delay_ms (900);
PORTA = 0b00000000 ; //индикатор выключен }
if (PIND == 0b00100000)
{PORTE = 0b001 ; // включить звуковой сигнал
delay_ms (900); / выполнить 900 милисекунд
РORTE = 0b000; } // выключить порт E
if (PIND = 0b01000000)
{ PORTC = 0b00000001;
delay_ms (400);
PORTC = 0b00000010;
delay_ms (200);
PORTC = 0b00000100;
delay_ms (200);
PORTC = 0b00001000;
delay_ms (200);
PORTC = 0b00010000;
delay_ms (200);
PORTC = 0b00100000;
delay_ms (200);
PORTC = 0b01000000;
delay_ms (200); PORTC = 0b10000000;
delay_ms (200);
PORTC = 0b0000000; //порт С выключен
PORTE = 0b100;
delay_ms (200);
PORTE = b010;
delay_ms (200);
PORTE = 0b000; //порт E выключен
else
{PORTA = 0b00010000; //.};
} // конец цикла «whiles»
} //конец основной функции
Краткое описание программы.
Написание программы начинается с ее описания, например:
//управление микроконтроллером
Далее идут строки необходимые для нормальной работы компилятора:
#include <mega8515.h> // системная информация для корректной прошивки чипа;
#include <delay.h> // подключение функции необходимой для работы цикла;
Затем следует описание основной функции, для этого пишем:
void main (void) //основная функция
{
Все переменные функции описываются в фигурных скобках, для правильной работы программы необходимо, что бы было равное количество открытых и закрытых скобок.
Далее проводим настройку портов на ввод и вывод, так 1 в адресе вывода означает, что он настроен на вывод информации, 0 показывает, что настроен на ввод информации, надпись 0b показывает, что адрес порта записан в двоичной системе счисления:
DDRA = 0b1111111; // порт А настроен на ВЫВОД информации
DDRC = 0b1111111; // порт С настроен на вывод информации
DDRD = 0b00000000; // порт D настроен на ввод информации
DDRB = 0b00000000; // порт В настроен на ввод информации
DDRE = 0b111; // порт Е настроен на вывод информации
Каждый из выводов порта можно настроить как на ввод, так и на вывод, рассмотрим это на примере порта Е:
Строка DDRE = 0b111; показывает, что выводы Е0, Е1, Е2, настроены на вывод, а строка:
DDRE = 0b100; будет означать, что вывод E2, настроены на вывод информации, а Е0 и El на ввод, так же можно настроить любой из регистров ввода-вывода.
Затем вводим оператор цикла «while», который позволяет обрабатывать состояния портов.
While (1==1) // оператор цикла
Далее будим выполнять проверку состояния портов, для этого вводим оператор «if», проверим наличие единицы, если есть, то выполнить условие в скобках {}
{ if (PIND == 0b00000001) // есть ли 1 на DO?, если есть, то выполнить условие в скобках {}.
{PORTA = 0b00101000; //1}
Так же прописываются и следующие запросы наличия сигнала на входах портов D.
Оператор «delay_ms ();», позволяет выводить сигнал на выводы портов заданное количество времени, указанное в миллисекундах, в круглых скобках, например:
PORTE = 0b001 ; // подать сигнал на Е0
delay_ms (900); // выполнять 900 мили секунд
PORTE = 0b000; // отключить порт Е
Так же подключаем оператор «else», который будит выводить точку на семи сегментный индикатор, если не выполнено не одного из условий функций «if».
Else
{PORTA = 0b00010000; //.}:
Следует особо отметить, что например команда «PORTA = 0b00000001 ;», служит для вывода сигнала на 0 выход порта А, так же по аналогии для всех остальных портов.
Завершая написание программы необходимо убедиться в том, чтобы совпало количество открытых и закрытых фигурных скобок.
Далее следует произвести компиляцию написанной программы, для чего в меню «Project» выбираем пункт «Build All»
После чего в появившемся окне «Information» изучаем информацию о свободном месте и нажимаем «ОК».
В случае если в окне сообщений в низу окна программы появилось сообщение об ошибке, надо будет произвести ее исправление и повторить компиляцию.
После написания текста программы и ее компиляции необходимо произвести сохранение проекта, для чего в меню «File» выбираем пункт «Save».
Работа с программатором.
В начале работы с программатором необходимо произвести указание его типа в программе, для чего в меню «Settings» выбираем пункт «Programmer»
Далее в появившемся окне «Programmer Settings» выбираем в выпадающем списке «Kanda Systems STK200+/300», который соответствует нашему программатору, и нажимаем «ОК».
Далее ПОД РУКОВОДСТВОМ ПРЕПОДАВАТЕЛЯ, производим подключение лабораторного стенда:
Переводим
все переключатели в положение ○
(
Рис. 1
Затем подключаем разъем типа cetronic от компьютера
программатора
Рис. 2
Рис.3
А потом разъем питания.
Рис. 4
Затем производим поочередное переведение выключателей в положение (включено): начинаем с левого (черного выключателя), последним включаем питание (выключатель, находящейся с правой стороны стенда).
После чего в меню «Tools» выбираем пуню «Chip Programmer»
Далее в появившемся окне «CodeVisionAVR Chip Programmer» нажимаем меню «Program» выбираем пункт «Erase Chip», что соответствует команде очистки памяти микроконтроллера, затем в том же меню выбираем команду «FLASH» и ждем, пока произойдет запись программы.
Далее производим отключение переключателей в обратном порядке.
Затем производим включение питания и производим тестирование программы на стенде.