- •Додаток 1. Приклади ррозв’язання задач мовою avr Assembler
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
Блок-схема
10). Розробити програму двійкового лічильника імпульсів з k=12. Кількість імпульсів відображати в двійковому коді світлодіодами, що приєднані до розрядів b0b3 порту В.
.device at90s1200
.include "1200def.inc"
ser r16 ;усі біти регістра R16 встановлюються в одиницю
out ddrb,r16 ;настроювання порту В на вивід
main:
clr r17 ;очищення регістра R17
out portb,r17 ;вивід значення регістра R17 на порт В
rcall Delay ;виклик підпрограми Delay
loop:
inc r17 ;інкремент регістра R17
out portb,r17 ;вивід значення регістра R17 на порт В
rcall Delay ;виклик підпрограми Delay
cpi r17,11 ;порівняння регістра R17 з 11
breq main ;якщо R17=11, то програма переходить на мітку main
rjmp loop ;перехід на мітку loop
Delay: ;підпрограма затримки імпульсу на 1 секунду
clr r19 ;очищення регістра R19
clr r21 ;очищення регістра R21
clr r20 ;очищення регістра R20
m1:
inc r19 ;інкремент регістра R19
cpi r19,255 ;порівняння регістра R19 з 255
brne m1 ;якщо R19255, то програма переходить на мітку m1
inc r20 ;інкремент регістра R20
cpi r20,255 ;порівняння регістра R20 з 255
brne m1 ;якщо R20255, то програма переходить на мітку m1
inc r21 ;інкремент регістра R21
cpi r21,16 ;порівняння регістра R21 з 16
brne m1 ;якщо R2116, то програма переходить на мітку m1
ret ;вихід із підпрограми затримки
Блок-схема
Підпрограма затримки Delay
11). Розробити програму, що виводить одиничний імпульс на b0 порту В при натисканні кнопки і затримує його значення протягом 10 секунд.
.device at90s1200
.include "1200def.inc"
ser r16 ;усі біти регістра R16 встановлюються в одиницю
out ddrb,r16 ;настроювання порту В на вивід
loop:
clr r18 ;очищення регістра R18
out portb,r18 ;вивід значення регістра R18 на порт В
sbis pind,0 ;якщо нульовий біт порту D дорівнює 1, то програма
;пропускає наступну команду
rjmp loop ;перехід на початок програми (мітку loop)
ldi r18,1 ;присвоїти регістру R18 константу 1
out portb,r18 ;вивід значення регістра R18 на порт В
rcall Delay ;виклик підпрограми
rjmp loop ;перехід на початок програми (мітку loop)
Delay: ;підпрограма затримки на 10 секунд
clr r19 ;очищення регістра R19
clr r21 ;очищення регістра R21
clr r20 ;очищення регістра R20
n1:
inc r19 ;інкремент (+1) регістра R19
cpi r19,255 ;порівняння регістра R19 з 255
brne n1 ;якщо R19¹255, то програма переходить на мітку n1
inc r20 ;інкремент (+1) регістра R20
cpi r20,255 ;порівняння регістра R20 з 255
brne n1 ;якщо R20¹255, то програма переходить на мітку n1
inc r21 ;інкремент (+1) регістра R21
cpi r21,160 ;порівняння регістра R21 з 160
brne n1 ;якщо R21¹160, то програма переходить на мітку n1
ret ;вихід із підпрограми затримки