Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОТЧЕТ МИТ.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
674.37 Кб
Скачать

5.3 Блок – схема для лабораторной работы №5

Блок – схема к лабораторной работе №5 находится в приложении Д. В приложении Д приняты следующие сокращения: ЯП – ячейка памяти, РП – регистровая пара, РОН – регистр общего назначения, ЭМ – элемент массива.

6 Лабораторная работа №6

Написание подпрограммы с организацией вложенного или дополнительного цикла на языке ассемблер микроконтроллера ATmega 8515 фирмы Atmel.

В некоторых случаях требуется организация еще и второго цикла либо внутри основного, либо после него. В этом случае понадобится еще один счетчик цикла, который также необходимо уменьшать на 1 и проверять на обнуление.

В массиве из 26 элементов, первый элемент массива (ЭМ) находится в ячейке памяти с адресом 38010 (адрес следующего ЭМ на 1 меньше), найти количество бит, равных лог. 1 в младшей тетраде ЭМ, содержащего max нечетные данные, попадающие в интервал 12510 < х ≤ 21310. Результат поместить, начиная с ЯП с адресом 40510.

6.1 Листинг программы

Необходимо перевести числа из десятичной системы исчисления в шестнадцатеричную:

- 2610 → 1A16;

- 38010 → 017C16;

- 12510 → 7D16;

- 21310 → D516;

- 40510 → 019516;

- 46310 → 01СF16.

ldi r29,0x01 ;Загрузить старшую часть адреса ЯП в РОН r29

ldi r28,0x7C ;Загрузить младшую часть адреса ЯП в РОН r28

ldi r18,0x1A ;Создать счетчик цикла ЭМ

clr r4 ;Создать счетчик количества бит равных лог. 1

ldi r17, 0x00 ;Загрузить в РОН r17 эталон для сравнения

begin: ld r20, Y ;Загрузить текущий ЭМ в РОН r20 из ЯП, адрес

;которой указан в РП Y

ror r20 ;Сдвинуть данные вправо для последующей

;проверки на нечетность

brcc fin ;Если флаг С = 0 (данные в РОН r20 четные), то

;перейти в конец цикла

rol r20 ;Сдвинуть данные влево для восстановления

cpi r20,0x7D ;Сравнить данные в текущем ЭМ с нижней

;границей интервала

brcs fin ;Если данные в РОН меньше 12510 (не подходят

; по условию) то перейти на метку fin

cpi r20,0xD5 ;Сравнить данные в текущем ЭМ с числом 21310

brcc fin ;Если данные > 21310, то перейти в конец цикла

cp r20, r17 ;Сравнить данные в r20 с эталоном

brcc fin ;Если флаг С = 0, перейти на метку fin

mov r17, r20 ;Заменить эталон в r17

fin: ld r20, X- ;Уменьшить РП Y на единицу

dec r18 ;Уменьшить счётчик ЭМ на единицу

brne begin ;Пока РОН r18 не равен нулю, повторять цикл

ldi r16, 0x04 ;Создать счётчик для проверки количества бит

begin1: rol r17 ;Сдвинуть данные влево для проверки

;количества бит

brcc fin1 ;Перейти к концу доп. цикла, если бит = 0

inc r4 ;Увеличить счётчик бит на единицу

fin1: dec r16 ;Уменьшить на единицу счётчик доп. цикла

brne begin1 ;Если счётчик не равен нулю, перейти в начало

;дополнительного цикла

sts 0x0195, r4 ;Скопировать содержимое счётчика подходящих

;элементов в ЯП с адресом 40510

nop ;Конец программы

6.2 Описание работы программы

Сначала необходимо записать адрес ЯП, содержащий первый ЭМ, в РП. Затем создать счётчик цикла, загружая в любой свободный РОН число, равное количеству ЭМ. Для создания счётчика посчитанных бит необходимо очистить любой свободный РОН. Для поиска максимума, загрузить эталон в РОН для сравнения, минимально возможное число, равное 0016. Далее микроконтроллер должен проверить данные на чётность\нечётность путём сдвига данных вправо. Если флаг С = 0, то данные четные и не подходят, перейти на метку fin. Если флаг С = 1 — данные нечётные, микроконтроллер продолжит выполнять программу со следующей строчки. Далее будет проведена проверка на попадание в заданный интервал. Если данные не подходят, то микроконтроллер перейдёт на метку fin, если данные подходят — продолжит выполнение программы со следующей строчки. Если данные больше или равны эталону, микроконтроллер перейдёт на метку fin, если меньше, то микроконтроллер заменит значение эталона на значение в РОН. Микроконтроллер уменьшит счётчик цикла на единицу, проверит флаг Z, и, если он равен 1, то микроконтроллер закончит выполнять основной цикл и перейдет к дополнительному, задачей которого является подсчет лог. 1 в младшей тетраде ЭМ, содержащих max нечетные данные. Для этого нужно сдвигать данные в РОН влево. Сигнализирует об этом флаг С. Если он равен 0, то микроконтроллер перейдёт на метку fin1, которая обозначает конец дополнительного цикла. Если счётчик не равен нулю, цикл повторяется. После проверки всех бит в max ЭМ МК скопирует результат подсчета в ЯП с адресом 405(10)