Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
progi_dlya_ekzamena.doc
Скачиваний:
3
Добавлен:
25.09.2019
Размер:
120.83 Кб
Скачать

2.7. Битовые операции

Микросхемы MCS-51 содержат в своем составе "булевый" процессор, который можно рассматривать как независимый процессор побитовой обработки, имеющий свое побитово-адресуемое ОЗУ, свой ввод-вывод и выполняющий свой набор команд. Внутреннее ОЗУ имеет 128 прямоадресуемых бит, пространство регистров SFR также поддерживает до 128 битовых полей. Побитно-адресуемыми являются все порты ввода-вывода, каждая линия которых может рассматриваться как однобитовый порт.

Набор булевых инструкций перечислен в табл. 2.7.

Каждый из отдельно адресуемых бит может быть установлен в "1", сброшен в "0", инвертирован, передан в разряд "Carry" или принят из него. Между любым прямоадресуемым битом и флагом переноса могут быть произведены логические операции "И" и "ИЛИ". Кроме того, по результату анализа состояния адресуемого бита возможно осуществление короткого (Short) условного перехода в соответствии с байтом смещения (relative).

Таблица 2.7.

Команды побитовой обработки.

Мнемоника Операция

ANL C, bit C=C.AND.bit

ANL C, /bit C=C.AND.(.NOT.bit)

ORL C, bit C=C.OR.bit

ORL C, /bit C=C.OR.(.NOT.bit)

MOV C, bit C=bit

MOV bit, C bit=C

CLR C C=0

CLR bit bit=0

SETB C C=1

SETB bit bit=1

CPL C C=.NOT.C

CPL bit bit=.NOT.bit

JC rel Переход, если C=1

JNC rel Переход, если C=0

JB bit, rel Переход, если bit=1

JNB bit, rel Переход, если bit=0

JBC bit, rel Переход, если bit=1; и обнуление bit

2.7.1 Сравнить поразрядно содержимое а и величины val и установить в 1, несовпадающие разряды прочие оставить без изменения.

NAME XRLCOM

Beg: mov r3, a; сохранение числа в регистре

Xrl a, VAL; операция деления по модулю 2, установить в 1 нсопад. Бит

Mov r2, a; временное сохранение результата

Mov a, r3; загрузка в А первоначального числа

Orl a, r2; операция Или с маской в регистре R2

END

2.7.2 Инвертировать разряды 3, 5, 7 аккумулятора.

NAME INVERT

Beg: mov r2, a; сохранение числа в регистре

Cpl a; инвертирование всех разрядов числа

Anl a, #01010100B; выделение в числе только 3,5,7 бит

Mov r3,a; сохранение в регистре

Mov a, r2; восстановление первоначального числа в А

Anl a, #10101011B; обнуление в первоначальном числе только 3,5,7 разрядов, чтобы они не мешали при след операции

Orl a, r3; логическое сложение с инверт числом в R3, при этом требуемые биты транслируются без изменения из R3, а остальное берутся из аккумулятора неизменными

END

2.7.3. Перейти к метке dest, если разряды 4,5,6 порта p2 равны 510 (1012).

NAME MASK2

Beg: mov a, p2; перенос числа из порта в А

Anl a, #01110000B; маскирование 4,5,6 разрядов

Cjne a, #0101000B, m1; переход, если в этих разрядах не 101B

Ljmp DEST; переход на метку, если в этих разрядах содержится 101В

M1: ; продолжение программы

END

2.7.4. Установить разряды 2,3,4 порта p0 равными 610 (1102) с сохранением содержимого остальных разрядов. Данные находятся в а.

NAME MASK3

Beg: anl p0, #11100011B; обнуление в первоначальном числе только 2,3,4 разрядов, чтобы они не мешали при следующе операции

Orl p2, #00011000B; логическое сложение с числом, в котором 2,3,4 разряды равны 110В

END

2.7.5. Проверить все биты в порту P1. Если какой-либо бит равен 1, надо обнулить регистр. Например, если бит 0 =1, то R0 надо обнулить, если бит 1 = 1, то R1 надо обнулить и т.д. Если в этом бите нуль, то соответствующий регистр установить в 0FFh.

NAME MASK4

Beg: jb p1.0, m1

Mov r0, #0ffh

Sjmp m2

M1: mov r0, #00h

M2: jb p1.1, m3

Mov r1, #0ffh

Sjmp m4

M3: mov R1, #00h

M4: jb p1.2, m5

Mov R2, #0ffh

Sjmp m6 ………………

M14: jb p1.7, m15

Mov r7, #0ffh

Sjmp m16

M15: mov r7, #00h

M16:

END

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