Смекни!
smekni.com

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

Пример 44. Формирование импульсных сигналов делается по принципу включен / выключен с необходимой временной задержкой:

PULLS:ON: ANL P1,#11110111B; выдача импульса в линию 3 порта 1

CALL DELAY ; временная задержка

OFF: ORL Р1,#00001000В; сброс

Пример 45. Считывание данных из таймера. Для устранения возможных сбоев при считывании сначала читается старший байт, потом – младший, после чего подтверждается, что старший байт за это время не изменился.

RDTIME: MOV A, TH0

MOV R0, TL0

CJNE A, TH0, RDTIME

MOV R1, А

RET

Пример 46. Подсчет числа импульсов, например, радиодеталей, которые движутся по конвейеру, зафиксированных фотоэлементом (рис. 9).

MOV TMOD,#01000000B; настройка счетчика 1

MOV TH1,#00H ; сброс счетчика

WAIT0: JB P3.4, WAIT0; ожидание включения транспортера

SETB TCON.6 ; запуск счетчика 1

WAITC: JNB P3.4, WAITC; ожидание отключения транспортера

CLR TCON.6 ; остановка счетчика 1

MOV A.TH1 ; A ¬ число деталей

EXIT: ; выход

Максимальное число радиодеталей – 255.

Пример 4 Реализация функций времени на основе таймеров.

В MCS-51 при частоте генератора тактовых импульсов 12 МГц таймер / счетчик изменяет свое значение с частотой 1 Мгц (в режиме таймера), или при поступлении сигнала от внешнего источника через счетный вход T0, T1 (в режиме счетчика).

Если использовать таймер / счетчик в режиме 1 полного формата (16 бит), то получим задержки в границах (1 – 65536 мкс).

Программа задержки на 50 мс в MCS-51, прерывание разрешено. Организация перехода к метке NEXT при переполнении Т/С0:

ORG 0ВН ; адреса вектора прерываний от Т/С0

CLR TCON.4 ; остановка Т/С0

RETI ; выход из подпрограммы обработки прерываний

ORG 100H ; начальный адрес программы

MOV TMOD, #01Н; настройка Т/С0

MOV TL0, #LOW (NOT(50000) – 1); загрузкатаймера

MOV TH0, #HIGH (NOT(50000) – 1)

SETB TCON.4 ; стартТ/С0

SETB IE.1 ; разрешение прерываний от Т/С0

SETB PCON.0 ; перевод в режим холостого хода

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

Пример 48. Организация задержки программным путем:

DELAY: MOV R2, Х ; (R2)¬(Х)

COUNT: DJNZ R2, COUNT; декремент R2 и цикл, если не нуль

RET ; возвращение из подпрограммы

Пример 49. Подпрограмма задержки на 50 мс, используя Т/С0, погрешность не превышает 2 мкс.

DELAY: MOV TMOD,#00000001B; настройка Т/С0

MOV TH0,#HIGH (NOT(50000–16))

MOV TL0,#LOW (NOT(50000–16))

SETB TCON.4 ; запуск Т/С0

JNB TCON.5,$ ; ожидание

ANL TCON,#NOT(30H); остановка Т/С0, сброс TF0

RET ; возвращение из подпрограммы

Пример 50. Подпрограмма задержки на 1 секунду. Погрешность не больше, чем 123 мкс.

OS: MOV R3,#20D ; счетчик циклов

S1: ACALL DELAY ; задержка на 50 мс

DJNZ R3, S1 ; организация цикла

RET ; возвращение из подпрограммы

Пример 51. Измерение временных интервалов. При применении таймера используется вход разрешения счетчика (

). Тогда измеренный сигнал подается на вход
, а измерение продолжительности выполняется в Т/С0.

«Положительный» импульс:

MOV TMOD,#00001001В; настраивание Т/С0

MOV TH0,#0 ; сбрасывание таймера

MOV TL0,#0

SETB TCON.4 ; запуск Т/С0

WAIT0: JNB P3.2, WAIT0; ожидание единичного уровня

WAITC: JB P3.2, WAITC; ожидание нулевого уровня

CLR TCON.4 ; остановка Т/С0

RET ; выход из процедуры

Управление программе должно передаваться при условии

=0. Прерывание от Т/С0 и внешние от
– должны быть запрещены. По завершению программы в Т/С0 будет находиться число, пропорциональное продолжительности импульса на входе
. Максимальная продолжительность импульса 65536 мкс, погрешность 1 мкс.

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

Пример 52. Преобразование параллельного кода в последовательный в MCS-51 сводится к передаче одного байта в буфер приемо-передатчика:

MOV SBUF, А

Пример 53. Обратное преобразование последовательного кода в параллельный инициируется стоповым битом и выполняется аппаратно без участия программы. Основная программа должна выполнить команду

MOV A, SBUF.

Пример 54. Преобразование однобайтовых чисел в дополнительный код и наоборот. Числа со знаком можно представить в дополнительном коде в границах от -128 к +12 Алгоритмы перевода чисел из прямого кода со знаком в дополнительный и обратное преобразование одинаковы:

DOD-PR: JNB А.7, EXIT; проверка знакового разряда

CPL А ; инверсия аккумулятора

ADD A, #1 ; добавление единицы

SETB А.7 ; установление знака

EXIT: ; выход

Пример 55. Преобразование чисел из одной системы исчисления в другую методом «двух счетчиков». При этом методе из начального кода отнимается, а к новому коду прибавляется единица до обнуления начального кода. Причем отнимание осуществляется в старой системе счисления, а добавление – в новой.

Программа перевода двоичного числа в двоично-десятичное.

