Кочегаров И.И. Микроконтроллеры AVR. Лабораторный практикум (2012) (1264221), страница 16
Текст из файла (страница 16)
Записать в регистры r17 и r18 соответственно числа 0x00 и0xFF.2. Установить в единицу четыре старших разряда регистра r17.Сбросить четыре младших разряда регистра r18.3. Установить в единицу нулевой, второй, четвертый и шестойразряды РВВ порта B.4. Пронаблюдать в пошаговом режиме за состоянием всех вышеперечисленных регистров.Содержание отчета Отчет должен содержать титульный лист с указанием номера иназвания лабораторной работы, номера группы и фамилий выполнивших работу; цель работы; листинги трансляции программ и сведения, указанные в задании; этапы преобразования числа в РОН привыполнении различных видов арифметических, логических и битовых команд.Контрольные вопросы 1.
Какие арифметические команды микроконтроллера вы знаете?2. Опишите логические команды. Какие допустимые операндыдля этих команд?3. Какие существуют варианты изменения определенного бита взаданном РОН с помощью логических команд?4. Какие происходят изменения определенного бита в заданномРОН с помощью команд установки битов?5. Как переслать заданный бит из одного РОН в другой?96Лабораторная работа № 4 Реализация типовых структур алгоритмов Цель работы: изучение принципов реализации типовых алгоритмических структур на примере ветвлений и циклических программ.Теоретическая часть Любая процедура управления или обработки данных представляет собой совокупность некоторых алгоритмических структур, спомощью которых выполняются требуемые операции.
Наиболее распространенными алгоритмическими структурами являются ветвления (branching) и циклы (loop) [5].Ветвления используются для выполнения различных частейпрограммы (разделения ветвей алгоритма) в зависимости от некоторых условий.В циклах одна и та же операция выполняется над содержимымнескольких последовательно расположенных в памяти ячеек илиэлементов данных. Использование циклических программ целесообразно при обработке массивов, таблиц и подобных по структуре данных. Числом повторений цикла управляют счетчики, а обрабатываемый при данном проходе цикла элемент определяется с помощьюиндекса или указателя.В циклической программе можно выделить четыре основныхблока.1.
Блок инициализации (от лат. initium – начало), в котором производится присвоение начальных значений переменным, счетчикам,индексам и указателям. Указатели представляют собой адреса данных в памяти.2. Блок обработки, в котором выполняются требуемые вычисления, т.е. одинаковые повторяющиеся действия над различными последовательно расположенными в памяти данными.3. Блок управления циклом, в котором изменяются значениясчетчиков и индексов (указателей) перед выполнением следующейповторяющейся операции, а также производится проверка условиявыхода из цикла.4. Заключительный блок, в котором производится сохранениеполученных результатов.Блоки 2 и 3 составляют тело цикла (loop body).
Для повышениябыстродействия и сокращения размера циклических программ сле97дует разгружать тело цикла от операций, которые могут быть выполнены за его пределами.Для организации циклических программ, а также ветвлений впрограммах используются команды безусловных и условных переходов. Кроме того, для построения циклов могут применяться специальные команды циклов, выполняющие несколько действий одновременно (в системе команд AVR-микроконтроллеров отсутствуют).Команды безусловных переходов JMP, RJMP, IJMP и EIJMPпередают управление по указанному в команде адресу памяти программ. Команда JMP (Jump – переход) позволяет передавать управление внутри всего объема памяти программ. Команда RJMP (RelativeJump – относительный переход) обеспечивает переход в пределах2 К слов (4 Кбайт) относительно текущего содержимого программного счетчика.
По команде IJMP (Indirect Jump – косвенный переход) выполняется косвенный переход по адресу, указанному регистром Z; максимальное смещение составляет 64 К слов (128 Кбайт).Команда EIJMP (Extended Indirect Jump – расширенный косвенный переход) обеспечивает косвенный переход по всему объему памяти программ; для расширения программного счетчика используется регистрEIND. При выполнении команд безусловных переходов в программный счетчик загружается адрес ячейки памяти программ, на которуюпередается управление.Команды условных переходов передают управление по указанному адресу памяти программ в случае выполнения некоторыхусловий.Команды BRхх (Branch if … – перейти, если …) выполняют переход на расстояние –64…+63 слова относительно текущего содержимого программного счетчика по результатам проверки разрядоврегистра состояния SREG (кодов или флагов условий).
Регистр состояния SREG находится в адресном пространстве регистров вводавывода. Коды условий (C, Z, N, V, S, H) формируются в регистре состояния при выполнении арифметических, логических команд и команд работы с битами и представляют собой признаки результатаоперации. Разряд С (carry – перенос) устанавливается, если при выполнении команды был перенос из старшего разряда результата.
Разряд Z (zero – нуль) устанавливается, если результат выполнения команды равен нулю. Разряд N (negative – отрицательный результат)устанавливается, если старший значащий разряд результата равен 1(правильно показывает знак результата, если не было переполненияразрядной сетки числа со знаком). Разряд V (overflow – переполне98ние) устанавливается, если при выполнении команды произошло переполнение разрядной сетки числа со знаком.
Разряд S = N V(sign – знак) правильно показывает знак результата при переполнении разрядной сетки числа со знаком. Разряд H (half carry – полуперенос) устанавливается, если при выполнении команды был переносиз третьего разряда результата.Для организации ветвлений при сравнении операндов командыBRхх используются совместно с командами CP (Compare) сравнениясодержимого двух РОН, CPC (Compare with Carry) сравнения с учетом признака переноса и CPI (Compare with Immediate) сравнения сконстантой. Команды ветвления BRхх отличаются для операндов беззнака и со знаком.
Числа без знака представляются прямым кодом,числа со знаком – дополнительным кодом.Команды условных переходов, используемые для ветвлений присравнении операндов, сведены в табл. 5.Таблица 5УсловиеЛогическоевыражениеRd > RrZ(N V) = 0C+Z=0Rd RrRd = RrRd Rr(N V) = 0C=0Z=1Z=0Rd RrZ + (N V) = 1C+Z=1Rd < Rr(N V) = 1C=1КомандасравненияпереходаCP Rr, RdBRLTCP Rr, RdBRLOCP Rd, RrBRGECP Rd, Rr BRSH/BRCCCP Rd, RrBREQCP Rd, RrBRNECPCPCPCPRr,Rr,Rd,Rd,RdRdRrRrBRGEBRSHBRLTBRLO/BRCSОперандысо знакомбез знакасо знакомбез знакасо знаком, без знакасо знаком, без знакасо знакомбез знакасо знакомбез знакаК командам условных переходов также относится командаCPSE (Compare and Skip if Equal – сравнить и пропустить, если равно), которая сравнивает содержимое двух РОН и пропускает следующую за ней команду, если содержимое одинаково.Команды SBRS, SBRC, SBIS, SBIC (Skip if Bit in Register [I/ORegister] is Set [Cleared] – пропустить, если разряд в регистре общегоназначения [ввода-вывода] установлен [сброшен]) пропускают следующую команду в случае выполнения соответствующего условия.99При обработке массивов в циклических программах эффективно использование косвенной адресации памяти данных с предекрементоми постинкрементом, а также косвенной адресации памяти данных сосмещением.На рис.
30 приведен фрагмент программы, в которой число 100заносится в ячейки массива из пяти байт. Для проверки условия выхода из цикла и передачи управления используется команда BRNE.Предел повторений цикла равен 5, шаг равен –1, параметр цикла(счетчик) содержится в регистре R16.Практическая часть 1. Дополнить фрагмент программы, приведенный на рис. 30,необходимыми директивами. Изменить число, заносимое в ячейкимассива, в соответствии с заданным вариантом (табл. 6). Выполнитьпрограмму в пошаговом режиме с помощью симулятора-отладчика.2.
Произвести изменения в программе: заменить команды ADD(сложение) и SUB (вычитание) на INC (инкремент) и DEC (декремент) соответственно.; ...array:; ...LDILDILDI.byte 5R16, 5R17, 100R18, 1; 5 байт для массива array; предел повторений цикла; число, заносимое в массив arrayLDI R30, low(array) ; младший байт адреса массива arrayLDI R31, high(array) ; старший байт адреса массива arrayloop:ST Z, R17ADD R30, R18SUB R16, R18BRNEloop; тело цикла; занесение числа 100 в массив array; адрес следующего байта массива array; счетчик числа проходов, шаг равен -1; повторить, если счетчик не равен ну-лю; ...Рис.
30. Фрагмент программы циклической обработки массива100Таблица 6Номер Чисвари- лоанта199298397496595694793892991109011891288138714861585Массив I13; 78; 1;24; 185; 61; 75;17; 2733; 44; 29;81; 2024; 31; 6;55; 7168; 41; 25;13; 5745; 55; 2;109; 3323; 13; 67;39; 4834; 92; 8;20; 7128; 0; 139;36; 1761; 40; 22;27; 667; 56; 29;16; 10449; 24; 49;84; 1551; 33; 19;48; 8067; 30; 25;52; 38120; 36; 7;10; 45Номер ЧисМассив IIМассив Iвари- лоанта81; 10; 201;168465; 2; 43;33; 810; 12542; 137; 72;178314; 23; 83;9; 5330; 667; 100; 38;1882 34; 18; 136;49; 9927; 530; 127; 23;198123; 75; 30;8; 1715; 4148; 4; 15;208071; 52; 19;36; 12124; 889; 57; 15;2179 49; 117, 29;22; 2076; 2147; 180; 3;227883; 16; 54;10; 5527; 3036; 76; 23;237737; 65; 29;99; 4086; 24128; 35; 5;247651; 36; 48;68; 7225; 8059; 31; 129;257513; 41; 27;18; 6382; 7787; 23; 90;267494; 2; 17;44; 6238; 4575; 3; 12;27736; 60; 73;64; 22718; 44145; 26; 1;287248; 14; 23;13; 8850; 6535; 62; 8;297131; 52; 17;59; 4624; 7853; 47; 35;307066; 70; 42;62; 8113; 29Массив II84; 95; 5;116; 4847; 50; 36;21; 7494; 52; 47;85; 21110; 4; 39;40; 3337; 44; 26;60; 1851; 14; 57;23; 4894; 35; 76;55; 8181; 23; 70;64; 3278; 94; 8;24; 12853; 67; 15;56; 3017; 0; 49;69; 32100; 22; 37;9; 5662; 58; 46;59; 333; 88; 53;162; 7242; 15; 76;38; 863.