- •Содержание
- •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
5.1 Листинг программы
Необходимо перевести числа из десятичной системы исчисления в шестнадцатеричную:
- 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 ;Конец программы
5.2 Описание работы программы
Прежде чем приступить к поиску минимума ЭМ необходимо загрузить адрес первого ЭМ в любую свободную РП, создать счетчик цикла, загрузить максимально возможное число 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 в ЯП с адресом указанном в задании. Если счетчик цикла не обнулен, это значит что еще не все ЭМ прошли проверку, и микроконтроллер повторит цикл.
