Загрузить для отладки программу определения максимального элемента массива 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; просмотров: 1294;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.009 сек.