
- •Додаток 1. Приклади ррозв’язання задач мовою avr Assembler
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
Блок-схема
Підпрограма затримки показана в десятому прикладі.
13). Розробити програму виконання регістра пам'яті на 4 біти. Керуючим бітом на запис регістра буде біт d7 порту D, а керуючим бітом на зчитування – d6 порту D.
.device at90s1200
.include "1200def.inc"
ser r16 ;усі біти регістра R16 встановлюються в одиницю
out ddrb,r16 ;настроювання порту B на вивід
home:
clr r18 ;очищення регістра R18
set ;установити в одиницю біт акумулятор Т
sbic pind,7 ;якщо сьомий біт порту D дорівнює 0, то програма
;пропускає наступну команду
bld r18,0 ;завантаження в нульовий біт регістра R18 значення
;біта-акумулятора
sbic pind,6 ;якщо шостий біт порту D дорівнює 0, то програма
;пропускає наступну команду
bld r18,1 ;завантаження в перший біт регістра R18 значення
;біта-акумулятора
cpi r18,1 ;порівняння регістра R18 з 1
breq qq ;якщо R18=1, то програма переходить на мітку qq
cpi r18,2 ;порівняння регістра R18 з 2
breq ww ;якщо R18=2, то програма переходить на мітку ww
rjmp home ;перехід на початок програми (мітку home)
qq:
clr r17 ;очищення регістра R17
sbic pind,0 ;якщо нульовий біт порту D дорівнює 0, то програма
;пропускає наступну команду
bld r17,0 ;завантаження в нульовий біт регістра R17 значення
;біта-акумулятора
sbic pind,1 ;якщо перший біт порту D дорівнює 0, то програма
;пропускає наступну команду
bld r17,1 ;завантаження в перший біт регістра R17 значення
;біта-акумулятора
sbic pind,2 ;якщо другий біт порту D дорівнює 0, то програма
;пропускає наступну команду
bld r17,2 ;завантаження в другий біт регістра R17 значення
;біта-акумулятора
sbic pind,3 ;якщо третій біт порту D дорівнює 0, то програма
;пропускає наступну команду
bld r17,3 ;завантаження в третій біт регістра R17 значення
;біта-акумулятора
rjmp home ;перехід на початок програми (мітку home)
ww:
out portb,r17 ;вивід значення регістра R17 на порт B
rjmp home ;перехід на початок програми (мітку home)
Блок-схема
14). Розробити програму для ділення частоти вхідних імпульсів на 27.
У даній програмі рахунок вхідних імпульсів буде вестися в двійковому коді і відображатися на бітах b0b4 порту В, а уже вихідний сигнал – на біті b7 порту В.
.device at90s1200
.include "1200def.inc"
ser r16 ;усі біти регістра R16 встановлюються в одиницю
out ddrb,r16 ;настроювання порту В на вивід
m1:
andi r18,128 ;побітова операція логічного «І» регістра R18 і числа
;128=100000002 для виділення 7-го біта регістра R18
out portb,r18 ;вивід значення регістра R18 на порт В
clr r17 ;очищення регістра R17
rcall delay ;виклик підпрограми затримки
m2:
inc r17 ;інкремент регістра R17
bst r17,0 ;копіювання нульового біта регістра R17 у
;біт-акумулятор
bld r18,0 ;завантаження в нульовий біт регістра R18 значення
;біта-акумулятора
bst r17,1 ;копіювання першого біта регістра R17 у
;біт-акумулятор
bld r18,1 ;завантаження в перший біт регістра R18 значення
;біта-акумулятора
bst r17,2 ;копіювання другого біта регістра R17 у
;біт-акумулятор
bld r18,2 ;завантаження в другий біт регістра R18 значення
;біта-акумулятора
bst r17,3 ;копіювання третього біта регістра R17 у
;біт-акумулятор
bld r18,3 ;завантаження в третій біт регістра R18 значення
;біта-акумулятора
bst r17,4 ;копіювання четвертого біта регістра R17 у
;біт-акумулятор
bld r18,4 ;завантаження в четвертий біт регістра R18 значення
;біта-акумулятора
out portb,r18 ;вивід значення регістра R18 на порт В
rcall delay ;виклик підпрограми затримки
cpi r17,26 ;порівняння регістра R17 з числом 26
brne m2 ;якщо R1726, програма переходить на мітку m2
set ;установити в одиницю біт акумулятор Т
sbrc r18,7 ;якщо сьомий біт регістра R18 дорівнює 0, то програма
;пропускає наступну команду
rjmp qq ;стрибок на мітку qq
bld r18,7 ;завантаження в сьомий біт регістра R18 значення
;біта-акумулятора
out portb,r18 ;вивід значення регістра R18 на порт В
rjmp m1 ;перехід на мітку m1
qq:
clt ;очищення біта-акумулятора
bld r18,7 ;завантаження в сьомий біт регістра R18 значення
;біта-акумулятора
out portb,r18 ;вивід значення регістра R18 на порт В
rjmp m1 ;перехід на мітку m1
delay: ;підпрограма затримки
ldi r20,3 ;присвоїти регістру R20 константу 3
out tccr0,r20 ;установка передділения таймера-лічильника на 64
m3:
in r21,tcnt0 ;ввід даних з регістра таймера-лічильника в R21
cpi r21,0 ;порівняння регістра R21 з 0
brne m3 ;якщо R210, програма переходить на мітку m3
inc r23 ;інкремент регістра R23
cpi r23,0 ;порівняння регістра R23 з 0
brne m3 ;якщо R230, програма переходить на мітку m3
ret ;повернення з підпрограми затримки