Смекни!
smekni.com

Обработка сигналов на основе MCS-51 (стр. 2 из 4)

Если имеем группу исполнительных механизмов, то для их управления необходимо сформировать управляющее слово (УС), каждый бит которого – соответствующий управляющий сигнал.

Для изменения УС достаточно выполнять логические операции над теми битами портов, которые необходимо изменить.

Например: ANL – для сброса тех битов УС, какие заданные нулями

ORL – для установки бит

XRL – инверсия бит по времени

Пример 19. Определение переполнений. При накоплении большого количества слагаемых может возникнуть переполнение разрядной сетки. Для определения этого используют модифицированный дополнительный код, который отличается от обычного дополнительного введением дополнительного знакового разряда. При добавлении k слагаемых таких разрядов должно быть r = log2 k.

Признаком переполнения служит отличие знаковых разрядов. Отметим, что использование r знаковых разрядов суживает диапазон изменения сигналов в 2r раз.

Пример 20. Сбросить биты 0,2,4,6 порта 2:

ANL Р2,#10101010В; сбрасывание бит 0,2,4,6 порта 2

Пример 21. Установить биты 0…3 из порта 1

ORL P1.#00001111В; (P1.0…P1.3) ¬ 1111

Можно также записать

ORL P1,#0FH

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

ANL PSW,#11100111В; сбрасывание бит RS0 и RS1

Пример 23. Проинвертировать биты порта Р1, которые отвечают единичным битам в аккумуляторе:

XRL Р1, А ; сумма по модулю два значения порта 1 и аккумулятора

Пример 24. Проинвертировать биты 7,6,5,4 порта 0:

XRL Р,#11110000В; сумма по модулю два значений порта 0 и константы

Можно также записать XRL Р0, #0F0H

Пример 25. Проинвертировать биты 0…3 в аккумуляторе:

XRL A,#0FH ; сумма по модулю два значения аккумулятора и константы

Пример 26. Настроить биты 1,3,5,7 порта 1 на ввод:

ORL Р1,#10101010В; установление P1.1, P1.3, Р1.5, Р1.7

Пример 2 Маскировка данных при вводе. Ввести в регистр R3 информацию из линий 1,3,5,6,7 порта 1:

MOV А, Р1 ; ввод байта с Р1

ANL А,#11101010В; маскировка

MOV R3, А ; передача в R3

Пример 28. Выполнить логический сдвиг вправо двухбайтового числа, которое размещено в R5, А:

SHIFTR: CLR С ; сбрасывание переноса

CPL С ; установление переноса

ХСН А, R5 ; обмен байтами

JNB А.7, L1 ; если R5.7=1, то снять флажок переноса

CLR C

RRC A ; сдвиг флажка переноса

L1: XCH A, R5 ; обмен

RRC A ; сдвиг младшего байта

Пример 29. Выполнить сдвиг влево двухбайтового числа, которое размещено в R5 и А:

SHIFT L: RLC А ; сдвиг младшего байта

XCH А, R5 ; обмен А и R5

RLC A ; сдвиг старшего байта

XCH А, R5 ; обмен

Пример 30. Управление группой бит порта.

В РПД находится массив распакованных десятичных цифр. Необходимо передать их внешнему устройству в соответствии с протоколом (рис. 2). Для передачи 4-х бит данных используются младшие линии порта 1. Линии Р1.4 и Р1.5 используются как сигналы квитирования, то есть передачу сигналов на выход МК сопровождает стробирующий сигнал на линии Р1.4. Внешнее устройство, которое приняло данные, сообщает об этом сигналом на входе Р1.5. Биты Р1.6 и Р1.7 не должны изменять своих значений.

Исходные данные программы: начальный адрес массива – (R0), длина массива – (R1).

ORL P1, #00100000В; настройка

; Р1.5 на ввод

LOOP: MOV A, @R0; загрузка байта

; в аккумулятор

ANL P1,#11100000В; сброс данных

; и строба

ORL P1, A ; выдача данных

ORL P1,#00010000В; выдача строба

WAIT: JNB Р1.5, WAIT; ожидание ответа

INC R0 ; продвижение указателя адреса

JNZ Rl, LOOP ; цикл, если не все данные переданные

4. Битовые операции в MCS-51

Пример 31. Операция Исключающее ИЛИ используется очень часто для сравнения бит, или их сброса. В кодах битового процессора такой операции нет, но легко осуществляется наложение логической операции Исключающее ИЛИ на флажок переноса:

JNB bit, LZ ; исключительное ИЛИ для флажка переноса

CPL С ; инверсия флажка

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

Пример 32. Преобразовать байт в последовательный код и передать его через Р1.0, не воздействуя при этом на остальные разряды порта. Передачу вести, начиная с младшего бита:

MOV R7,#8D ; инициализация счетчика циклов

LOOP: RRC А ; присвоение переноса значение бита А.0

MOV Р1.0, С ; передача бита

DJNZ R7, LOOP ; цикл, если не все биты переданы

Время выполнения программы 41 мкс, время передачи – 5 мкс (скорость передачи – 200 кбит/с).

Пример 33. Вычислить булеву функцию 3-х переменных Y=(X×

)+W (X+V). Переменные X, V, W поступают на линии 2, 1, 0 порта 1; результат Y необходимо вывести на линию 3 порта 1. Для сохранения промежуточных значений использовать бит F0H.

Y BIT P1.3 ; спецификация бит порта 1

Х BIT P1.2

V BIT Р1.1

W BIT Р1.0

MOV С, X ; ввод Х

ANL С,/V ; X×

MOV F0, С ; запоминание результата в F0

