MOV R7, 01H ; Загрузить счетчик элементов
CLR A ; Очистить аккумулятор
CYCLE: ADD A, @R0 ; Суммирование аккумулятора с содержимым ячейки
INC R0 ; Адрес очередного элемента массива
DJNZ R7, CYCLE ; Цикл суммирования, если (R7) ¹ 0
CLR RS1 ; Переход в 0-й банк РОН
RET ; Возврат из подпрограммы
END ; Конец текста программы
Получите файлы check.obj и check.hex. Запустите симулятор и загрузите в него файл для отладки. Перед выполнением программы отключите отображение меток и занесите исходные данные на входы портов. Адреса ячеек массива ПД – в диапазоне от 20H до 37H. Количество элементов в массиве – от 04H до 08H, а значение константы – 01H до FFH. Выполните программу в пошаговом режиме, наблюдая за переключением банков регистров (по значениям в RB), регистра-указателя стека и областью стека, а также ячейками памяти данных. Следите за выполнением каждой команды программы – это очень важно! Убедитесь в правильности работы программы. Затем осуществите прогон программы в автоматическом режиме, задав новые исходные данные.
3.3. Задания для самостоятельной работы
1. Запишите и выполните программу, которая заносит в стек содержимое регистров: R1, R3 и R5 1-го банка, аккумулятора и DPTR, а затем восстанавливает их содержимое. Стек организуйте с адреса 60H памяти данных.
2. Напишите и выполните программу, которая определяет минимальное число в массиве ячеек памяти данных (числа двоичные целые без знака). Начальный адрес массива вводится из порта P1, а конечный – из порта P2. Найденное число выводится в порт P0. Процедуру нахождения минимального числа оформите как подпрограмму. Стек организуйте с адреса 70H.
3. Напишите и выполните программу, которая делает преобразование однобайтных целых двоичных чисел со знаком в прямом коде, находящихся в памяти данных с адреса 20H по 30H, в дополнительный код и помещает их во внешнюю память данных, начиная с адреса 0000H. Напомним, что для положительных чисел прямой код совпадает с дополнительным. Процедуру преобразования кодов оформите как подпрограмму. Стек определите с адреса 65H. При проверке работы программы по указанным адресам занесите произвольные значения (положительные и отрицательные числа).
4. Напишите и выполните программу, которая выполняет преобразование двухбайтного целого двоичного числа со знаком в прямом коде в двухбайтное число в дополнительном коде. Исходное число поступает в микроконтроллер через порты P0 (младший байт) и P1 (старший байт). Число в дополнительном коде выводится через порты P2 (младший байт) и P3 (старший байт). Напомним, что знаковый разряд числа находится в старшем байте, а для положительных чисел прямой и дополнительный коды одинаковы. Процедуру преобразования в дополнительный код оформите как подпрограмму. Стек определите с адреса 50H. Выполните проверку работы программы для положительных и отрицательных чисел.
4. Содержание отчета
Наименование и цель работы. Краткое описание изучаемых команд. Программы и содержимое области стека, исследуемые в п.3.1.1, 3.1.2. Программы к заданиям для самостоятельной работы (комментарии обязательны!). Hex-файлы для демонстрации разработанных программ.
Контрольные вопросы
1. Где размещается стек в МК51 после сброса микроконтроллера?
2. Как можно задать область памяти, отведенную под стек?
3. Необходимо сохранить в стеке содержимое регистров PSW, DPTR, A. Какими командами их поместить в стек, а затем извлечь из него?
4. Укажите порядок выполнения микроконтроллером команды CALL.
5. Укажите порядок выполнения микроконтроллером команды RET.
6. Как можно сохранить в стеке содержимое регистров общего назначения?
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.