3. Розробка програми на мові програмування ASSEMBLER
Згідно розробленого алгоритму, було розроблено програму мікропроцесорного пристрою світлової індикації, повний варіант якої представлений в додатку А.
Для розробки програми на мові Assembler скористаємося середовищем AVR Studio 4, так як програмувати будемо мікроконтролер серії AVR ATmega8. Для початку створимо проект, в якому напишемо програму. Для цього: запускаємо AVR Studio 4 > вибираємо New project (рис 3.1) > вибираємо Atmel AVR Assembler (рис 3.2) > записуємо у відповідних полях імя проекту та місце розташування > натискаємо кнопку "Next" > вибираємо необхідний мікроконтролер та натискаємо кнопку "Finish"(рис. 3.2)
Рисунок 3.1 - Створення проекту в AVR Studio
Рисунок 3.2 - Вибір типу проекту
Рисунок 3.3 - Вибір типу мікроконтролера
Після закінчення створення проекту зявиться файл проекту (рис. 3.4),
в якому буде записана програма. Почнемо програму із запуску бібліотеки мікроконтролера та ініціалізації портів для кнопок(вводу) та світлодіодів(виводу). На порту D будуть кнопки, а на порту В світлодіоди.
Рисунок 3.4 - Файл тексту програми
Крім того на рис. 3.5 представлено емулятор периурії вибраного та вказаного при створення проекту мікроконтролера. Даний емулятор буже зручно використовувати при програмування та відладці роботи мікроконтролера.
Рисунок 3.2 - Вибір мікроконтролера для його програмування
За допомогою директиви ".include "…"" відкриваємо бібліотеку програмуємого мікроконтролера, команда "ser" встановлює одиниці всіх бітів регістра, а команда "clr" їх очищує [11-17]. Команда "out" задає
значення регістра в вибраний регістр, в даній ситуації в регістри: PORT(дані порта); DDR(стан порта); PIN(стан виводів).
Через досить часте використання регістрів, присвоїмо їм назви для зручності. Нам необхідно буде 3 регістри: для виводу значень в порт В, для зміщення "1" в необхідний біт.
Підключення заголовного файлу з описом регістрів, констант тощо:
include "m8mega.inc"
Приведений фрагмент програми відповідає за призначення імен регістрів.
def temp = r16
Фрагмент програми, який відповідає за ініціалізацію стека представлений нижче.
ldi r31,low(ramend) out spl,r31
Налаштування портів вводу виводу забезпечується наступним чином:
ldi temp, 0x00
out DDRD, temp ldi temp, 0xff out DDRB, temp out PortD, temp
Перед початком роботи всі світло діоди вмикаються та після затримки гаснуть. Це реалізується фрагментом програми, який представлений нижче.
ldi r16,0b11111111
out portb,r16
rcall fff
ldi r16,0b00000000
out portb,r16
Фрагмент програми, який відповідає за перевірку стану кнопки наведений нижче. Считуєм і перевіряєм нульовий розряд, якщо кнопка не натиснута, то програма буде зациклена в даному фрагменті і очікувати зміни положення кнопки. Після нажмання кнопки в PIND буде "0", після чого відбувається перехід на програму індикації.
kn1:
ldi r16,0b00000000
out portb,r16
in r17,pind
sbrc r17,0
Програма індикації "режим 2 " в послідовності вимкнення світлодіодів VD0, VD7, VD1, VD6, VD2, VD5, VD3, VD4.
ind1:
ldi r18,0b10000000
out portb,r18
rcall fff
ldi r18,0b00000001
out portb,r18
rcall fff
ldi r18,0b01000000
out portb,r18
rcall fff
ldi r18,0b00000010
out portb,r18
rcall fff
ldi r18,0b00100000
out portb,r18
rcall fff
ldi r18,0b00000100
out portb,r18
rcall fff
ldi r18,0b00010000
out portb,r18
rcall fff
ldi r18,0b0001000
out portb,r18
rcall fff
rjmp loop
Програма індикації "режим 3" в послідовності вимкнення світлодіодів VD0, VD4, VD3, VD5, VD2, VD6, VD1, VD7, VD0.
ldi r18,0b0001000
out portb,r18
rcall fff
ldi r18, 0b00010000
out portb,r18
rcall fff
ldi r18, 0b00000100
out portb,r18
rcall fff
ldi r18, 0b00100000
out portb,r18
rcall fff
ldi r18, 0b00000010
out portb,r18
rcall fff
ldi r18, 0b01000000
out portb,r18
rcall fff
ldi r18, 0b00000001
out portb,r18
rcall fff
ldi r18, 0b10000000
out portb,r18
rcall fff
rjmp loop
Програма перевірки та перевірки, яка перевіряє стан кнопки 1 та 2, після якої можна обновити чи перейти на інший режим без закінчення циклу включення діодів
fff:
in r17,pind
sbrc r17,0
rjmp kn1
in r17,pind
sbrc r17,1
rjmp kn2
ldi r20, 50
in r17,pind
sbrc r17,0
rjmp kn1
in r17,pind
sbrc r17,1
rjmp kn2
ldi r21, 50
in r17,pind
sbrc r17,0
rjmp kn1
in r17,pind
sbrc r17,1
rjmp kn2
- 1. Будова мікроконтролера ATMEGA8, огляд алгоритмів, схемних та програмних рішень поставленої задачі
- 1.1 Огляд схемних рішень світлової сигнальної індикації
- 1.2 Будова вибраного мікроконтролера
- 2. Розробка схем структурної, принципової та алгоритму роботи програми
- 3. Розробка програми на мові програмування ASSEMBLER
- 4. Розробка програми на мові програмування C
- 5. Моделювання в PROTEUS VSM
- Висновки