Команда DIV AB производит деление содержимого аккумулятора A на содержимое регистра-расширителя B. После деления в аккумуляторе находится целая часть частного, а в расширителе – остаток. Флаги C и OV сбрасываются. При делении на нуль устанавливается флаг переполнения OV, а частное остается неопределенным.
Задание 1. Запустите отладчик AVSIM51 и занесите в память команду DIV AB. Исследуйте работу команды при различных значениях параметров. Данные занесите в табл.6.
Таблица 6
Исходные данные |
Получено |
Получено |
Теоретически |
Практически |
|
Рег.A Рег.B |
Рег.A Рег.B C OV |
Рег.A Рег.B C OV |
0AH 02H |
||
05H 00H |
||
05H 0FH |
Задание 2. Исследуйте подпрограмму C2_10, которая преобразует двоичное число в десятичное двоично-кодированное (BCD-число). Исходное однобайтное двоичное число размещается в аккумуляторе. При преобразовании может получиться трехразрядное BCD-число. Старшая цифра (количество сотен) будет находиться в регистре R0, а две младшие (десятки и единицы) – в аккумуляторе. Программу запишите в файл c2_10.asm.
C2_10: MOV B,#100 ;Загрузка 100 для вычисления количества сотен в числе
DIV AB ;Аккумулятор содержит число сотен, т.е. старшую цифру
MOV R0,A ;Пересылка старшей цифры в регистр R0
XCH A,B ;Пересылка остатка исходного числа в аккумулятор
MOV B,#10 ;Загрузка 10 для вычисления количества десятков в числе
DIV AB ;A содержит количество десятков, B – количество единиц
SWAP A ;Размещение числа десятков в старшей тетраде аккумулятора
ADD A,B ;Подсуммирование остатка (числа единиц), теперь аккумуля;тор содержит две младшие цифры BCD-кода
RET
END
Получите файлы c2_10.obj и c2_10.hex. Занесите в табл.7 результаты исследования подпрограммы при различных исходных данных.
Таблица 7
Исходные данные |
Получено |
Получено |
Теоретически |
Практически |
|
0AH |
10 |
|
FFH |
255 |
5. Исследование логических команд
Выполнение логических команд рассмотрим на следующих примерах.
5.1. Выбрать 3-й банк регистров и записать в R1 число 11H:
ORL PSW,#00011000B
MOV R1,#11H
5.2. Выбрать 0-й банк регистров и записать в R7 число 77H:
ANL PSW,#11100111B
MOV R7,#77H
5.3. Сбросить биты 0 – 3 порта 1:
ANL P1,#11110000B
5.4. Установить биты 0 и 2 порта 1:
ORL P1,#00000101B
5.5. Проинвертировать биты 0 – 3 аккумулятора:
XRL A,#0FH
5.6. Проинвертировать биты 7,3,0 порта 1:
XRL P1,#10001001B
Задание. Запустите отладчик AVSIM51, отключите отображение меток и занесите в память программ команды по пунктам 5.1 – 5.6. Исследуйте работу команд в пошаговом режиме. Наблюдайте за изменением содержимого регистров по соответствующим ячейкам памяти данных и порта P1. Выбранный банк регистров отображается в отладчике значением в RB.
6. Исследование команд операций с битами
6.1. Необходимо выдать содержимое аккумулятора в последовательном коде через нулевую линию порта 1, оставляя без изменения остальные биты порта. Передачу вести, начиная с младшего бита. Подпрограмма имеет вид:
TR: MOV R7,#8 ;Инициализация счетчика циклов
LOOP: RRC A ; Присвоение флагу переноса значение бита A.0
MOV P1.0,C ; Передача бита
DJNZ R7,LOOP ; Цикл, если не все биты переданы
RET
END
Задание. Получите файлы tr.asm, tr.obj, tr.hex. Проверьте работу подпрограммы TR сначала в пошаговом, а затем в автоматическом режиме, задавая значения в аккумуляторе (A) = AAH = 10101010B. Определите скорость передачи бита и байта (в значениях кбит/с и кбайт/с) при тактовой частоте микроконтроллера 12 МГц.
6.2. Вычислить логическую (булеву) функцию трех переменных
Y = X Ù `Z Ú W Ù ( X Ú Z ).
Переменные X,V,W поступают на линии 2,1,0 порта 1 соответственно. Результат Y необходимо вывести на линию 3 порта 1. Программа вычисления имеет вид:
Y: REG P1.3 ; Спецификация бит порта 1
X: REG P1.2
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.