- •Додаток 1. Приклади ррозв’язання задач мовою avr Assembler
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
Блок-схема
Підпрограма затримки Delay
15). Розробити програму двійкового лічильника, коефіцієнт перерахування якого задається словом, що подається на порт D.
.device AT90S1200
.include "1200def.inc"
ser r16 ;усі біти регістра R16 встановлюються в одиницю
out ddrb,r16 ;настроювання порту B на вивід
loop:
in r17,pind ;ввід даних з порту D у регістр R17
cpi r17,0 ;порівняння регістра R17 з 0
breq loop ;перехід на мітку loop якщо дорівнює
clr r18 ;очищення регістра R18
out portb,r18 ;вивід значення регістра R18 на порт B
rcall delay ;виклик підпрограми затримки Delay
home:
inc r18 ;інкремент регістра R18
out portb,r18 ;вивід значення регістра R18 на порт B
rcall delay ;виклик підпрограми затримки Delay
cp r17,r18 ;порівняння значень регістрів R17 і R18
breq loop ;якщо рівні, то програма переходить на мітку loop
rjmp home ;перехід на мітку home
delay: ;підпрограма затримки
clr r19 ;очищення регістра R19
clr r21 ;очищення регістра R21
clr r20 ;очищення регістра R20
m1:
inc r19 ;інкремент регістра R19
cpi r19,255 ;порівняння регістра R19 з 255
brne m1 ;якщо R19¹255, то програма переходить на мітку m1
inc r20 ;інкремент регістра R20
cpi r20,255 ;порівняння регістра R20 з 255
brne m1 ;якщо R20¹255, то програма переходить на мітку m1
inc r21 ;інкремент регістра R21
cpi r21,3 ;порівняння регістра R21 з 3
brne m1 ;якщо R21¹3, то програма переходить на мітку m1
ret ;повернення з підпрограми затримки
Блок-схема
Підпрограма затримки Delay
16). Написати 4 прості програми. Вибір програми, що виконується, задається двома молодшими бітами порту D.
.device at90s1200
.include "1200def.inc"
ser r16 ;усі біти регістра R16 встановлюються в одиницю
out ddrb,r16 ;настроювання порту В на вивід
home:
clr r18 ;очищення регістра R18
set ;установка в одиницю біта-акумулятора Т
sbic pind,0 ;якщо нульовий біт порту D дорівнює 0, то програма
;пропускає наступну команду
bld r18,0 ;завантаження в нульовий біт регістра R18 значення
;біта-акумулятора
sbic pind,1 ;якщо перший біт порту D дорівнює 0, то програма
;пропускає наступну команду
bld r18,1 ;завантаження в перший біт регістра R18 значення
;біта-акумулятора
cpi r18,1 ;порівняння регістра R18 з 1
breq q1 ;якщо R18=1, то програма переходить на мітку q1
cpi r18,2 ;порівняння регістра R18 з 2
breq q2 ;якщо R18=2, то програма переходить на мітку q2
cpi r18,3 ;порівняння регістра R18 з 3
breq q3 ;якщо R18=3, то програма переходить на мітку q3
inc r17 ;sнкремент регістра R17
out portb,r17 ;вивід значення регістра R17 на порт В
rcall Delay ;виклик підпрограми затримки dd
rjmp home ;перехід на мітку home (початок програми)
q1:
swap r17 ;тетради регістра R17 міняються місцями
out portb,r17 ;вивід значення регістра R17 на порт В
rcall Delay ;виклик підпрограми затримки dd
rjmp home ;перехід на мітку home (початок програми)
q2:
dec r17 ;декремент регістра R17
out portb,r17 ;вивід значення регістра R17 на порт В
rcall Delay ;виклик підпрограми затримки dd
rjmp home ;перехід на мітку home (початок програми)
q3:
asr r17 ;арифметичний зсув вправо всіх бітів регістра R17
out portb,r17 ;вивід значення регістра R17 на порт В
rcall Delay ;виклик підпрограми затримки dd
rjmp home ;перехід на мітку home (початок програми)
Delay: ;підпрограма затримки
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,3 ;порівняння регістра R21 з 3
brne n1 ;якщо R21¹3, то програма переходить на мітку n1
ret ;повернення з підпрограми затримки
