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

3.3. Команды инкремента

Микроконтроллеры семейства МК51 имеют следующие команды инкремента

INC A ; (A)  (A) + 1 - Инкремент аккумулятора

INC Rn ; (Rn)  (Rn) + 1 - Инкремент регистра

INC ad ; (ad)  (ad) + 1 - Инкремент прямоадресуемого байта

INC @Ri ; ((Ri))  ((Ri)) + 1 - Инкремент байта из памяти данных

INC DPTR ; (DPTR)  (DPTR) + 1 - Инкремент указателя данных

Команды инкремента не влияют на флаги МК (за исключением INC A, которая может изменить флаг паритета P).

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

INC A ; Инкремент аккумулятора

INC R2 ; Инкремент регистра R2

INC 30H ; Инкремент содержимого ячейки памяти с адресом 30H

INC B ; Инкремент регистра B

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

INC @R0 ; Инкремент содержимого ячейки 38H

INC DPTR ; Инкремент регистра DPTR

NOP

Занесите исходные данные в регистры (A) = 10H, (R2) = FFH, (B) = 88H, (DPTR) = 1011H, ячейки памяти данных (30H) = 33H, (38H) = 55H.

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

3.4. Команды декремента

Микроконтроллеры семейства МК51 имеют следующие команды декремента

DEC A ; (A)  (A) – 1 - Декремент аккумулятора

DEC Rn ; (Rn)  (Rn) – 1 - Декремент регистра

DEC ad ; (ad)  (ad) – 1 - Декремент прямоадресуемого байта

DEC @Ri ; ((Ri))  ((Ri)) – 1 - Декремент байта из памяти данных

Команды декремента не влияют на флаги МК (за исключением DEC A, которая может изменить флаг паритета P).

Обратите внимание, что в МК51 отсутствует команда декремента регистра-указателя данных DPTR.

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

DEC A ; Декремент аккумулятора

DEC R2 ; Декремент регистра R2

DEC 30H ; Декремент содержимого ячейки памяти с адресом 30H

DEC B ; Декремент регистра B

MOV R0, #38H ; Загрузить в регистр R0 число 38H (адрес ячейки памяти)

DEC @R0 ; Декремент содержимого ячейки ПД с адресом 38H

NOP

Занесите исходные данные в регистры (A) = 10H, (R2) = 00H, (B) = FFH и ячейки памяти данных (30H) = AAH, (38H) = 55H.

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

3.5. Команда десятичной коррекции аккумулятора

В микроконтроллерах семейства МК51 имеется возможность складывать десятичные числа, представленные в двоично-десятичном коде. Обычно для представления десятичного числа в МК используется так называемый упакованный формат, в котором байт разбивается на две тетрады. При этом младшая тетрада определяет младшую десятичную цифру в двоично-десятичном коде, а старшая тетрада – старшую цифру в двоично-десятичном коде. Диапазон представления десятичных чисел в упакованном формате составляет от 0 до 99. Пример записи чисел в упакованном формате

1001 0111 = 97,

0010 1000 = 28.

Десятичные двоично-кодированные числа в упакованном формате можно складывать с применением команд сложения ADD и ADDC. Однако после этого требуется проводить коррекцию результата, так как эти команды выполняют сложение по правилам двоичной арифметики.

Коррекция результата сложения выполняется с помощью команды DA A по следующим правилам в 2 этапа

  • на 1-м этапе проводится коррекция младшей тетрады содержимого аккумулятора при этом, если ее значение получилось более 9 или установлен флаг дополнительного переноса AC = 1, то к содержимому аккумулятора добавляется число 6 (0110 в двоичном коде)

  • на 2-м этапе проводится коррекция старшей тетрады при этом, если ее значение больше 9 или установлен флаг переноса C = 1, то к содержимому старшей тетрады аккумулятора добавляется число 6 (0110 в двоичном коде).

Пример. Пусть в аккумуляторе находится число 79H (десятичное число 79 в упакованном формате). Требуется сложить его с числом 38H (десятичное число 38 в упакованном формате). Команда сложения ADD A, #38H выполняется следующим образом

Переносы 1  1  1  1  1

0 1 1 1 1 0 0 1

+

0 0 1 1 1 0 0 0

---------------------------------------------------

1 0 1 1 0 0 0 1

Полученный результат не является двоично-десятичным кодом.

Выполним коррекцию результата сложения с помощью команды DA A.

На 1-м этапе производим коррекцию младшей тетрады содержимого аккумулятора. Поскольку при сложении был перенос из 3-го разряда, т.е. установлен флаг AC = 1, то к младшей тетраде прибавляется число 6

1011 0001

+

0110

----------------

  1. 0111

На 2-м этапе производим коррекцию старшей тетрады содержимого аккумулятора. Поскольку старшая тетрада больше 9, то к ней прибавляется число 6

Переносы 1  1  1  1

1 0 1 1 0 1 1 1

+

0 1 1 0

------------------------------------------------------------

0 0 0 1 0 1 1 1

Таким образом, в аккумуляторе будет число 17H (десятичное число 17 в упакованном формате), а флаг переноса окажется установлен C = 1.

Проверим результат сложения по правилам десятичной арифметики 79 + 38 = 117.

Результат получен правильный. Следует отметить, что команда DA A корректирует результат только сложения десятичных двоично-кодированных чисел. Коррекция результата вычитания десятичных чисел выполняется по специальным программам.

3.5.1. Занесите в память симулятора коды программы сложения двух десятичных чисел 53 и 39

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

ADD A, #39H ; Сложение с числом 39H

DA A ; Десятичная коррекция аккумулятора

NOP

Выполните программу сложения в пошаговом режиме без команды десятичной коррекции аккумулятора. Занесите содержимое аккумулятора в левую колонку табл. 6.

Таблица 6

Содержимое аккумулятора

Получено практически

Получено теоретически

Без коррекции

С коррекцией

Без коррекции

С коррекцией

Затем выполните программу сложения с командой коррекции содержимого аккумулятора. Занесите результат также в табл. 6.

Выполните проверку правильности работы программы «вручную». Сначала проведите сложение по правилам двоичной арифметики, а затем произведите десятичную коррекцию содержимого аккумулятора. Результаты занесите в табл. 6. Проанализируйте полученные результаты.

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