- •Додаток 1. Приклади ррозв’язання задач мовою avr Assembler
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
Блок-схема
Підпрограма затримки Delay
22). Реалізувати програму відповідно до попереднього задачі, тільки ширина імпульсу задається 4-ма молодшими розрядами порту D.
.device at90s1200
.include "1200def.inc"
ser r16 ;усі біти регістра R16 встановлюються в одиницю
out ddrb,r16 ;настроювання порту В на вивід
loop:
clr r17 ;очищення регістра R18
out portb,r17 ;вивід значення регістра R17 на порт В
sbis pind,0 ;якщо нульовий біт порту D дорівнює 1, то програма
;пропускає наступну команду
rjmp m1 ;перехід на мітку m1
ldi r17,1 ;присвоїти регістру R17 константу 1
out portb,r17 ;вивід значення регістра R17 на порт В
rcall Delay1 ;виклик підпрограми затримки на 2 секунди (Delay1)
rjmp loop ;перехід на початок програми (мітку loop)
m1:
sbis pind,1 ;якщо перший біт порту D дорівнює 1, то програма
;пропускає наступну команду
rjmp m2 ;перехід на мітку m2
ldi r17,1 ;присвоїти регістру R17 константу 1
out portb,r17 ;вивід значення регістра R17 на порт В
rcall Delay2 ;виклик підпрограми затримки на 4 секунди (Delay2)
rjmp loop ;перехід на початок програми (мітку loop)
m2:
sbis pind,2 ;якщо другий біт порту D дорівнює 1, то програма
;пропускає наступну команду
rjmp m3 ;перехід на мітку m3
ldi r17,1 ;присвоїти регістру R17 константу 1
out portb,r17 ;вивід значення регістра R17 на порт В
rcall Delay3 ;виклик підпрограми затримки на 6 секунди (Delay3)
rjmp loop ;перехід на початок програми (мітку loop)
m3:
sbis pind,3 ;якщо третій біт порту D дорівнює 1, то програма
;пропускає наступну команду
rjmp loop ;перехід на початок програми (мітку loop)
ldi r17,1 ;присвоїти регістру R17 константу 1
out portb,r17 ;вивід значення регістра R17 на порт У
rcall delay4 ;виклик підпрограми затримки на 8 секунди (Delay4)
rjmp loop ;перехід на початок програми (мітку loop)
Delay1: ;підпрограма затримки на 2 секунди
clr r19 ;очищення регістра R19
clr r21 ;очищення регістра R21
clr r20 ;очищення регістра R20
n1:
inc r19 ;інкремент регістра R19
cpi r19,255 ;порівняння регістра R19 з 255
brne n1 ;якщо R19¹255, то програма переходить на мітку n1
inc r20 ;інкремент регістра R20
cpi r20,255 ;порівняння регістра R20 з 255
brne n1 ;якщо R20¹255, то програма переходить на мітку n1
inc r21 ;інкремент регістра R21
cpi r21,32 ;порівняння регістра R21 з 32
brne n1 ;якщо R21¹32, то програма переходить на мітку n1
ret ;вихід із підпрограми затримки на 2 секунди
Delay2: ;підпрограма затримки на 4 секунди
clr r19 ;очищення регістра R19
clr r20 ;очищення регістра R20
clr r21 ;очищення регістра R21
p1:
inc r19 ;інкремент регістра R19
cpi r19,255 ;порівняння регістра R19 з 255
brne p1 ;якщо R19¹255, то програма переходить на мітку p1
inc r20 ;інкремент регістра R20
cpi r20,255 ;порівняння регістра R20 з 255
brne p1 ;якщо R20¹255, то програма переходить на мітку p1
inc r21 ;інкремент регістра R21
cpi r21,64 ;порівняння регістра R21 з 64
brne p1 ;якщо R21¹64, то програма переходить на мітку p1
ret ;вихід із підпрограми затримки на 4 секунди
Delay3: ;підпрограма затримки на 6 секунди
clr r19 ;очищення регістра R19
clr r21 ;очищення регістра R21
clr r20 ;очищення регістра R20
t1:
inc r19 ;інкремент регістра R19
cpi r19,255 ;порівняння регістра R19 з 255
brne t1 ;якщо R19¹255, то програма переходить на мітку t1
inc r20 ;інкремент регістра R20
cpi r20,255 ;порівняння регістра R20 з 255
brne t1 ;якщо R20¹255, то програма переходить на мітку t1
inc r21 ;інкремент регістра R21
cpi r21,96 ;порівняння регістра R21 з 96
brne t1 ;якщо R21¹96, то програма переходить на мітку t1
ret ;вихід із підпрограми затримки на 6 секунди
Delay4: ;підпрограма затримки на 8 секунд
clr r19 ;очищення регістра R19
clr r21 ;очищення регістра R21
clr r20 ;очищення регістра R20
w1:
inc r19 ;інкремент регістра R19
cpi r19,255 ;порівняння регістра R19 з 255
brne w1 ;якщо R19¹255, то програма переходить на мітку w1
inc r20 ;інкремент регістра R20
cpi r20,255 ;порівняння регістра R20 з 255
brne w1 ;якщо R20¹255, то програма переходить на мітку w1
inc r21 ;інкремент регістра R21
cpi r21,128 ;порівняння регістра R21 з 128
brne w1 ;якщо R21¹128, то програма переходить на мітку w1
ret ;вихід із підпрограми затримки на 8 секунд