
- •24 Содержание
- •1. Введение
- •2. Содержание лекционного курса
- •3. Список рекомендуемой литературы
- •4. Компьютерные обучающие программы
- •5. Упражнения по решению задач
- •5.1. Назначение выводов, программная модель мк51
- •5.2. Типы и форматы команд мк51
- •5.3. Примеры выполнения команд мк51
- •5.4. Примеры программ обработки данных
- •Отладка прикладных программ для микроконтроллера мк51 ( Лабораторная работа )
- •7. Варианты заданий для контрольной работы №1
5.3. Примеры выполнения команд мк51
Задача 19. Оценить результат выполнения команды ADD A,R6. До выполнения команды (А)=С3Н, (R6)=AAH.
Решение. Команда складывает содержимое аккумулятора и регистра R6, оставляя результат в аккумуляторе: (А)= C3H+AAH=6DH. При этом устанавливаются флаги: AC=0, C=1, OV=1. При сложении целых без знака флаг переноса С=1 указывает на появление переполнения (сумма больше 255). При сложении целых чисел со знаком флаг OV=1 указывает на отрицательную величину, полученную при суммировании двух положительных операндов или на положительную сумму для двух отрицательных операндов (как в нашем случае).
Задача 20. Можно ли с помощью команды DA A преобразовать двоичное число в аккумуляторе в двоично-десятичный код?
Ответ. Нет, нельзя. Команда «десятичная коррекция аккумулятора для сложения» вместе с предшествующей ей командой ADD или ADDC используется для сложения чисел, представленных в двоично-десятичном формате.
Например, после выполнения команд
MOV A,#37H
MOV 70,#48H
ADD A,70
DA A
в аккумуляторе получим число 85Н, которое можно трактовать как двоично-десятичный код десятичного числа 85, равного сумме десятичных чисел 37 и 48, предварительно записанных в аккумулятор и семидесятую ячейку резидентной памяти данных в двоично-десятичном коде.
Команда DA A корректирует результат предварительного сложения операндов, добавляя 06Н, 60Н или 66Н в зависимости от начального состояния аккумулятора и слова состояния программы РSW (флагов С и АС).
Задача 21. Как выполняется команда MUL AB?
Ответ. Команда «умножение» умножает 8-битовые целые числа без знака из аккумулятора и регистра В. Старший байт 16-битового произведения помещается в регистр В, а младший - в аккумулятор. Флаг переноса С всегда сбрасывается. Флаг переполнения OV устанавливается, если результат больше 255. Время выполнения команды - четыре машинных цикла.
Пусть (А)=(В)=100=64Н. Их произведение 10000=2710Н. После выполнения команды MUL AB в регистре В будет 27Н, в аккумуляторе - 10Н. Флаг С=0, флаг OV=1.
Задача 22. Как выполняется команда DIV AB?
Ответ. Команда «деление» делит 8-битовое целое без знака из аккумулятора А на 8-битовое целое без знака в регистре В. Аккумулятору присваивается целая часть частного (старшие разряды), а регистру В - остаток. Флаги С и OV сбрасываются. Если (А)<(B), то флаг дополнительного переноса АС не сбрасывается. При делении на 0 флаг OV устанавливается, а содержимое А и В становится неопределенным. Время выполнения команды - четыре машинных цикла.
Пусть аккумулятор содержит число 251 (0FBH или 11111011В), а регистр В - число 18 (12Н или 00010010В). После выполнения команды DIV AB в аккумуляторе будет число 13 (0DH или 00001101В), а в регистре В - число17 (11Н или 00010001В), т.к. 251=(13*18)+17. Флаги С и OV будут сброшены.
Задача 23. Инвертировать сигналы, выводимые в младшую и старшую линии порта Р1.
Ответ. Это можно сделать, последовательно выполнив команды инверсии битов CPL P1.0 и CPL P1.7. Одновременно инвертировать оба бита можно логической командой XRL P1,#10000001B. При выполнении команд изменяется содержимое защелки порта.