Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kharakhnin / ПОСОБИЕ_Харахнин.doc
Скачиваний:
214
Добавлен:
08.03.2016
Размер:
17.89 Mб
Скачать

3.3. Логические операции

Логические команды позволяют проводить различные операции с битами, можно сбрасывать биты в ноль (функция “И”), устанавливать биты в единичное состояние (функция “ИЛИ”) или инвертировать их (функция “или исключающее“). Рассмотрим несколько примеров.

Пример 1. Пусть к разрядам порта Р1.0, Р1.1, Р1.2 подключены три позиционных датчика. Требуется выделить эти разряды.

<1> MOV A,P1 ; Опрос состояния порта Р1

<2> ANL A,#07H ; Выделение разрядов позиционных датчиков

Вторая команда вычисляет логическую функцию “И” над байтом, поступившим из порта Р1. Все биты со старшего до Р1.3 включительно сбрасываются в ноль. Результат в аккумуляторе определяет, в каком состоянии находятся датчики. Если они все разомкнуты, то А = 07Н, если замкнут Д1, то А = 06Н, если замкнут Д2, то А = 05Н, если замкнут Д3, то А = 03Н. Возможны комбинации, когда включены одновременно несколько датчиков. Проанализируйте результат, получаемый в аккумуляторе для этих ситуаций.

Пример 2. Выбрать нулевой банк регистров.

ANL PSW,#11100111B

Пример 3. Требуется установить разряды с 0 по 3 порта Р1. Для этого используем команду, выполняющую логическое “ИЛИ”.

ORL P1,#00001111B

Пример 4. Проинвертировать биты с 4 по 7 порта Р3. Для этого используем команду “ ИЛИ ИСКЛЮЧАЮЩЕЕ ”.

XRL P1,#11110000B

Пример 5. Проинвертировать содержимое регистра R7. Используем функцию “НЕ”.

<1> MOV A,R7

<2> CPL A

<3> MOV R7,A

З а д а н и е д л я с а м о с т о я т е л ь н о й р а б о т ы

1. Разработайте фрагменты программы, реализующие следующие алгоритмы:

(A) 0Fh [20h] 08h

(B) 05h [21h] 14h

[30h] (A) (B) (A) 05h

[31h] (A) (B) (B) НЕ([21h]/2)

[32h] (A) (B) [25h] (A) [20h]

[33h] НЕ((A) + (B)) [26h] (B) [25h]

[34h] [33h] – НЕ([32h]) [27h] (A) [20h]

3.4. Операции с битами

Процессор однокристальных МК семейства MCS51 называют битовым процессором / 4 /. Он как нельзя лучше подходит для задач управления технологическим оборудованием. Рассмотрим примеры.

Пример 1. Требуется передать информационный байт через разряд Р1.0 в последовательном формате.

В примере применяется сдвиг вправо содержимого аккумулятора, таким образом, младший бит аккумулятора попадает в бит переноса.

<1> TRANSMIT: MOV R5,#08H ; Загрузка счетчика циклов

<2>SDVIG: RRC A ; Сдвиг вправо через перенос

<3> MOV P1.0,C ; Передача бита в Р1.0

<4> DJNZ R5,SDVIG ; Если не все, то продолжить

Пример 2. Сформировать 10 прямоугольных импульсов в разряде Р3.0.

<1> IMPULS: CLR P3.0 ; Сброс бита Р3.0 (P3.0=0)

<2> MOV R3,#20; Загрузка счетчика фронтов в серии импульсов

<3>AGAIN: CPL P3.0 ; Формирование текущего фронта импульса

<4> CALL DELAY ; Вызов задержки, определяющей частоту

<5> DJNZ R3,AGAIN; Если не все, то продолжить

Каждый прямоугольный импульс имеет два фронта, поэтому в регистр R3 загружается число 20. В каждом цикле происходит инвертирование разряда Р3.0. Задержка DELAY определяет частоту следования импульсов.

Пример 3. Установить второй банк регистров.

<1> CLR RS0

<2> SETB RS1

Пример 4. Вычислить логическую функцию трех переменных

Y = (X1  X2)  (X3  X1)

Переменные A, B, D поступают соответственно с линий порта Р3.0, Р3.1, Р3.2. Результат необходимо отправить в разряд Р2.0.

<1> X1 bit P3.0 ; Обозначение битов портов

<2> X2 bit P3.1 ;

<3> X3 bit P3.2 ;

<4> Y bit P2.0 ;

<5> MOV C,X1 ; Ввод бита Х1

<6> ORL C,X2 ; Выполнение Х1 OR X2

<7> MOV F0,C ; Сохранить результат во флаге пользователя

<8> MOV C,X3 ; Ввод бита Х3

<9> ORL C,X1 ; Выполнение Х3 OR Х1

<10> ANL C,F0 ; (Х1 OR X2) AND (Х3 OR Х1)

<11> MOV Y,C ; Вывод результата

З а д а н и я д л я с а м о с т о я т е л ь н о й р а б о т ы

  1. Вычислить логическую функцию трех переменных

Y = (X1X2X3)  (X1X3).

  1. Вычислить логическую функцию трех переменных

Y = (X1  X2) (X1  X3).

Примечание: Функция “ИЛИ исключающее” реализуется следующим образом [(Х1  /X2)  (/X1  X2)], знак “ / ” означает инверсию сигнала.

  1. Проанализируйте следующие фрагменты и определите содержимое аккумулятора: ( первоначально C=0):

MOV A,#15 MOV A,#20

SETB ACC.7 CPL ACC.2

CPL ACC.0 CPL A

CPL A CLR ACC.7

MOV C,ACC.5 SETB 20H.0

ANL C,ACC.3 MOV C,20H.0

ORL C,ACC.4 MOV ACC.3,C

CPL A CPL ACC.6

A = ? С=? A = ? С=?

Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.

Оставленные комментарии видны всем.