Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
проги для экзамена.doc
Скачиваний:
0
Добавлен:
23.12.2018
Размер:
127.49 Кб
Скачать

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.8. Работа с операндами увеличенной длины

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

2.8.1.Увеличить содержимое регистров r4, r5 (16-ти разрядное число) на 3 (с проверкой возможного переполнения младшего разряда 16-ти разрядного числа).

Распределение ресурсов: Для операции увеличения 16-разрядного числа на не очень большую цифру можно использовать операцию инкремента регистра DPTR. При этом не надо проверять перенос из младшего байта в старший, так для DPTR он происходит автоматически.

NAME INCR1

Beg: mov dph,r4 ;пересылка содержимого старшего байта числа в старший регистр DPTR

mov dpl,r5 ;пересылка содержимого младшего байта числа в младший регистр DPTR

inc dptr ;увеличение числа на 3

inc dptr ;

inc dptr ;

mov r4,dph ;обратная пересылка полученного числа в R4, R5

mov r5,dpl ;

END

2.8.2. Сдвинуть вправо 16 - ти разрядное число на 1 разряд.

Распределение ресурсов: В отличие от задачи 2.8.1. здесь придется использовать в качестве промежуточного регистра аккумулятор, так как операция сдвига осуществляется только для этого регистра. При этом необходимо проверять наличие переноса из младшего байта в старший. Пусть число располагается в регистрах R3 (старший байт), R4 (младший байт).

NAME SHIFT1

Beg: clr c ;очистка бита переноса перед операцией сдвига

mov a,r4 ;пересылка младшего байта в АСС

rrc a ;сдвиг вправо с учетом бита переноса, возможный перенос при сдвиге помещается во флажок С

mov r4,a ;обратная пересылка уже сдвинутого младшего байта

mov a,r3 ;пересылка старшего байта в АСС

rrc a ;сдвиг вправо с учетом бита переноса

mov r3,a ;обратная пересылка уже сдвинутого старшего байта

END