4. Розробка програми на мові програмування C
Для розробки програми на С використаємо IDE CodeVisionAVR.
CodeVisionAVR - інтегроване середовище розробки програмного забезпечення для мікроконтролерів сімейства Atmel AVR [18].
CodeVisionAVR включає в себе наступні компоненти:
· компілятор С - подібного мови для AVR;
· компілятор мови асемблер для AVR;
· генератор початкового коду програми, що дозволяє зробити ініціалізацію периферійних пристроїв;
· модуль взаємодії з отладочной платою STK - 500;
· модуль взаємодії з програматором;
· редактор вихідного коду з підсвічуванням синтаксису;
· термінал.
Вихідними файлами CodeVisionAVR є:
· HEX, BIN або ROM- файл для завантаження в мікроконтролер допомогою програматора;
· COFF - файл, що містить інформацію для відладчика;
· OBJ - файл, в якому зберігається проміжний код компіляції, так званий обєктний код;
CodeVisionAVR є комерційним програмним забезпеченням. Існує безкоштовна ознайомча версія з обмеженням ряду можливостей, зокрема, розмір програмного коду обмежений 4-ма кілобайтами і не включений ряд бібліотек.
Компілятор С, що входить до складу CodeVisionAVR, має деякі відмінності від AVR- GCC (WinAVR), у тому числі власний синтаксис, набір підтримуваних серій мікроконтролерів (останні версії підтримують в тому числі серію ATXMega), а також генерує відрізняється за швидкодією вихідний код.
Згідно розробленого алгоритму, було розроблено на мові С програму мікропроцесорного пристрою світлової індикації, повний варіант якої представлений в додатку Б.
Рисунок 4.1 - Вид вікна під час створення проекту
Для розробки програми на мові С скористаємося середовищем
CodeVisionAVR. Для початку створимо проект, в якому напишемо програму: запускаємо CodeVisionAVR > на панелі "меню" вибираємо вкладку "File" > "New" > ставимо галочку навпроти "Project" > "Ok" > "Yes" > вибираємо вкладку "Project information" > в полі "Project name" записуємо назву свого проекту та копіюємо її, вибираємо вкладку "File" > "Save" > вставляємо назву, вибираємо папку створення та зберігання проекту > "Ok" > знову вибираємо вкладку "File" > вибираємо "Generate, Save and Exit" > вставляємо скопійовану назву проекта в кожному вікні у відповідну стрічку та тиснемо "Сохранить"(рис. 4.1).
Тепер можна написати саму програму, завдяки створеному шаблону це буде набагато простіше та швидше ніж в AVR Studio Assembler.
#include <90s2313.h> #include <delay.h>
Програма void vuvod забезпечує вивдененя буферної змінної на порт. void main(void)
Головний цикл: while (1)
{
Спочатку виконується режим 1
delay_ms(100);
PORTB=0b11111111;
delay_ms(100);
PORTB=0b00000000;
Цикл, який перевіряє чи нажата кнопка 1 і чи нажата кнопка 2, якщо так, то відбувається одна із програм в циклі, режим 2 чи режим 3
if (PIND.0==1)
if (PIND.1==1)
Цикл, який перевіряє чи не нажата кнопка 1. Якщо кнопка нажата, то тіло циклу не виконується.
while(PIND.0==0)
Цикл, який перевіряє чи не нажата кнопка 1. Якщо кнопка нажата, то тіло циклу не виконується.
while(PIND.1==0)
Режим 2, який виводиться на світлові діоди.
PORTB=0b01111111;
if (zatr_perev_kn() == 1)goto label1;
else if (zatr_perev_kn() == 2)goto label2;
PORTB=0b00111111
if (zatr_perev_kn() == 1)goto label1;
else if (zatr_perev_kn() == 2) goto label2;
PORTB=0b00011111;
if (zatr_perev_kn() == 1)goto label1;
else if (zatr_perev_kn() == 2)goto label2;
PORTB=0b00001111;
if (zatr_perev_kn() == 1)goto label1;
else if (zatr_perev_kn() == 2)goto label2;
PORTB=0b00000111;
if (zatr_perev_kn() == 1)goto label1;
else if (zatr_perev_kn() == 2)goto label2;
PORTB=0b00000011;
if (zatr_perev_kn() == 1)goto label1;
else if (zatr_perev_kn() == 2)goto label2;
PORTB=0b00000001;
if (zatr_perev_kn() == 1)goto label1;
else if (zatr_perev_kn() == 2)goto label2;
PORTB=0b00000000;
if (zatr_perev_kn() == 1)goto label1;
else if (zatr_perev_kn() == 2)goto label2;
Режим 3, який виводиться на світлові діоди.
PORTB=0b01111110;
if (zatr_perev_kn() == 1)goto label1;
else if (zatr_perev_kn() == 2)goto label2;
PORTB=0b00111100;
if (zatr_perev_kn() == 1)goto label1;
else if (zatr_perev_kn() == 2)goto label2;
PORTB=0b00011000;
if (zatr_perev_kn() == 1)goto label1;
else if (zatr_perev_kn() == 2)goto label2;
PORTB=0b00000000;
if (zatr_perev_kn() == 1)goto label1;
else if (zatr_perev_kn() == 2)goto label2;
PORTB=0b00011000;
if (zatr_perev_kn() == 1)goto label1;
else if (zatr_perev_kn() == 2)goto label2;
PORTB=0b00111100;
if (zatr_perev_kn() == 1)goto label1;
else if (zatr_perev_kn() == 2)goto label2;
PORTB=0b01111110;
if (zatr_perev_kn() == 1)goto label1;
else if (zatr_perev_kn() == 2)goto label2;
PORTB=0b11111111;
if (zatr_perev_kn() == 1)goto label1;
else if (zatr_perev_kn() == 2)goto label2;
Первірка кнопок і затримка реалізовуеться за допомогою
if (zatr_perev_kn() == 1)goto label1;
else if (zatr_perev_kn() == 2)goto label2;
int zatr_perev_kn()
{
int count;
for(count=0; count<100; count++)
{
delay_ms(10);
if(PIND.0 == 1) return 1;
else if(PIND.1 == 1) return 2;
else return 0;
}
- 1. Будова мікроконтролера ATMEGA8, огляд алгоритмів, схемних та програмних рішень поставленої задачі
- 1.1 Огляд схемних рішень світлової сигнальної індикації
- 1.2 Будова вибраного мікроконтролера
- 2. Розробка схем структурної, принципової та алгоритму роботи програми
- 3. Розробка програми на мові програмування ASSEMBLER
- 4. Розробка програми на мові програмування C
- 5. Моделювання в PROTEUS VSM
- Висновки