
- •Додаток 1. Приклади ррозв’язання задач мовою avr Assembler
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
Блок-схема
6). Розробити програму перемножування двох 4-розрядних двійкових слів, прийнятих з порту B (b0b3) і (b4b7). Результат вивести на порт D.
.device at90s1200 ;
.include "1200def.inc" ;
ser r16 ;усі біти регістра R16 встановлюються в одиницю
out ddrd,r16 ;настроювання порту D на вивід
loop:
in r17,pinb ;ввід даних з порту B у регістр R17
mov r18,r17 ;копіювання значення регістра R17 у регістр R18
andi r17,0x0F ;логічна операція “І” регістра R17 з числом $0F, в
;результаті якої виділяється молодша тетрада регістра
andi r18,0xF0 ;логічна операція “І” регістра R18 з числом $F0, в
;результаті якої виділяється старша тетрада регістра
sbrs r17,0 ;якщо нульовий біт регістра R17=1, то програма
;пропускає наступну команду
rjmp m1 ;перехід на мітку m1
mov r19,r18 ;значення регістра R18 переміщається в регістр R19
m1:
sbrs r17,1 ;якщо перший біт регістра R17=1, то програма
;пропускає наступну команду
rjmp m2 ;перехід на мітку m2
lsl r18 ;логічний зсув вліво регістра R18
add r19,r18 ;підсумовування регістрів R19 і R18
m2:
sbrs r17,2 ;якщо другий біт регістра R17=1, то програма
;пропускає наступну команду
rjmp m3 ;перехід на мітку m3
lsl r18 ;логічний зсув вліво регістра R18
add r19,r18 ;підсумовування регістрів R19 і R18
m3:
sbrs r17,3 ;якщо третій біт регістра R18=1, то програма
;пропускає наступну команду
rjmp m4 ;перехід на мітку m4
lsl r18 ;логічний зсув вліво регістра R18
add r19,r18 ;підсумовування регістрів R19 і R18
m4:
out portd,r19 ;вивід значення регістра R19 на порт D
rjmp loop ;перехід на мітку loop (початок програми)
Блок-схема
7). Розробити програму дешифратора двійкового коду, що подається на біти d0d2 порта D. Вихід дешифратора – біти порту В. Входом, що дозволяє, буде біт d6 порту D.
.device at90s1200
.include "1200def.inc"
ser r20 ;усі біти регістра R20 встановлюються в одиницю
out ddrb,r20 ;настроювання порту B на вивід
main:
ldi r21,254 ;присвоїти регістру R21 число 254
out portb,r21 ;вивід значення регістра R21 на порт В
loop:
set ;установити в одиницю біт акумулятор Т
clr r21 ;очищення регістра R21
sbic pind,0 ;якщо нульовий біт порту D дорівнює 0, то програма
;пропускає наступну команду
bld r21,0 ;завантаження в нульовий біт регістра R21 значення
;біта-акумулятора
sbic pind,1 ;якщо перший біт порту D дорівнює 0, то програма
;пропускає наступну команду
bld r21,1 ;завантаження в перший біт регістра R21 значення
;біта-акумулятора
sbic pind,2 ;якщо другий біт порту D дорівнює 0, то програма
;пропускає наступну команду
bld r21,2 ;завантаження в другий біт регістра R22 значення
;біта-акумулятора
sbis pind,6 ;якщо шостий біт порту D дорівнює 1, то програма
;пропускає наступну команду
rjmp m2 ;перехід на мітку m2
out portb,r20 ;вивід значення регістра R20 на порт У
rjmp loop ;перехід на мітку loop
m2:
cpi r21,0 ;порівняння регістра R21 з 0
breq main ;якщо R21=0, то програма переходить на мітку main
cpi r21,1 ;порівняння регістра R21 з 1
breq n1 ;якщо R21=1, то програма переходить на мітку n1
cpi r21,2 ;порівняння регістра R21 з 2
breq n2 ;якщо R21=1, то програма переходить на мітку n2
cpi r21,3 ;порівняння регістра R21 з 3
breq n3 ;якщо R21=1, то програма переходить на мітку n3
cpi r21,4 ;порівняння регістра R21 з 4
breq n4 ;якщо R21=1, то програма переходить на мітку n4
cpi r21,5 ;порівняння регістра R21 з 5
breq n5 ;якщо R21=1, то програма переходить на мітку n5
cpi r21,6 ;порівняння регістра R21 з 6
breq n6 ;якщо R21=1, то програма переходить на мітку n6
cpi r21,7 ;порівняння регістра R21 з 7
breq n7 якщо R21=1, то програма переходить на мітку n7
rjmp main перехід на мітку main (початок програми)
n1:
ldi r22,253 ;присвоїти регістру R22 число 253
out portb,r22 ;вивід значення регістра R22 на порт В
rjmp loop перехід на мітку loop
n2:
ldi r22,251 ;присвоїти регістру R22 число 251
out portb,r22 ;вивід значення регістра R22 на порт В
rjmp loop перехід на мітку loop
n3:
ldi r22,247 ;присвоїти регістру R22 число 247
out portb,r22 ;вивід значення регістра R22 на порт В
rjmp loop перехід на мітку loop
n4:
ldi r22,239 ;присвоїти регістру R22 число 239
out portb,r22 ;вивід значення регістра R22 на порт В
rjmp loop перехід на мітку loop
n5:
ldi r22,223 ;присвоїти регістру R22 число 223
out portb,r22 ;вивід значення регістра R22 на порт В
rjmp loop перехід на мітку loop
n6:
ldi r22,191 ;присвоїти регістру R22 число 191
out portb,r22 ;вивід значення регістра R22 на порт В
rjmp loop перехід на мітку loop
n7:
ldi r22,127 ;присвоїти регістру R22 число 127
out portb,r22 ;вивід значення регістра R22 на порт В
rjmp loop перехід на мітку loop