Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МПТ методичка исправл длин прилож.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
981.5 Кб
Скачать

3.1.4 Выделение и обработка отдельных бит информации

Байт информации, поступающий в аккумулятор МП из портов ввода, часто является совокупностью независимых бит, поэтому в задачах управления возникает необходимость выделения из байта определенного бита. Это может быть выполнено двумя способами: наложением маски или логическим сдвигом.

Наложение маски осуществляется логическими операциями с непосредственным операндом. Как правило, эта операция логического AND (команда ANI). В результате маскирования выбранного бита изменяется значение признака (Z=1, если результат равен 0). Передача управления осуществляется командами условного перехода: JZ (переход, если равно 0) и JNZ (переход, если не равно 0).

Например, фрагмент программы выделения бита D3 для схемы, представленной на (рис.6) имеет вид (табл.7):

Таблица 7

Адрес

Код

Метка

Мнемокод

Комментарий

IN PORT 1;

ввод из порта 1

ANI 08H;

наложение маски

00001000

JNZ MARK

если D3=1, то переход к программе с меткой MARK.

Рисунок 6 - Схема подключения группы дискретных датчиков.

Наложением маски удобно выделять группу бит. Например, маска

для определения замыкания хотя бы одного из переключателей D0-D3 записывается как число 00001111.

Для выделения старшего или младшего бита, а также последовательности бит используются операции логического сдвига (RAR, RAL, RRC, RLC). В результате выполнения этих операций модифицируется признак переноса С. Передача управления осуществляется командами: JC (переход, если С=1), или JNC (переход, если С=0).

Например, фрагмент программы выделения младшего бита D0 имеет вид (табл.8):

Таблица 8

Адрес

Код

Метка

Мнемокод

Комментарий

IN PORT 1;

ввод из порта 1

RAR;

сдвиг вправо

JC MARK

если D0=1, то переход

к подпрограмме

с меткой MARK.

Пример:

Первоначально в регистр L помещаем число 10000000 B и высвечиваем его на индикаторе. После небольшой задержки оператором RAR производим сдвиг содержимого регистра L вправо (01000000 B, 00100000 B, 00010000 B и т.д.) до тех пор пока 1 не сдвинется в самый младший бит (число 00000001 ). При следующем сдвиге в регистре признаков появится признак переноса (С=1) и программа завершит свою работу. При выполнении этой программы (табл.9) будут последовательно высвечены все сегменты индикатора от "h" - код 10000000, до "a " - код 00000001.

Таблица 9

Адрес

Код

Метка

Мнемокод

Комментарий

1

2

3

4

5

0800

2E 80

MVI L, 80H

код засветки поместить

в регистр L

(10000000 В - 80 Н)

0802

CD 90 08

LOOP

CALL LIGHT

высветить его

на индикаторе

0805

0E 30

MVI C, 30H

поместить в регистр С

количество циклов

задержки

0807

CD A0 08

CALL PAUSE

вызов подпрограммы

задержки

Продолжение таблицы 9

1

2

3

4

5

080A

7D

MOV A, L

код засветки поместим в аккумулятор

080B

1F

RAR

перейти к следующему сегменту

080C

DA 13 08

JC END

если высвечен последний сегмент, то завершить

программу

080F

6F

MOV L, A

иначе сохранить код следующего сегмента и

0810

C3 02 08

JMP LOOP

высветить его на

индикаторе

0813

FF

END

RST

возврат в "монитор"