Академический Документы
Профессиональный Документы
Культура Документы
Факультет (филиал)_ПР________специальность(направление)_200101___________
Студент: __
2
СОДЕРЖАНИЕ
Введение………………………………………...………………………….……….……..3
Техническое задание…………..………………………………..……..………..….……..4
1 Домашняя работа 1……..…………………………………..……..………..……….…..5
1.1 Перевод чисел…………………………………………………………..….....……….5
1.2 Описание программы ……….……………………………………………....………..6
1.3 Алгоритм программы …..……...…………………...………………………..……….9
2 Домашняя работа 2………..………………………………………………..…..…...…10
2.1 Перевод чисел……………….……………………………………………..…...……10
2.2 Описание программы ……….………………………………………….…..……….11
2.3 Алгоритм программы …..……...…………………...…………………...….……….14
3 Домашняя работа 3………..…………………..……………………………..…..….…15
3.1 Перевод чисел……………….……………………………………………..…...……15
3.2 Описание программы ……….………………………………………….…..……….16
3.3 Алгоритм программы …..……...…………………...…………………...….……….19
Заключение………………………………………………………………………….........20
Список литературы………………………………………………………….…………...21
3
ВВЕДЕНИЕ
ДР-2068752-200101-ПР1-19-10
Написание подпрограмм на языке Assembler для микроконтроллера
ATmega8515 фирмы Atmel
5
1 ДОМАШНЯЯ РАБОТА 1
_ 504 16
496 _ 31 16
8 16 1
15
В результате получим: 50410=01F816.
_450 16
448 _ 28 16
2 16 1
12
6
В результате получим: 45010=01C216.
_121 16
112 7
9
В результате получим: 12110=7916.
3210=2016.
Текст подпрограммы.
7
start: ldi r31,0x01 ;загружаем адрес ЯП в РП Z
ldi r30,0xF8 ;
ldi r25,0x20 ;создаем счетчик цикла, равный количеству
;элементов массива
clr r1 ;обнуляем регистр r1 для подсчета элементов
;массива подходящих по условию
nach: ld r16,Z; ;копируем данные из ЯП, адрес которой
;находится в РП Z в РОН r17
mov r17,r16 ;копируем данные из РОН r16 в РОН r17
andi r17,0b00000001 ;проводом операцию лог. И с константой для
;проверки на четность/нечетность
breq finish ;если флаг z=1 (то есть число в регистре было
;четное), то перейти в конец программы на метку
;finish
cpi r16,0x79 ;сравниваем число в регистре r16 с числом
; 12110
brcs finish ;если флаг c=1 (данные в r16 меньше 12110),
;перейти в конец программы на метку finish,
;так как данные не удовлетворяют заданному
;условию
inc r1 ;"считаем" подходящий элемент массива
;увеличивая r1 на 1
finish: ld r16,z- ;копирование данных в r16, уменьшая РП Z на
;1, в результате чего в РП Z окажется адрес
;предыдущей ЯП
dec r25 ;уменьшаем счетчик на 1
brne nach ; если счетчик не равен 0 (z=0), то вернуться
;в начало цикла
ldi r27,0x01 ;помещаем результат в ЯП с адресом 45010 в РП X
ldi r26,0xC2 ;
8
st X,r1 ;помещаем данные из r1 в ЯП, адрес которой
;находится в РП X
nop ;конец программы
rjmp start ;безусловный переход к метке start
9
1.3 АЛГОРИТМ ПОДПРОГРАММЫ
1
Начало
1
5
Запись адреса Данны Да
1-го элемента е
массива в РП Z четные
2 Нет
Создание
счетчика для 6 Данны Да
цикла е в r16
< 121
2
3 Нет
Запись 7
элемента Увеличение
массива в счетчика
регистр r16 количества
нечетных
чисел <121
4
Копирование 8
данных из r16
в r17 Уменьшить
счетчик цикла
на 1
Нет 9 Счетчи
к
2
цикла
равен 0
Да
10
Запись адреса
ЯП в РП X
11
Копирование
искомых
данных в ЯП
Конец
10
2 ДОМАШНЯЯ РАБОТА 2
_ 584 16
576 _36 16
8 32 2
4
В результате получим: 58410=024816.
_ 588 16
576 _36 16
12 32 2
4
В результате получим: 58810=024C16.
11
_ 156 16
144 9
12
В результате получим: 15610=9C16.
_ 62 16
48 3
14
В результате получим: 6210=3E16.
1910=1316.
12
уменьшать его на 1 после прохождения каждого элемента массива. После
уменьшения следует проверить, все ли элементы массива были опрошены.
Текст подпрограммы.
13
;они не могут быть минимумом), поэтому переходим
в ;конец цикла
mov r20,r28 ;т.к. текущий элемент массива оказался меньше
;эталона, помещаем его на место эталона
finish: dec r17 ;уменьшаем счетчик цикла на 1
brne nach ;если счетчик не равен 0, то нужно вернуться в начало
;цикла, а если равен - в конец программы
ldi r31,0x02 ;помещаем результат в ЯП с адресом 58810 в РП Z
ldi r30,0x4C ;
st Z,r20 ;помещаем данные из r20 в ЯП, адрес которой
;находится в РП Z
nop ;конец программы
rjmp start ;безусловный переход к метке start
14
2.3 АЛГОРИТМ ПОДПРОГРАММЫ
1
Начало
Данны
1 Да 8
ев
Запись адреса 2
r28>15
1-го элемента
массива в РП 7ные
X
Нет
2 Нет Данны
Создание 9
ев
счетчика для 2
r28<r2
цикла 0
Да
3 10
Занесение в Копирование
r20 данных из r28
максимальной в r20
константы
3
4 2
Копирование 11
данных из ЯП
с адресом в РП Уменьшить
X в r28 счетчик цикла
на 1
Сдвигаем
вправо Нет 12 Счетчи
данные к
3
цикла
равен 0
Да
Данны 13
6 Да
е
2
нечетн. Запись адреса
в РП Z
Нет
14
Данны
7 Да Копирование
ев
2 искомых
r28<63
данных в ЯП
Нет
1 Конец
15
3 ДОМАШНЯЯ РАБОТА 3
_ 585 16
576 _36 16
9 32 2
4
В результате получим: 58510=024916.
_ 580 16
576 _36 16
4 32 2
4
В результате получим: 58010=024416.
16
_ 172 16
160 10
12
В результате получим: 17210=AC16.
_ 54 16
48 3
6
В результате получим: 5410=3616.
2910=1D16.
17
элемента массива необходимо уменьшать РП и «счетчик цикла» на 1. После
уменьшения следует проверить, все ли элементы массива были опрошены.
Текст подпрограммы.
19
3.3 АЛГОРИТМ ПОДПРОГРАММЫ
3
1
Начало
16
1 Уменьшение
Запись адреса счетчика для
1-го элемента Да 90 Данные вложенного
массива в РП в цикла r22
2 r24<54
X
2 Счетчик
Нет 17
Создание Нет вл.
счетчика для 4 цикла
цикла r25 1001 Данные равен 0
Да четные
в
2 r24>171 Да
3 18
Заносим 18 Копирование
максимальную данных из X в
константу в r24 уменьшая
Нет
r20 на 1
4 Нет 11
2 Эталон 19
r24<r20
Обнуляем Уменьшить
регистр r16 счетчик цикла
r25 на 1
Да
5 12
5
Копирование
данных из ЯП
с адресом в РП Замена Нет 20 Счетчик
эталона цикла
X в r24 5 равен 0
2 4 четные
6 13
сдвигаем Да
Сдвигаем 21
вправо
данные
максимальный
вправо Запись адреса
элемент
в РП Y
14 22
Нет
7 Данные
Да Копирование
нечетн Бит = 0
2 искомых
ые
данных из r16
Да в ЯП
15
Нет
8 Увеличить
Сдвигаем 15 счетчик на 1
Конец
данные r16
влево
3
1
20
ЗАКЛЮЧЕНИЕ
21
СПИСОК ЛИТЕРАТУРЫ
22
Создание счетчика для вложенного цикла r22 (5-6)
23