- •Додаток 1. Приклади ррозв’язання задач мовою avr Assembler
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
- •Блок-схема
Додаток 1. Приклади ррозв’язання задач мовою avr Assembler
В даному додатку показані приклади задач та їх рішення мовою низького рівня AVR Assembler. Всі задачі написані для мікроконтролера AT90S1200. Оскільки він являється наймолодшим в серії AVR, то програми будуть працювати і на старших контролерах цієї серії.
Блоки, що використовуються для написання блок-схем.
- початок або кінець блок-схеми;
- ввід або вивід даних;
- блок модифікації;
- розвилка;
- блок для виконання циклу задану кількість раз;
1). Зчитати з порту D число, додати до нього константу і результат вивести в порт В.
.device AT90S1200
.include "1200def.inc"
ser r16 ;усі біти регістра R16 встановлюються в одиницю
out ddrb,r16 ;настроювання порту В на вивід
in r17,pind ;записуємо в регістр R17 значення порту D, що задаємо
;за допомогою комутаторів
ldi r18,7 ;присвоюємо значення константи регістру R18
add r17,r18 ;підсумовуємо значення регістрів R17 і R18 (результат
;записується в регістр R17)
out portb,r17 ;результат виводимо на порт D
Блок-схема
2). Число в межах 099, що подається на порт D (d0d7) перетворити в двійково-десятковий код і результат вивести на порт В.
Нижче представлена таблиця перетворення двійкового коду в двійково-десятковий, за допомогою якої буде написана програма:
Двійковий код |
Додавання до двійкового коду для одержання двійково-десяткового |
09 |
- |
1019 |
+6 |
2029 |
+12 |
3039 |
+18 |
4049 |
+24 |
5059 |
+30 |
6069 |
+36 |
7079 |
+42 |
8089 |
+48 |
9099 |
+54 |
.device AT90S1200
.include "1200def.inc"
ser r16 ;усі біти регістра R16 встановлюються в одиницю
out ddrb,r16 ;настроювання порту В на вивід
loop:
clr r17 ;очищаємо регістр R17
in r17,pind ;записуємо в регістр R17 значення порту D, що задаємо ;за допомогою комутаторів
cpi r17,9 ;порівняння значення регістра R17 з 9
breq m0 ;якщо R17=9, то програма переходить на мітку m0
brmi m0 ;якщо в результаті порівняння R17 з 9 вийшло ;негативне число,то програма переходить на мітку m0
cpi r17,19 ;порівняння значення регістра R17 з 19
breq m1 ;якщо R17=19, то програма переходить на мітку m1
brmi m1 ;якщо в результаті порівняння R17 з 19 вийшло ;негативне число, то програма переходить на мітку m1
cpi r17,29 ;порівняння значення регістра R17 з 29
breq m2 ;якщо R17=29, то програма переходить на мітку m2
brmi m2 ;якщо в результаті порівняння R17 з 29 вийшло
;негативне число, то програма переходить на мітку m2
cpi r17,39 ;порівняння значення регістра R17 з 39
breq m3 ;якщо R17=39, то програма переходить на мітку m3
brmi m3 ;якщо в результаті порівняння R17 з 39 вийшло
;негативне число, то програма переходить на мітку m3
cpi r17,49 ;порівняння значення регістра R17 з 49
breq m4 ;якщо R17=49, то програма переходить на мітку m4
brmi m4 ;якщо в результаті порівняння R17 з 49 вийшло
;негативне число, то програма переходить на мітку m4
cpi r17,59 ;порівняння значення регістра R17 з 59
breq m5 ;якщо R17=59, то програма переходить на мітку m5
brmi m5 ;якщо в результаті порівняння R17 з 59 вийшло
;негативне число, то програма переходить на мітку m5
cpi r17,69 ;порівняння значення регістра R17 з 69
breq m6 ;якщо R17=69, то програма переходить на мітку m6
brmi m6 ;якщо в результаті порівняння R17 з 69 вийшло
;негативне число, то програма переходить на мітку m6
cpi r17,79 ;порівняння значення регістра R17 з 79
breq m7 ;якщо R17=79, то програма переходить на мітку m7
brmi m7 ;якщо в результаті порівняння R17 з 79 вийшло
;негативне число, то програма переходить на мітку m7
cpi r17,89 ;порівняння значення регістра R17 з 89
breq m8 ;якщо R17=89, то програма переходить на мітку m8
brmi m8 ;якщо в результаті порівняння R17 з 89 вийшло
;негативне число, то програма переходить на мітку m8
cpi r17,99 ;порівняння значення регістра R17 з 99
breq m9 ;якщо R17=99, то програма переходить на мітку m9
brmi m9 ;якщо в результаті порівняння R17 з 99 вийшло
;негативне число, то програма переходить на мітку m9
rjmp loop ;для чисел великих 99 йде перехід на початок програми
m0:
out portb,r17 ;виводимо значення регістра R17 в порт В
rjmp loop ;перехід на початок програми
m1:
ldi r18,6 ;записуємо 6 у регістр R18
add r17,r18 ;підсумовуємо значення регістрів R17 і R18
out portb,r17 ;виводимо значення регістра R17 на порт В
rjmp loop ;перехід на початок програми
m2:
ldi r18,12 ;записуємо 12 у регістр R18
add r17,r18 ;підсумовуємо значення регістрів R17 і R18
out portb,r17 ;виводимо значення регістра R17 на порт В
rjmp loop ;перехід на початок програми
m3:
ldi r18,18 ;записуємо 18 у регістр R18
add r17,r18 ;підсумовуємо значення регістрів R17 і R18
out portb,r17 ;виводимо значення регістра R17 на порт В
rjmp loop ;перехід на початок програми
m4:
ldi r18,24 ;записуємо 24 у регістр R18
add r17,r18 ;підсумовуємо значення регістрів R17 і R18
out portb,r17 ;виводимо значення регістра R17 на порт В
rjmp loop ;перехід на початок програми
m5:
ldi r18,30 ;записуємо 30 у регістр R18
add r17,r18 ;підсумовуємо значення регістрів R17 і R18
out portb,r17 ;виводимо значення регістра R17 на порт В
rjmp loop ;перехід на початок програми
m6:
ldi r18,36 ;записуємо 36 у регістр R18
add r17,r18 ;підсумовуємо значення регістрів R17 і R18
out portb,r17 ;виводимо значення регістра R17 на порт В
rjmp loop ;перехід на початок програми
m7:
ldi r18,42 ;записуємо 42 у регістр R18
add r17,r18 ;підсумовуємо значення регістрів R17 і R18
out portb,r17 ;виводимо значення регістра R17 на порт В
rjmp loop ;перехід на початок програми
m8:
ldi r18,48 ;записуємо 48 у регістр R18
add r17,r18 ;підсумовуємо значення регістрів R17 і R18
out portb,r17 ;виводимо значення регістра R17 на порт В
rjmp loop ;перехід на початок програми
m9:
ldi r18,54 ;записуємо 54 у регістр R18
add r17,r18 ;підсумовуємо значення регістрів R17 і R18
out portb,r17 ;виводимо значення регістра R17 на порт В
rjmp loop ;перехід на початок програми
Блок-схема
3). Розробити програму, яка б приймала біти двійкового коду d0d3 з порту D і передавала на біти b4b7 відповідний код Грея.
.device at90s1200
.include "1200def.inc"
ldi r16,0xF0 ;присвоєюємо регістру R16 число 0xF0
out ddrb,r16 ;налагоджуємо старшу тетраду порту В на вивід
loop:
in r17,pind ;записуємо в регістр R17 значення порту D
bst r17,0 ;копіюємо значення 0-го біта регістра R17 у
;біт-акумулятор Т
bld r18,0 ;завантажуємо в нульовий біт регістра R18 значення
;біта-акумулятора
bst r17,1 ;копіюємо значення 1-го біта регістра R17 у
;біт-акумулятор Т
bld r19,0 ;завантажуємо в нульовий біт регістра R19 значення
;біта-акумулятора
cp r18,r19 ;порівнюємо значення регістрів R18 і R19
brne m1 ;якщо R18R19, то програма переходить на мітку m1
clt ;очищаємо біт-акумулятор Т статус регістра
bld r17,4 ;завантажуємо в четвертий біт регістра R17 значення
;біта-акумулятора
rjmp n1 ;перехід на мітку n1
m1:
set ;установлюємо біт-акумулятор в одиницю
bld r17,4 ;завантажуємо в четвертий біт регістра R17 значення
;біта-акумулятора
n1:
bst r17,1 ;копіюємо значення 1-го біта регістра R17 у
;біт-акумулятор Т
bld r18,0 ;завантажуємо в нульовий біт регістра R18 значення
;біта-акумулятора
bst r17,2 ;копіюємо значення 2-го біта регістра R17 у
;біт-акумулятор Т
bld r19,0 ;завантажуємо в нульовий біт регістра R19 значення
;біта-акумулятора
cp r18,r19 ;порівнюємо значення регістрів R18 і R19
brne m2 ;якщо R18R19, то програма переходить на мітку m2
clt ;очищаємо біт-акумулятор Т статус регістра
bld r17,5 ;завантажуємо в п'ятий біт регістра R17 значення
;біта-акумулятора
rjmp n2 ;перехід на мітку n2
m2:
set ;установлюємо біт-акумулятор в одиницю
bld r17,5 ;завантажуємо в п'ятий біт регістра R17 значення
;біта-акумулятора
n2:
bst r17,2 ;копіюємо значення 2-го біта регістра R17 у
;біт-акумулятор Т
bld r18,0 ;завантажуємо в нульовий біт регістра R18 значення
;біта-акумулятора
bst r17,3 ;копіюємо значення 3-го біта регістра R17 у
;біт-акумулятор Т
bld r19,0 ;завантажуємо в нульовий біт регістра R19 значення
;біта-акумулятора
cp r18,r19 ;порівнюємо значення регістрів R18 і R19
brne m3 ;якщо R18R19, то програма переходить на мітку m3
clt ;очищаємо біт-акумулятор Т статус регістра
bld r17,6 ;завантажуємо в шостий біт регістра R17 значення
;біта-акумулятора
rjmp n3 ;перехід на мітку n3
m3:
set ;установлюємо біт-акумулятор в одиницю
bld r17,6 ;завантажуємо в шостий біт регістра R17 значення
;біта-акумулятора
n3:
bst r17,3 ;копіюємо значення 3-го біта регістра R17 у
;біт-акумулятор Т
bld r18,0 ;завантажуємо в нульовий біт регістра R18 значення
;біта-акумулятора
clr r19 ;очищаємо регістр R19
cp r18,r19 ;порівнюємо значення регістрів R18 і R19
brne m4 ;якщо R18R19, то програма переходить на мітку m4
clt ;очищаємо біт-акумулятор Т статус регістра
bld r17,7 ;завантажуємо в сьомий біт регістра R17 значення
;біта-акумулятора
rjmp n4 ;перехід на мітку n4
m4:
set ;установлюємо біт-акумулятор в одиницю
bld r17,7 ;завантажуємо в сьомий біт регістра R17 значення
;біта-акумулятора
n4:
out portb,r17 ;виводимо значення регістра R17 на порт У
rjmp loop ;перехід на початок програми