Сделай Сам Свою Работу на 5

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





Для создания счетчика цикла необходимо в любой свободный РОН с r16 по r31записать число равное количеству элементов в массиве. Далее начинается цикл программы. Микроконтроллер копирует данные из первого ЭМ в РОН r17. Цикл заключается в последовательной проверке данных находящихся в РОН с заданными в условии задачи числами. При этом используется флаг C. Данные в РОН r17 сравниваются с числом 15810. Если данные в регистре r17 равны 15810, то флаг C будет равен 1, микроконтроллер перейдет по указанной метке schet, после чего текущий ЭМ будет учтен как ЭМ содержащий интересующие нас данные. Затем микроконтроллер записывает лог.1 в четные биты ЭМ. Далее, чтобы приступить к проверке следующего ЭМ необходимо уменьшить на 1 счетчик цикла, после чего необходимо проверить флаг Z. Если флаг Z = 0, это говорит о том что счетчик цикла не обнулился и следует повторить цикл заново. После этого необходимо использовать команду преинкримента, для формирования адреса следующей ЯП, указанной в РП Z. Цикл будет повторяться до тех пор пока регистр r18 (счетчик цикла) не обнулится. Как только это произойдет микроконтроллер после проверки флага Z перейдет уже не на метку begin, а в конец программы.



 

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

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

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

Написание подпрограммы поиска максимума/минимума с организацией цикла на языке ассемблер микроконтроллера ATmega 8515 фирмы Atmel. В данной лабораторной работе для реализации программы поиска максимума/минимума используется эталон. Для поиска минимума в качестве эталона используется максимально возможное число FF16, для поиска максимума – минимально возможное число – 0016. В программе сначала выполняется проверка и только если данные подходят по всем условиям их необходимо сравнить с эталоном. Если данные меньше минимального эталона или больше максимального, то их нужно поместить в качестве нового эталона на месте старого. По окончании работы цикла вместо эталонов будут храниться данные удовлетворяющие всем условиям и являющиеся минимальными или максимальными [1].



В массиве из 12 элементов, первый элемент массива находится в ЯП с адресом 57210 (адрес следующего на 1 меньше), найти элемент массива, содержащий min нечетные данные, попадающие в интервал 18710 < x ≤ 1910. Результат поместить в ЯП с адресом 57510.

 

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

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

- 1210 → 0С16;

- 57210 → 023С16;

- 18710 → BB16;

- 1910 → 1316;

- 57510 → 023F16.

 

ldi r27,0x02 ;Загрузить старшую часть адреса первого ЭМ в

;РОН r27

ldi r26,0x3D ;Загрузить младшую часть адреса первого ЭМ в

;РОН r26

ldi r17,0x0C ;Загрузить число 1210 в РОН r20 (создать счетчик

;цикла)

ldi r21,0xFF ;Поместить в РОН r16 максимально возможное

;число FF16 для создания эталона при поиске min

begin: ld r16, -X ;Скопировать в РОН r16 данные из ЯП, адрес

;которой указан в РП X, после чего уменьшить

;адрес РП Х на 1 для последующего обращения к

;следующему ЭМ

ror r16 ;Сдвинуть данные вправо в РОН r17

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

;то перейти на метку fin

rol r16 ;Сдвинуть данные в РОН r16 влево, тем самым

;восстановив их после предыдущего сдвига

cpi r16,0x14 ;Сравнить данные в РОН r16 с числом 2010

brcs compare ;Если флаг C = 1 (данные в РОН r17 меньше

;числа 2010), то перейти на метку compare

cpi r16,0xBC ;Сравниваем данные в РОН r16 с числом 18810

brcs fin ;Если флаг С = 1 (данные в РОН r16 меньше или

;равны числу 18710), то перейти на метку fin

compare: cp r16, r21 ;Сравнить данные в РОН r16 с эталоном r21

brcc fin ;Если флаг С = 0 (данные в РОН r16 меньше либо

;равны эталону в r21), то перейти на метку fin



mov r21, r16 ;Скопировать новый эталон из РОН r16 в r21

fin: dec r17 ;Уменьшить счетчик цикла на 1

brne begin ;Если флаг Z = 0 (счетчик цикла не обнулен), то

;повторить цикл заново

sts 0x023F, r21 ;Скопировать min ЭМ в ЯП с адресом 57510

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

 

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

 

Прежде чем приступить к поиску минимума ЭМ необходимо загрузить адрес первого ЭМ в любую свободную РП, создать счетчик цикла, загрузить максимально возможное число FF16 в любой свободный РОН для создания эталона.

Далее начинается цикл программы. Микроконтроллер копирует данные из ЯП в любой свободный РОН с r16 по r31 (в данной лабораторной работе используется РОН r16), после чего следует уменьшить РП Х на 1, тем самым подготовить адрес следующего ЭМ. Прежде чем сравнить данные из РОН r16 с эталоном необходимо проверить их на четность/нечетность и на принадлежность к заданному в условии задачи интервалу. Проверку на четность/нечетность можно осуществить несколькими способами. В данной работе эта задача осуществляется с помощью сдвига вправо, таким образом, чтобы младший бит данных оказался во флаге С. Если флаг С = 0, то данные четные (не подходят по условию задачи), в этом случае микроконтроллер перейдет на метку fin. Если данные в РОН r16 нечетные, то флаг С = 0 и микроконтроллер приступит к выполнению следующей команды. Далее необходимо проверить входят ли данные в заданный в условии задачи интервал. Сначала микроконтроллер сравнивает данные из РОН r16 с нижней границей интервала, с числом 1910. Для упрощения кода программы сравнивать следует с числом 2010. Если данные окажутся больше чем 1910, то следует сравнить их с верхней границей интервала, с числом 18710. Если данные меньше 18710, то число в РОН r16 полностью подходит по условию и можно сравнивать их с эталоном. Если данные оказались равны или больше числа 18710, то микроконтроллер перейдет в конец цикла на метку fin. Микроконтроллер окажется на строке ниже только в том случае, если данные в РОН r16 прошли все проверки и подходят по условию. Следует только их сравнить с эталоном. Если данные меньше эталона, то микроконтроллер запишет их в r16, тем самым создаст новый эталон. Если данные равны или больше эталонного значения, то микроконтроллер перейдет на метку fin.

На метке fin микроконтроллер отнимет 1 из счетчика цикла, после чего проверит его на обнуление. Если счетчик цикла обнулился (все ЭМ проверены), то микроконтроллер скопирует эталон из РОН r16 в ЯП с адресом указанном в задании. Если счетчик цикла не обнулен, это значит что еще не все ЭМ прошли проверку, и микроконтроллер повторит цикл.

 

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

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

 


 

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

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

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

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

 

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

 

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

- 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 ;Конец программы

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.