Разработка алгоритма управляющей программы

Рис 2а. Алгоритм основной программы

Рис 2б. Алгоритм подпрограммы прерывания

Рис 2в. Алгоритм подпрограммы задержки
Текст программы на ассемблере
.INCLUDE "8515def.inc" ; Подключение файла с описанием ; символических имен
;
;**********Задание символических имен***********************************
;
.def temp = r16 ; назначение регистру r16 ; символического имени temp
.def temp1 = r17 ; назначение регистру r17 ; символического имени temp1
.def temp2 = r18 ; назначение регистру r18 ; символического имени temp2
;
;**********Программа**************************************************
;
.CSEG ; определения начала сегмента, где будет ; расположен основной код программы.
.ORG $0 ; перезагрузка микроконтроллера при rjmp init ; нажатии кнопки RESET
rjmp EXT_INT0 ; обработка прерывания по входу INT_0
EXT_INT0: ; п/п обработки прерывания
sbic PinA, 4 ; опрос кнопки Старт
rjmp m1 ; переход если не нажата
set ; установка признака нажатия кн. Старт
reti ; возврат из п/п
m1: sbis PinB, 0 ; опрос кнопки Стоп
clt ; сброс признака нажатия н. Старт
reti ; возврат из п/п
delay5ms: ; п/п формирования задержки в 16 мс
ldi temp1, 251 ; загрузить число 251 в регистр temp1
d1: ldi temp, 25 ; загрузить число 84 в регистр temp
d2: dec temp ; уменьшить содержимое регистра на 1
brne d2 ; проверка содержимого регистра на ; равенство 0
dec temp1 ; уменьшить содержимое регистра на 1
brne d1 ; проверка содержимого регистра на ; равенство 0
ret ; возврат из подпрограммы
;
;**********Инициализация МК и настройка портов**************************
;
init:
ldi temp, low(RAMEND) ; инициализация указателя стека в конце out spl, temp ; внутреннего ОЗУ
ldi temp, high(RAMEND) ;
out sph, temp ;
sbi DDRA, 2 ; настройка 2 бита порта A на вывод ; данных
sbi DDRC, 0 ; настройка 0 бита порта C на вывод ; данных
cbi DDRD, 2 ; настройка входного прерывания
ldi temp, 222 ; настройка 0 бита порта B и 4 бита A
out DDRB, temp ; на ввод данных
;
;**********Инициализация прерывания по входу INT_0**********************
;
sbr temp1, 64 ; установка 6 бита регистра temp
out GIMSK, temp1 ; разрешение прерывания по входу INT0
sbr temp1, 4 ; установка 2 бита регистра temp
out MCUCR, temp1 ; инициализация прерываний по ; спадающему фронту сигнала
sei ; общее разрешение прерываний
;
;*********Основная программа*******************************************
;
main1:
sbis pinA, 4 ; проверка установки признака нажатия ; кнопки Старт
rjmp main2 ;
cbi PortA, 2 ; включить светодиод 1
sbi PortC, 0 ; выключить светодиод 2
rcall delay5ms ; вызов задержки в 5 мс
sbi PortA, 2 ; выключить светодиод 1
cbi PortC, 0 ; включить светодиод 2
rcall delay5ms ; вызов задержки в 5 мс
rjmp main1
main2:
sbi PortA, 2 ; выключить оба
sbi PortC, 0 ; светодиода
rjmp main1
;
