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 Перейти на страницу: 1 2 3 4
Другое по теме:
Инженерные коммуникации Естественная насыщенность почвы водой, как правило, не совпадает с нужной для роста и развития растений влажностью и во многих случаях является серьезной помехой для строительной деятельности человека. Поэтому необходимо искусственно создавать и ...