Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Загрузить для отладки программу определения максимального элемента массива 8-разрядных чисел SRAM (программаmax_el_mass)



Перед выполнением программы необходимо заполнить область памяти данных случайными числами, начиная с адреса 0x60. Количество элементов определяется числом, загружаемым в начале программы в r18.

Для обращения к памяти с адресом более 8 разрядов программа использует специально для этого предназначенный Z-ре-гистр. Он состоит из пары регистров r31:r30. В начале выполнения программа копирует первый элемент массива в r16, а адрес этого элемента в Х (регистровая пара r27:r26). После этого каждый элемент сравнивается со значением в r16, и в том случае, если элемент окажется больше содержимого r16, то он замещает собой предыдущее значение в r16, а также адрес нового наибольшего элемента копируется в пару Х. Каждый раз при сравнении, из количества элементов вычитается единица. Как только содержимое r18 станет равным 0, выполнение программы можно прекращать в связи с перебором всех элементов. В итоге получим наибольший элемент в r16, его адрес в Х.

;****** Программа max_el_mass

ldi r30,low($100);Загрузка в регистр Z начального адреса

ldi r31,high($100);массива чисел

ldi r18,12;Загрузка количества элементов массива

ld r16,z;Загрузка в регистр r16 первого элемента массива

mov r26,r30;Загрузка в X адреса первого элемента

mov r27,r31

dec r18

m1: inc r30;Увеличение Z на единицу для загрузки

; следующего элемента

ld r17,z;Загрузка элемента для сравнения

cp r16,r17;Сравнение максимального (или первого) элемента;с только что загруженным

brsh m2

mov r16,r17;его перезапись в r16 в случае, если больше

mov r26,r30;и сохранение адреса в X

mov r27,r31

m2: dec r18;Уменьшение счётчика количества элементов

brbc 1,m1;Если не все элементы перебраны, переход на m1

m3: jmp m3;Зацикливание по завершении

Модифицировать программу в соответствии со своим вариантом индивидуального задания:

1. Определить минимальный элемент массива SRAM.

2. Сформировать массив 3, элементы которого определяются как разность соответствующих элементов массивов 1 и 2. Отрицательную разность заменить нулем.

3. Сформировать массив 3, элементы которого определяются как сумма соответствующих элементов массивов 1 и 2. Сумму, большую 255, заменить байтом единиц.

4. Количество одинаковых элементов массивов 1 и 2 поместить в регистр R0.

5. Количество чисел массива 1, совпадающих с содержимым регистра R1, поместить в регистр R0.

6. Двоичные числа массива преобразовать в двоично-десятичные.

7. Двоично-десятичные числа массива (меньшие 99) преобразовать в двоичные.

8. Сформировать массив 2, элементы которого представляют дополнительный код восьмиразрядных чисел со знаком массива 1.

9. Отсортировать массив по возрастанию элементов.

3. Набрать и отладить прикладную программу fairy, позволяющую получить эффект бегущей 1 на линиях порта.

Ввести код программы в отладчик AVRStudio и проверить ее работу в пошаговом режиме. Проследить изменения, происходящие в регистрах SREG, PORTВ и PINВ по мере выполнения программы. Для чего в регистр DDRВ заносится 0xFF? Чем отличается команда rol от команд lsl и asr?

;****** Программа fairy

.INCLUDE "C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes\m8def.inc"

; Подключение файла определения адресов

ldi r16,0xFF

out DDRB,r16

sec

clr r16

m1: rol r16

out PORTB,r16

rjmp m1

Дополните программу подпрограммой задержки «Delay» таким образом, чтобы содержимое r17 определяло длительность паузы между сменой состояния на выводах порта.

Примечание: для вызова подпрограммы необходимо активировать стек, что происходит автоматически при указании его начала в паре регистров sph:spl.

Модифицировать программу в соответствии со своим вариантом индивидуального задания и произвести ее отладку:

1. Мультивибратор (тетрады порта D заполняются либо единицами, либо нулями в цикле, скорость миганий можно изменять с помощью порта В).

2. Бегущий огонек со сменой направления на линиях порта С.

3. Елочка 1 (линейка светодиодов, подключенная к линиям порта В, последовательно заполняется огнями и затем гаснет, после чего эффект периодически повторяется).

4. Бегущий огонек на линиях порта C должен сменить направление, если на пяти линиях порта В установлены логические единицы.

5. Елочка 2 (линейка светодиодов, подключенная к линиям порта, последовательно заполняется огнями и постоянно горит, а звезда – старший бит – моргает).

6. Если на выводы порта D пришло число с нечётным количеством единиц, то оно передаётся через порт В, если с чётным — через порт С.

7. «Бегущий огонёк» в одну сторону бежит по выводам порта B, в другую — порта В.

8. Одна тетрада поступающего на выводы порта D числа должна быть отправлена через порт B, другая через С.

9. Если поступившее на выводы порта D число чётное, то должны «мигать» выводы порта В, если нет – то порта С.

4. Загрузить для отладки программу генерации сигнала заданной частоты(программа Generator).

;****** Программа Generator

; Генератор импульсов с программируемым периодом Т=2n(1+X), где

; Х – число в регистре OCR1A, n – коэффициент деления предделителя

.INCLUDE "C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes\m8def.inc"

ldi r16,0x02; Линию РВ1 на вывод

out DDRB,r16;

ldi r16,0b01000000; Режим СТС таймера T1, состояние

; вывода РВ1 при сравнении меняется

out TCCR1A,r16; на противоположное

ldi r16,0b00001001; Режим СТС таймера T1 на частоте

out TCCR1B,r16; тактирования (n=1)

ldi r16,99; Модуль счета Х=99 для

out OCR1AL,r16; периода Т=200 тактов

m1: rjmp m1

Изменить программу так, чтобы период генерируемых прямоугольных импульсов на выводе РВ1 составил N секунд при использовании кварцевого резонатора на 16 МГц (N — вариант задания).





Дата публикования: 2014-11-04; Прочитано: 685 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.019 с)...