Однокристальные микроконтроллеры семейства MCS-51. Подпрограммы и стек. Память данных. Исследование команд загрузки и извлечения из стека, страница 5

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.  Как можно сохранить в стеке содержимое регистров общего назначения?