Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
434.doc
Скачиваний:
5
Добавлен:
30.04.2022
Размер:
4.99 Mб
Скачать

Лабораторная работа № 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», который соответствует нашему программатору, и нажимаем «ОК».

Далее ПОД РУКОВОДСТВОМ ПРЕПОДАВАТЕЛЯ, производим подключение лабораторного стенда:

Переводим все переключатели в положение ○ (32ыклюючено, как показано на рисунке)

Рис. 1

Затем подключаем разъем типа cetronic от компьютера

программатора

Рис. 2

Рис.3

А потом разъем питания.

Рис. 4

Затем производим поочередное переведение выключателей в положение (включено): начинаем с левого (черного выключателя), последним включаем питание (выключатель, находящейся с правой стороны стенда).

После чего в меню «Tools» выбираем пуню «Chip Programmer»

Далее в появившемся окне «CodeVisionAVR Chip Programmer» нажимаем меню «Program» выбираем пункт «Erase Chip», что соответствует команде очистки памяти микроконтроллера, затем в том же меню выбираем команду «FLASH» и ждем, пока произойдет запись программы.

Далее производим отключение переключателей в обратном порядке.

Затем производим включение питания и производим тестирование программы на стенде.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]