Описание работы программы
Для создания счетчика цикла необходимо в любой свободный РОН с 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 Все материалы защищены законодательством РФ.
|