MOV С, Х ; ввод Х

ORL С, V ; X+V

ANL С, W ; W (X+V)

ORL С, F0 ; (W (X+V))+(X×

)

MOV Y, С ; вывод результата

Время выполнения программы 14 мкс.

Пример 34. Организовать последовательную передачу данных из аккумулятора на 0 вывод порта 2. Пересылку вести манчестерским кодом (каждый бит кодируется двумя интервалами: первый интервал имеет инверсию бита, второй – его прямое значение):

MOV R0,#8D ; инициализация счетчика бит

LOOP: RRC А ; (С)¬(сдвиг мл. бита из акк-ра в перенос)

CPL С ; инверсия бита

MOV Р2.0, С ; передача инверсии бита

CPL С ; восстановление бита

NOP;

NOP ; выравнивание длины интервалов

NOP;

MOV P2.0, С ; передача прямого значения бита

DJNZ R0, LOOP ; цикл, если счетчик не нулевой

Передача начинается с младших битов. Продолжительность одного интервала 6 машинных циклов (6 мкс), время передачи одного бита – 12 мкс, время передачи байта – 96 мкс (скорость передачи 83 кбит/с, или 10,4 кбайт/с).

Пример 35. Пошаговый режим работы. Для его реализации необходимо:

- запрограммировать одно из внешних прерываний (к примеру INT0) на активизацию по уровню;

- в подпрограмме обработки прерывания ожидать последовательность «1» – «0» на входе INT0 (вывод P3.2), задаваемую, например, с помощью кнопки.

В основной программе необходимо дописать следующее:

SETB ІЕ.0 ; разрешение прерывания уровня 0

CLR TCON.0 ; прерывания разрешены по нулевому уровню

…; продолжение основной программы

Подпрограмма обработки прерывания должна закончиться следующими командами:

…; подпрограмма обработки

L1: JNB P3.2, L1 ; ожидание уровня 1

L2: JB P3.2, L2 ; ожидание уровня 0

RETI ; возвращение и выполнение одной; команды основной программы; после чего снова происходит ; возвращение в подпрограмму.

Пример 36. Обращение к медленным микросхемам внешней памяти. Программным путем можно задать необходимую длительность импульсов WR и RD. Например, если сигнал

должен длиться 50 мкс, то это осуществляется так:

CLR P3.7 ;

=0

MOV R3,#24D ; инициализация счетчика (2 мкс)

L0: DJNZ R3, L0 ; цикл (24*2 мкс)

SETB P3.7 ;

=1

5. Взаимодействие МК с объектом управления

Пример 3 Опрашивание двоичного датчика, например, конечного выключателя.

Ключ подключен к входу MCS-51: порт 1, разряд 3.

WAIT0: JNB P1.С, WAIT0; ожидание размыкания датчика

WAITC: JB P1.3, WAITC; ожидание замыкания датчика

Пример 38. Опрашивание группы двоичных датчиков (аналогично нахождению заданного кода или комбинации датчиков).

WTCODE: MOV A,#10D ; загрузка в А эталонного кода 00001010В

WAIT: CJNE A, P1, WAIT; если кодовая комбинация не совпала с заданной, то ждать

EXIT: ; вывод

Пример 39. При достижении значения параметра равного 135, передать управление на подпрограмму с меткой LABEL А, иначе LABEL В.

MOV A,#135D ; загрузка значения параметра

CJNE A, P1, LABEL В; сравнение и передача управления

LABEL А:

LABEL В:

Пример 40. Зафиксировать импульс, поступающий на вход ОМЭВМ (P1.3) и его окончание.

WAITC: JB P1.3, WAITC; ожидание Р1.3=0

WAIT0: JNB P1.3, WAIT0; ожидание Р1.3=1

Зафиксированный импульс имеет вид

.

Для импульса обратного вида

нужно поменять WAIT0 и WAITC местами.

Таблица 1 – Минимальная продолжительность сигнала, которую определяет МК

Подключение датчика к выводам Минимальная длительность импульса, мкс
(отрицательного) (положительного)
P1, P2, BUS/P0 10/2 12,5/2
T0, Т1 5/2 5/2
ЗПР 10/2 5/2

Пример 41. Передать управление на метку TEST и установить Р3.7, если на Т0 поступит 30 импульсов.

MOV R1,#30D ; загрузка числа импульсов

L1: JB P3.4, L1 ; ожидание нуля

L0: JNB P3.4, L2 ; ожидание единицы

JMP L0

L2: DJNZ R1, L1 ; повторить 30 раз

JMP TEST

TEST: SETB Р3.7 ; установление бита

Пример 42. Схема для фиксации короткого импульса: D-триггер устанавливается коротким импульсом, а сбрасывается программно, после определения наличия сигнала на входе Т0.

Пример 43. Устранение дребезжания контактов. Дребезжание состоит в том, что благодаря упругим свойствам контактов возможен отрыв контактов, который приводит к переходному процессу. При этом сигнал может быть прочитан многократно как случайная последовательность нулей и единиц. Это можно устранить с помощью триггера (рис. 6).

Чаще всего с помощью MCS51 это делается программно так, как показано на рис. 7 и рис. 8.

Реализация первого метода, количество совпадений задано в R3.

DBNC: MOV R3,#3 ; инициализация счетчика

DBNC1: JB P3.4, DBNC; если контакт замкнутый,
; то начать отсчет опрашиваний
; сигнала сначала

DJNZ R3, DBNC1 ; повторять, пока значение в R3

; не станет равным 0

JB P3.4, DBNC; конечная проверка

Временная задержка подбирается экспериментальное (1–10 мс) в зависимости от типа датчика.