- •Додаток 1. Приклади ррозв’язання задач мовою avr Assembler
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
Блок-схема
27). Розробити програму електронного секундоміра. При натисканні на пін d0 секундомір включається і веде перерахунок до 60-ти, що відображається на світлодіодах у двійковому коді. При натисканні на пін d1 секундомір скидається.
.device at90s1200
.include "1200def.inc"
ser r16 ;усі біти регістра R16 встановлюються в одиницю
out ddrb,r16 ;настроювання порту В на вивід
start:
clr r17 ;очищення регістра R17
out portb,r17 ;вивід значення регістра R17 на порт В
rcall delay ;виклик підпрограми затримки Delay
main:
sbic pind,1 ;якщо перший біт порту D дорівнює 0, то програма
;пропускає наступну команду
rjmp start ;перехід на мітку start
sbis pind,0 ;якщо нульовий біт порту D дорівнює 1, то програма
;пропускає наступну команду
rjmp main ;перехід на мітку main
inc r17 ;інкремент регістра R17
out portb,r17 ;вивід значення регістра R17 на порт В
rcall delay ;виклик підпрограми затримки Delay
cpi r17,59 ;порівняння регістра R17 з 59
breq start ;якщо R17=59, то програма переходить на мітку start
rjmp main ;перехід на мітку main
delay: ;підпрограма затримки на 1 секунду
clr r19 ;очищення регістра R19
clr r21 ;очищення регістра R20
clr r20 ;очищення регістра R21
n1:
inc r19 ;інкремент (+1) регістра R19
cpi r19,255 ;порівняння регістра R19 з 255
brne n1 ;якщо R19255, то програма переходить на мітку n1
inc r20 ;інкремент (+1) регістра R20
cpi r20,255 ;порівняння регістра R20 з 255
brne n1 ;якщо R20255, то програма переходить на мітку n1
inc r21 ;інкремент (+1) регістра R21
cpi r21,15 ;порівняння регістра R21 з 15
brne n1 ;якщо R2115, то програма переходить на мітку n1
ret ;вихід із підпрограми затримки
Блок-схема
Підпрограма затримки Delay
28). На один із входів d0d7 щомиті подається одиничний сигнал. На світлодіодах порту B (b0b3) у двійковому коді відображати номер входу.
.device at90s1200
.include "1200def.inc"
ser r16 ;усі біти регістра R16 встановлюються в одиницю
out ddrb,r16 ;настроювання порту B на вивід
loop:
clr r17 ;очищення регістра R17
out portb,r17 ;вивід значення регістра R17 на порт B
sbis pind,0 ;якщо нульовий біт порту D дорівнює 1, то програма
;пропускає наступну команду
rjmp m1 ;перехід на мітку m1
ldi r17,1 ;присвоїти регістру R17 число 1
out portb,r17 ;вивід значення регістра R17 на порт B
rjmp loop ;перехід на мітку loop (початок програми)
m1:
sbis pind,1 ;якщо перший біт порту D дорівнює 1, то програма
;пропускає наступну команду
rjmp m2 ;перехід на мітку m2
ldi r17,2 ;присвоїти регістру R17 число 2
out portb,r17 ;вивід значення регістра R17 на порт B
rjmp loop ;перехід на мітку loop (початок програми)
m2:
sbis pind,2 ;якщо другий біт порту D дорівнює 1, то програма
;пропускає наступну команду
rjmp m3 ;перехід на мітку m3
ldi r17,3 ;присвоїти регістру R17 число 3
out portb,r17 ;вивід значення регістра R17 на порт B
rjmp loop ;перехід на мітку loop (початок програми)
m3:
sbis pind,3 ;якщо третій біт порту D дорівнює 1, то програма
;пропускає наступну команду
rjmp m4 ;перехід на мітку m4
ldi r17,4 ;присвоїти регістру R17 число 4
out portb,r17 ;вивід значення регістра R17 на порт B
rjmp loop ;перехід на мітку loop (початок програми)
m4:
sbis pind,4 ;якщо четвертий біт порту D дорівнює 1, то програма
;пропускає наступну команду
rjmp m5 ;перехід на мітку m5
ldi r17,5 ;присвоїти регістру R17 число 5
out portb,r17 ;вивід значення регістра R17 на порт B
rjmp loop ;перехід на мітку loop (початок програми)
m5:
sbis pind,5 ;якщо п'ятий біт порту В дорівнює 1, то програма
;пропускає наступну команду
rjmp m6 ;перехід на мітку m6
ldi r17,6 ;присвоїти регістру R17 число 6
out portb,r17 ;вивід значення регістра R17 на порт B
rjmp loop ;перехід на мітку loop (початок програми)
m6:
sbis pind,6 ;якщо шостий біт порту D дорівнює 1, то програма
;пропускає наступну команду
rjmp m7 ;перехід на мітку m7
ldi r17,7 ;присвоїти регістру R17 число 7
out portb,r17 ;вивід значення регістра R17 на порт B
rjmp loop ;перехід на мітку loop (початок програми)
m7:
sbis pind,7 ;якщо сьомий біт порту D дорівнює 1, то програма
;пропускає наступну команду
rjmp loop ;перехід на мітку loop (початок програми)
ldi r17,8 ;присвоїти регістру R17 число 8
out portb,r17 ;вивід значення регістра R17 на порт B
rjmp loop ;перехід на мітку loop (початок програми)