Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР_5.doc
Скачиваний:
3
Добавлен:
27.09.2019
Размер:
73.73 Кб
Скачать

3.2. Исследование команд обмена

Запишите в память программ симулятора коды команд

MOV A, #0AAH ; Загрузить в аккумулятор число AAH

MOV R1, #11H ; Загрузить в аккумулятор число 11H

MOV 30H, #33H ; Загрузить в ячейку 30H число 33H

MOV B, #0BBH ; Загрузить в регистр B число BBH

XCH A, R1 ; Обмен аккумулятора с регистром R1

XCH A, 30H ; Обмен аккумулятора с ячейкой ПД

XCH A, B ; Обмен аккумулятора с регистром B

MOV R0, #30H ; Загрузить в R0 адрес ячейки ПД

MOV @R0, # 33H ; Загрузить в ячейку ПД число 33H

MOV A, #55H ; Загрузить в аккумулятор число 55H

XCHD A, @R0 ; Обмен младшей тетрады аккумулятора с младшей тетрадой

 ячейки ПД

NOP

Исследуйте работу программы в пошаговом режиме. Наблюдайте за изменением содержания регистров, ячеек памяти, а также флагами МК.

3.7. Исследование команд чтения из памяти программ

В микроконтроллерах семейства МК51 имеется возможность прочитать данные из памяти программ, в том числе для выборки элемента с порядковым номером из таблицы. Обычно для этих целей используется команда

MOVC A, @A + DPTR.

Действие этой команды можно описать так переслать в аккумулятор содержимое ячейки памяти программ, адрес которой вычисляется сложением двухбайтного значения регистра-указателя данных DPTR с однобайтным беззнаковым операндом из аккумулятора. Эту же операцию можно интерпретировать, как чтение элемента с номером, который задан в аккумуляторе, из таблицы с начальным адресом, который хранится в DPTR.

Рассмотрим применение этой команды на примере вычисления функций с помощью таблиц. Предположим, что нужно иметь программу вычисления квадрата целого десятичного числа X в диапазоне от 0 до 10 включительно. Для вычисления используем подпрограмму SQ, которая выбирает результаты из таблицы SQTAB, размещенной в памяти программ. Текст подпрограммы

;****************************************************************

; SQ – подпрограмма вычисления квадрата числа

; Входной параметр регистр R7 – десятичное число в HEX-коде

; Выходной параметр регистр A – квадрат исходного числа в HEX-коде

;*****************************************************************

SQ: MOV A,R7 ; Пересылка исходного числа в аккумулятор

MOV DPTR, #SQTAB ; Загрузить в DPTR адрес таблицы SQTAB

MOVC A, @A+DPTR ; Пересылка в аккумулятор данных из таблицы

RET ; Возврат из подпрограммы

; Таблица квадратов чисел

SQTAB: DB 00H

DB 01H

DB 04H

DB 09H

DB 10H

DB 19H

DB 24H

DB 31H

DB 40H

DB 51H

DB 64H

END ; Конец программного модуля

3.7.1. Создайте в вашей папке файл sq.asm и запишите в него коды программы SQ.

Получите файлы с расширением .obj и .hex. Запустите симулятор AVSIM51 и загрузите в него файл sq.hex. Отключите отображения меток с помощью комбинации клавиш Alt-F5. При рассмотрении текста подпрограммы SQ недоумение могут вызвать команды, расположенные с адреса 0006H. В исходной программе здесь должны располагаться константы 00H, 01H и т.д. Дело в том, что симулятор AVSIM51 не может различать константы и коды команд, которые размещены в программной памяти. Любые данные он интерпретирует как коды команд. Таким образом, значению 00H соответствует команда NOP и т.д.

Отладка подпрограммы SQ состоит в проверке соответствия полученных данных (выходной параметр) и исходных данных (входной параметр). Исследуйте работу подпрограммы SQ в пошаговом режиме при следующих исходных данных (R7) = 00H, (R7) = 05H, (R7) = 0AH. Выполнение подпрограммы заканчивайте при достижении команды RET.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]