Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MIT.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
620.15 Кб
Скачать

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 в ЯП с адресом указанном в задании. Если счетчик цикла не обнулен, это значит что еще не все ЭМ прошли проверку, и микроконтроллер повторит цикл.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]