
- •Содержание
- •1 Лабораторная работа №1
- •Листинг программы
- •1.2 Описание работы программы
- •1.3 Блок схема программы
- •2 Лабораторная работа №2
- •2.1 Листинг программы
- •2.2 Описание работы программы
- •2.3 Блок схема программы
- •3 Лабораторная работа №3
- •3.1 Листинг программы
- •3.2 Описание программы
- •3.3 Блок – схема программы
- •4 Лабораторная работа №4
- •4.1 Листинг программы
- •4.2 Описание работы программы
- •4.3 Блок – схема для лабораторной работы №4
- •5.1 Листинг программы
- •5.2 Описание работы программы
- •5.3 Блок – схема для лабораторной работы №5
- •6 Лабораторная работа №6
- •6.1 Листинг программы
- •6.2 Описание работы программы
- •6.3 Блок – схема для лабораторной работы №6
2.2 Описание работы программы
Чтобы обратиться к нужной ячейке памяти необходимо поместить ее адрес в любую свободную регистровую пару. В данном примере используется РП Х, т.е. в регистр r31 помещается старшая часть адреса интересующей ЯП, а в регистр r30 младшая часть адреса. После чего микроконтроллер копирует данные в свободный регистр из ЯП, адрес которой указан в РП Х. Для того чтобы не испортить данные в результате проверки на четность/нечетность, необходимо создать резервную копию. В случае если данные окажутся четными, следует обратиться к регистру, который хранит в себе копию данных и проводить требуемые операции. Далее следует проверить данные на четность. В ЯП ОЗУ могут находиться данные от 010 до 25510 где числа 010, 210, 410 и т.д. – четные, а 110, 310, 510 и т.д. – нечетные [2]. В двоичной системе исчисления младший бит четных чисел равен 0, а нечетных соответственно 1. Если использовать константу 0b00000001 (где 1 находится напротив интересующего нас бита), то при умножении получим результат либо 0 либо 1. Т.е. флаг Z = 1 если данные были четные и флаг Z = 0 если данные были нечетные.
Далее, если данные были нечетные, микроконтроллер перейдет по метке finish — конец программы. Если данные были четные, то микроконтроллер окажется на следующей строке программы и выполнит её.
2.3 Блок схема программы
Блок - схема программы находится в приложении Б. В приложении Б приняты следующие сокращения: ЯП – ячейка памяти, РП – регистровая пара, РОН – регистр общего назначения.
3 Лабораторная работа №3
Написание подпрограммы ветвления с проверкой данных на четность/нечетность путем сдвига на языке ассемблер микроконтроллера ATmega 8515 фирмы Atmel.
Данная лабораторная работа посвящена проверке данных на четность/нечетность с помощью сдвига данных вправо, таким образом, чтобы проверяемый младший бит оказался во флаге С. Если флаг С = 1, то данные нечетные и наоборот, если флаг С = 0 то данные четные.
Записать лог. 0 в четные биты данных в ячейке памяти (ЯП) с адресом 56910, только в том случае, если данные четные и ≤ 14610 или нечетные и >/= 7710.
3.1 Листинг программы
Переведем числа из десятичной системы исчисления в шестнадцатеричную:
- 58710 → 024B16;
- 14610 → 9216;
- 7710 → 4D16.
ldi r29,0x02 ;Загрузить старшую часть адреса ЯП в РОН r29
ldi r28,0x4B ;Загрузить младшую часть адреса ЯП в РОН r28
ld r17,Y ;Скопировать данные в РОН r17 из ЯП, адрес
;которой указан в РП Y
ror r17 ;Сдвинуть вправо данные в регистре r17 для
;последующей проверки на четность/нечетность
brcs nechet ;Если флаг C = 1 (т.е. данные в регистре r16
;нечетные), то перейти по метке nechet
rol r17 ;Выполнить сдвиг данных в регистре r17 влево
;для восстановления
cpi r17, 0x93 ;Сравнить данные в РОН r17 с числом 14710
brcc finish ;Если данные нечетные и больше либо равны
;числу 14710 то никаких операций над ними
;проводить не нужно, т.е. конец программы
andi r17, 0b10101010 ;Записать лог. 1 в четные биты данных в РОН r17
st Y, r17 ;Скопировать данные из РОН r17 в ЯП, адрес
;которой указан в РП Y
rjmp finish ;Перейти на метку finish (требуемые действия
;были выполнены)
nechet: rol r17 ;Восстановить данные в регистре r17
cpi r17,0x4D ;Сравнить содержимое РОН r17 с числом 7710
brcs finish ;Если флаг С = 1 (т.е. данные в РОН r17 меньше
;числа 7710) то перейти в конец программы
andi r17, 0b10101010 ;Записать лог. 1 в четные биты в РОН r17
st Y, r17 ;Скопировать данные из РОН r17 в ЯП, адрес
;которой указан в РП Х
finish: nop ;Конец программы