3. Занесите в память симулятора следующую программу
CLR C ; Сбросить флаг C
RRC A ; Сдвиг аккумулятора вправо через перенос
MOV P1, A ; Вывод результата в порт P1
NOP
Программа выполняет деление содержимого аккумулятора на 2. Для сдвига вправо используется команда сдвига через перенос, причем предварительно флаг C сбрасывается. Это сделано для того, чтобы единица младшего разряда аккумулятора после сдвига не поступила в старший разряд результата и не исказила результат. При таком построении программы может возникнуть ошибка за счет потери младшего разряда исходного числа.
Выполните программу в пошаговом режиме и заполните табл. 5.7.
Таблица 5.7
-
Исходное значение
Результат
HEX-код
Двоичный код
HEX-код
Двоичный код
88
1000 1000
44
0100 0100
82
1000 0010
41
0100 0001
81
1000 0001
40
0100 0000
Задания для самостоятельной работы
1. Напишите и выполните программу, которая производит умножение содержимого регистра R5 на константу 4,5. Результат умножения содержимого регистра R5 на константу 4,5 можно представит таким образом
4,5 * (R5) = 4 * (R5) + (R5) / 2.
Из формулы видно, что умножения на 4,5 можно заменить суммированием сдвинутых влево и вправо содержимого регистра R5.
2. Напишите и выполните программу умножения содержимого ячейки ПД с адресом 40H на константу 10.
Применение логических команд для преобразования кодов
При обработке данных в микроконтроллерах применяются прямой, обратный и дополнительный коды для представления двоичных чисел как беззнаковых, так и со знаком. Следует отметить, что для положительных чисел прямой, обратный и дополнительный коды совпадают друг с другом.
Задания для самостоятельной работы
1. Разработайте и выполните программу, которая преобразует беззнаковое двоичное число, поступающее из порта P1 в
-
обратный код, который помещается в регистр R7;
-
дополнительный код, который помещается в ячейку ПД с адресом 33H.
2. Разработайте и выполните программу, которая преобразует 16-разрядное беззнаковое двоичное число, поступающее в МК из порта P2 (младший байт) и порта P1 (старший байт) в
-
обратный код, который помещается в регистр DPTR
-
дополнительный код, который помещается в ячейки ПД с адресами 30H (младший байт) и 31H.
Замечание. Для получения дополнительного кода двухбайтного числа следует использовать команды сложения, так как команды инкремента не влияют на флаг переноса C, что может привести к ошибке.
Вывод: изучили и практически исследовали работу логических команд однокристальных микроконтроллеров семейства MCS-51 (МК51) на персональном компьютере.