- •Додаток 1. Приклади ррозв’язання задач мовою avr Assembler
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
Блок-схема
Підпрограма затримки Delay подібна підпрограмі затримки в 15-му прикладі.
20). Написати програму реалізації кільцевого лічильника з перехресним зв'язком.
.device at90s1200
.include "1200def.inc"
ser r16 ;усі біти регістра R16 встановлюються в одиницю
out ddrb,r16 ;настроювання порту В на вивід
loop:
ldi r17,128 ;присвоїти регістру R17 константу 128
out portb,r17 ;вивід значення регістра R17 на порт В
rcall delay ;виклик підпрограми затримки Delay
main:
asr r17 ;арифметичний зсув всіх бітів регістра R17 вправо
out portb,r17 ;вивід значення регістра R17 на порт В
rcall delay ;виклик підпрограми затримки Delay
sbrs r17,0 ;якщо нульовий біт регістра R17 дорівнює 1,то
;програма пропускає наступну команду
rjmp main ;перехід на мітку main
ldi r17,127 ;присвоїти регістру R17 константу 127
out portb,r17 ;вивід значення регістра R17 на порт В
rcall delay ;виклик підпрограми затримки Delay
home:
asr r17 ;арифметичний зсув всіх бітів регістра R17 вправо
out portb,r17 ;вивід значення регістра R17 на порт В
rcall delay ;виклик підпрограми затримки Delay
sbrc r17,0 ;якщо нульовий біт регістра R17 дорівнює 0,то
;програма пропускає наступну команду
rjmp home ;перехід на мітку home
rjmp loop ;перехід на мітку loop (початок програми)
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,5 ;порівняння регістра R21 з 5
brne n1 якщо R21¹5, то програма переходить на мітку n1
ret ихід із підпрограми затримки
Блок-схема
Підпрограма затримки Delay подібна підпрограмі затримки в 19-му прикладі.
21). Реалізувати програму видачі імпульсу на виході b0 порту B частотою 1 кГц зі скважністю 0.5, тобто тривалість імпульсу дорівнює 0.002 секунди.
.device at90s1200
.include "1200def.inc"
ser r16 ;усі біти регістра R16 встановлюються в одиницю
out ddrb,r16 ;настроювання порту В на вивід
loop:
clr r18 ;очищення регістра R18
out portb,r18 ;вивід значення регістра R18 на порт В
sbic pind,0 ;якщо нульовий біт порту D дорівнює 0, то програма
;пропускає наступну команду
rjmp loop ;перехід на початок програми (мітку loop)
ldi r18,1 ;присвоїти регістру R18 константу 1
out portb,r18 ;вивід значення регістра R18 на порт В
rcall Delay ;виклик підпрограми
jmp loop ;перехід на початок програми (мітку loop)
Delay: ;підпрограма затримки на 0.002 секунди
clr r19 ;очищення регістра R19
clr r20 ;очищення регістра R20
n1:
inc r19 ;інкремент (+1) регістра R19
cpi r19,255 ;порівняння регістра R19 з 255
brne n1 ;якщо R19255, то програма переходить на мітку n1
inc r20 ;інкремент (+1) регістра R20
cpi r20,5 ;порівняння регістра R20 з 5
brne n1 ;якщо R205, то програма переходить на мітку n1
ret ;вихід із підпрограми затримки