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

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





Чтобы обратиться к нужной ячейке памяти необходимо поместить ее адрес в любую свободную регистровую пару. В данном примере используется РП Х, т.е. в регистр r27 помещается старшая часть адреса интересующей ЯП, а в регистр r26 младшая часть адреса. После чего микроконтроллер копирует данные в свободный регистр из ЯП, адрес которой указан в РП Х. Для того чтобы не испортить данные в результате проверки на четность/нечетность, необходимо создать резервную копию. В случае если данные окажутся четными, следует обратиться к регистру, который хранит в себе копию данных и проводить требуемые операции. Далее следует проверить данные на четность. В ЯП ОЗУ могут находиться данные от 010 до 25510 где числа 010, 210, 410 и т.д. – четные, а 110, 310, 510 и т.д. – нечетные [2]. В двоичной системе исчисления младший бит четных чисел равен 0, а нечетных соответственно 1. Если использовать константу 0b00000001 (где 1 находится напротив интересующего нас бита), то при умножении получим результат либо 0 либо 1. Т.е. флаг Z = 1 если данные были четные и флаг Z = 0 если данные были нечетные.

Далее, если данные были нечетные, микроконтроллер перейдет по метке finish — конец программы. Если данные были четные, то микроконтроллер окажется на следующей строке программы и выполнит её.



 

Блок схема программы

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

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

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

Данная лабораторная работа посвящена проверке данных на четность/нечетность с помощью сдвига данных вправо, таким образом, чтобы проверяемый младший бит оказался во флаге С. Если флаг С = 1, то данные нечетные и наоборот, если флаг С = 0 то данные четные.

Записать лог. 1 в нечетные биты данных в ячейке памяти (ЯП) с адресом 54310, только в том случае, если данные четные и ≥ 17010, или нечетные ≤ 10110

 

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

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



- 54310 → 021F16;

- 17010 → AA16;

- 10110 → 6516.

 

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

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

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

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

ror r16 ;Сдвинуть вправо данные в регистре r16 для

;последующей проверки на четность/нечетность

brcs chet ;Если флаг C = 0 (т.е. данные в регистре r16

;четные), то перейти по метке chet

rol r16 ;Выполнить сдвиг данных в регистре r16 влево

;для восстановления

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

brcc finish ;Если данные четные и больше либо равны

;числу 10210 то никаких операций над ними

;проводить не нужно, т.е. конец программы

ori r16, 0b01010101 ;Записать лог. 1 в нечетные биты данных в РОН

;r16

st Z, r16 ;Скопировать данные из РОН r16 в ЯП, адрес

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

rjmp finish ;Перейти на метку finish (требуемые действия

;были выполнены)

chet: rol r16 ;Восстановить данные в регистре r16

cpi r16,0xAB ;Сравнить содержимое РОН r16 с числом 17110

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

;числа 17110) то перейти в конец программы

ori r16, 0b10101010 ;Записать лог. 1 в нечетные биты в РОН r16

st Z, r16 ;Скопировать данные из РОН r16 в ЯП, адрес

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

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

 

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

Для того чтобы обратиться к ЯП ОЗУ необходимо загрузить ее адрес в любую свободную РП. В данной задаче используется РП Х для хранения адреса ЯП ОЗУ. После чего микроконтроллер копирует данные из ЯП, адрес которой указан в РП Z в РОН r16. Для проверки на четность/нечетность используем флаг С. Для этого необходимо сдвинуть данные вправо на один разряд таким образом, чтобы младший бит данных оказался во флаге С. Если флаг С примет значение равное единице, то данные в регистре r16 нечетные. Если же флаг С будет равен 0, то данные четные.



Далее возможно 2 варианта выполнения команды. Первый вариант, если данные нечетные, то микроконтроллер после проверки флага С перейдет на следующую строку. Если данные четные, то микроконтроллер перейдет по метке chet. Рассмотрим первый случай, когда данные нечетные. Следующая команда, которую выполнит микроконтроллер – это сдвинет данные обратно влево, чтобы восстановить их и далее проверит данные на принадлежность к заданному по условию задачи интервалу, то есть сравнит их с числом 10210. После чего во флаге С установится лог. 1, если произошел заем, т.е. данные меньше числа 10210 или лог. 0 если данные равны или больше числа 10210. В зависимости от значения флага С микроконтроллер окажется либо на следующей строчке программы, что будет означать, что данные подходят по условию и следует выполнить над ними требуемые действия, либо данные по условию не подошли, следовательно никаких действий выполнять не следует и перейдет сразу в конец программы.

Во втором случае, если данные четные, микроконтроллер окажется на метке chet. Прежде чем сравнить их на принадлежность к заданному интервалу микроконтроллер восстановит данные с помощью сдвига влево. После чего сравнит с числом 17110. Если данные в регистре r16 больше либо равны числу 17110 (флаг
С = 0), следует перейти к их обработке, если данные меньше 17110 (флаг С = 1), то никаких действий над данными не выполнять и сразу перейти в конец программы.

Микроконтроллер окажется на следующей строчке программы только в том случае, если данные подходят по условию. После чего полученный результат следует поместить обратно в ЯП.

Блок – схема программы

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

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

 

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

Лабораторная работа №4 посвящена организации цикла в программе. Организация цикла связана с необходимостью повтора одинаковых действий над содержимым ЯП расположенных последовательно. При этом используется косвенный режим адресации с постинкрементом или предекрементом. Дополнительно в программу вводится счетчик цикла равный количеству ячеек памяти над которыми выполняются одинаковые действия. В качестве счетчика циклов можно использовать любой свободный РОН. В конце программы необходимо сформировать адрес следующей ячейки памяти и увеличить счетчик цикла на 1. Если счетчик цикла не равен 0, то вернуться к началу цикла, а если счетчик цикла равен 0, то программу можно закончить, т.к. содержимое всех необходимых ЯП уже обработано соответствующим образом.

Записать лог. 1 в четные биты элементов массива, содержащие нечетные данные 15910> x ≥ 7510.. Ячейка памяти 51510 содержит 1 элемент массива. В массиве 14 элементов (адрес следующего элемента массива больше на 1).

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

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

- 51510 → 020316;

- 15910 → 9F16;

- 1410 →0E16;

- 7510 → 4B16;

 

ldi r18,0x0E ;Загрузить число 1410 в РОН r18 для создания

;счетчика циклов (количество ЭМ)

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

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

begin: ld r17, Z ;Скопировать данные в регистр r17 из ЯП с

;адресом, указанным в РП Z

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

;четность

brсс fin ;Если флаг C = 0 (данные четные), то

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

rol r17 ;Восстановить данные в r17

cpi r17, 0x9Е ;Сравниваем данные в r17 с 15810 для проверки

;подходимости

brcc schet ;Если флаг C = 1 (данные меньше либо равны

;15810), то перейти на метку schet для

;выполнения дальнейших операций над числом

cpi r17,0x4B ;Сравнить данные в регистре r16 с числом 7510

brсс fin ;Если флаг С = 1 (данные >7510) то перейти на

;метку fin

schet: ori r17, 0b10101010 ;Записать лог. 1 в нечетные биты в РОН r17

 

st z, r17 ;Скопировать данные в ЯП, адрес которой указан

;в РП Z из r17

fin: ld r17, Z+ ;Скопировать данные в r17, а затем увеличить

;значение РП Z для формирования следующей

;ЯП

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

brne begin ;Если счетчик цикла не обнулен, то перейти на

;метку begin, таким образом повторить цикл

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

 

 








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



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