MOV R5, А ; передача начального числа в R5

CLR А ; сброс аккумулятора

REV: ADD A,#1 ; добавление единицы

DA A ; десятичная коррекция

DJNZ R5, REV ; декремент начального кода и цикл, если не нуль

Результат преобразования находится в аккумуляторе.

Пример 56. Подсчет числа импульсов за заданный промежуток времени. Решается 4-я способами:

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

2. Программная реализация временного интервала и аппаратный подсчет числа импульсов (на внутреннем таймере / счетчике).

3. Аппаратная реализация временного интервала и программный подсчет числа импульсов.

4. Аппаратная реализация временного интервала и аппаратная реализация подсчета импульсов.

Реализация на MCS-51: в таймере-счетчике Т/С1 осуществляется подсчет числа импульсов; в Т/С0 заданный временной интервал. Датчик импульсов должен быть подключен к Т1.

TIME: EQU NOT(10000)+1; определение константы TIME для отсчета времени в 10 мс

MOV TMOD,#01010001B; настройка таймеров-счетчиков:

1-й – счетчик 16 бит, 0-й – таймер

CLR A ; сброс аккумулятора

MOV ТН1, А ; сброс Т/С1

MOV ТL1, А;

MOV ТН0,#НІGH(ТIМE); загрузка в Т/С0 константы TIME

MOV TL0,#LOW (TIME);

ORL TCON,#50H; запускТ/С1 иТ/С0

WAIT: JBC TCON.5, EXIT; проверка переполнения Т/С0

SJMP WAIT ; цикл, если TF=0

EXIT: MOV В, ТН1 ; (В) – (А), число импульсов за время 10 мс

MOV A, TL1

программный команда управление микроконтроллер

6. Реализация ЦАП и АЦП

Пример 5 Преобразование информации из цифровой формы в аналоговую осуществляется с помощью подключения интегральных микросхем цифроаналогового преобразователя (ЦАП) к одному из портов MCS-51. Выдача информации при этом осуществляется с помощью одной команды, например: MOV P1, А.

Если необходимо генерировать какую-то сложную функцию, то лучше записать ее таблично и передавать с соответствующим периодом в заданный порт.

Пример 58. Аналого-цифровой преобразователь (АЦП) последовательного приближения (рис. 10).

Рисунок 10 – Реализация АЦП последовательного приближения

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

R4 – регистр цифрового эквивалента;

R3 – регистр бегущего значения 1 для указания весового бита.

CONVRT: MOV R5#08Н ; загрузка счетчика циклов

MOV R3,#01Н

MOV R4,#00Н

LOOP: MOV А, R3 ; сдвиг R3 вправо на 1 разряд

RR A

MOV R3, А

ORL А, R4 ; логическое ИЛИ весового разряда и цифрового эквивалента

MOV Р1, А ; выдача в Р1

JBC T0, ENDUGH; если Т0=1, то аналоговый эквивалент выданного байта больше чем UBX и сохраняется в R4, если наоборот, то установленный бит запоминается в R4

MOV R4, А

ENDUGH: DJNZ R5, LOOP; декремент R5 и если не 0, то переход к анализу следующего бита

Пример 59. Реализация АЦП методом двойного интегрирования.

Метод двойного интегрирования заключается в следующем (рис. 11). Сначала интегрируется входной опорный сигнал ЕОП. На выходе интегратора устанавливается отрицательный потенциал, после чего интегрируется входной аналоговый сигнал за строго определенное время Т1. Т1 отсчитывается от момента перехода сигнала интегратора через 0. Потом подается UОП и измеряется время интегрирования Т2, которое пропорционально входному сигналу.

Рисунок 11 – Реализация АЦП двойного интегрирования

Максимальное время преобразования для точности 16 разрядов 2´65.536 мс. Если необходима точность преобразования 8 разрядов, то Т/С0 переключается в режим 8-битного таймера, а время преобразования составляет 2´256 мкс.

Рисунок 12 – Временные диаграммы сигналов АЦП
двойного интегрирования

MOV TMOD,#01H; настройка Т/С0 на режим 16 бит

MOV TH0,#HIGH (NOT(T1)+1); загрузкаТ/С0

MOV TL0,#LOW (NOT(T1)+1)

SETB P1.1 ; настройка Р1.1 на ввод

SETB Pl.0 ; подача ЕОП на интегратор

WAIT: JB P1.1, WAIT; ожидание появления на выходе интегратора отрицательного уровня сигнала

CLR P1.0 ; подача UBX на интегратор

WAITT0: JNB P1.1, WAIT0; ожидание момента Т0

SETB TCON.4 ; запуск Т/С0

WAITT1: JNB TCON5, WAITT1; ожидание момента Т1

SETB P1.0 ; подача ЕОП на интегратор и начало обратного интегрирования

WAITT2: JB P1,1, WAITT2; ожидание момента Т2

CLR TCON.4 ; остановка Т/С0

CLR TCON.5 ; сброс флажка TF0

MOV В, TH0 ; формирование результата в регистровой паре А, В

MOV A, TL0


7 Локальная управляющая микросеть на основе MCS-51

При управлении сложными технологическими объектами используются системы с распределенным управлением, которые состоят из группы контроллеров, руководящих отдельными агрегатами объекта (например, многосекционной печатной машиной, бумагообрабатывающей установкой, переплетно-обрабатывающей линией, прокатным станом и т.п.). Между отдельными подсистемами должен быть обеспеченная информационная связь. Поэтому обязательным элементом распределенной системы управления есть локальная сеть, которая объединяет определенные контроллеры в систему.