Загрузить для отладки программу определения максимального элемента массива 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 — вариант задания).
Дата добавления: 2016-01-09; просмотров: 1286;