Рефераты. Обработка сигналов на основе MCS-51

Программа переводит двоичное число, находящееся в аккумуляторе, в двоично-десятичный код, который может быть трехразрядным (в десятичной системе счисления). В этом случае число сотен будет размещено в R0, десятки и единицы – соответственно в А и В.

MOV   B,#100D    ; (B) ¬ 100 для вычисления числа сотен в числе

DIV     AB            ; в А є число сотен (то есть старшая цифра)

MOV   R0, A        ; пересылка в R0 старшей цифры

ХСН    А, В          ; пересылка остатка от деления входного числа в А

MOV   B,#10D     ; (В)¬10 (определяется число десятков в числе)

DIV     AB            ; в А – число десятков, В-число единиц

SWAP A              ; размещение числа десятков в старшей тетраде А

ADD    А, В          ; суммирование остатка (числа единиц) аккумулятор сохраняет две младших цифры.

Время преобразования – 16 мкс.

Пример 1 Сравнение двух четырехразрядных чисел, которые подаются на входы порта Р2.

Сигнал равенства выводится на Р1.1, большее – Р1.2, меньшееР1.3, разрешение сравнения подается на Р1.0.

ANL    P1,#11110001В  ; сброс всех сравнений

L0:       JNB           Р1.0, L0      ; ожидание разрешения

MOV   A, P2

ANL    A,#F0H     ; выделение первого числа

SWAP A

MOV   В, A          ; запоминание первого числа

CLR    C              ; сброс переноса

MOV   А, P2

ANL    A,#0FH     ; выделение второго числа

SUBB  А, В          ; вычисление В

JZ        LR            ; переход, если А=В

JC       LL             ; переход, если А<В

SETB  P1.2          ; результат А>В

JMP     EXIT

LR:      SETB        P1.1  ; результат А=В

JMP     EXIT

LL:      SETB        P1.3  ; результат А<В

EXIT:                            ; продолжение выполнения программы

Аналогично выполняется сравнение чисел большей разрядности. Если необходимо сравнивать многобайтные числа, то сравнение следует начинать со старших байтов.

3. Логические операции в MCS-51

Пример 18. Вывод управляющих сигналов из МК.

Формирование статических сигналов используется для управления исполнительным механизмом по принципу «включен-выключен». При этом соответствующие линии портов просто устанавливаются в 0 или 1.

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

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

Например: 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.

Страницы: 1, 2, 3, 4



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.