Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Dodatok_1.doc
Скачиваний:
0
Добавлен:
04.09.2019
Размер:
706.05 Кб
Скачать

Додаток 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). Число в межах 099, що подається на порт D (d0d7) перетворити в двійково-десятковий код і результат вивести на порт В.

Нижче представлена таблиця перетворення двійкового коду в двійково-десятковий, за допомогою якої буде написана програма:

Двійковий код

Додавання до двійкового коду для одержання двійково-десяткового

09

-

1019

+6

2029

+12

3039

+18

4049

+24

5059

+30

6069

+36

7079

+42

8089

+48

9099

+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). Розробити програму, яка б приймала біти двійкового коду d0d3 з порту D і передавала на біти b4b7 відповідний код Грея.

.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 ;якщо R18R19, то програма переходить на мітку 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 ;якщо R18R19, то програма переходить на мітку 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 ;якщо R18R19, то програма переходить на мітку 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 ;якщо R18R19, то програма переходить на мітку m4

clt ;очищаємо біт-акумулятор Т статус регістра

bld r17,7 ;завантажуємо в сьомий біт регістра R17 значення

;біта-акумулятора

rjmp n4 ;перехід на мітку n4

m4:

set ;установлюємо біт-акумулятор в одиницю

bld r17,7 ;завантажуємо в сьомий біт регістра R17 значення

;біта-акумулятора

n4:

out portb,r17 ;виводимо значення регістра R17 на порт У

rjmp loop ;перехід на початок програми

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]