Вопрос 37. Программирование типовых процедур управления и контроля в МК с ОЭВМ ВЕ48: ожидания события, опрос двоичного датчика, формирование управляющего сигнала, формирование временных интервалов
В качестве датчиков используются бесконтактные и контактные датчики. При ожидании события появляется определенного уровня сигнал. Формирование управляющих сигналов вызывает срабатывание каких-либо устройств.
1)Программирование процедур ожидания событий.
Ожидание перепада сигналов
1.1) Ожидание замыкания контакта или появление отрицательного перепада.
1.1.а) Входной сигнал подается на линию порта.
1.1.б) Входной сигнал подается на вход таймера-счетчика.
1.2) Ожидание размыкания контакта или появление положительного перепада
1.3) Ожидание поступления импульсного сигнала
Защита от дребезга контактов: программная задержка или RS-триггер.
WAITC:JTO WAITC; цикл ожидания
CALL DELAY; задержка
EXIT:.............
2) Формирование управляющих сигналов
ON:MOV A,#00000010B OFF:MOV A,#00H
OUTL P1,A OUTL P1,A
IMP:ORL P1,#00000010B ON:0RL P1,#00000010B
CALL DELAY ИЛИ CALL DELAY
ANL P1,#11111101B 0FF:ANL P1,#11111101B
3) Формирование временных задержек.
2 метода: программный и аппаратный
3.1) Программный метод формирования задержек
Формирование задержек малой длительности
CALL DELAY 0<X1<255 CALL 2MЦ MOV 2MЦ
DELAY: MOV R1,#X1 DJNZ 2MЦ RET 2МЦ
LOOP: DJNZ R2,LOOP fмц=fzq/15
RET
МЦ – машинный цикл
Формирование задержек большой длительности
Метод вложенных циклов
DELAY: MOV R2,#X1
LOOP2: MOV R3,#X2
LOOP1: NOP
NOP
DJNZ R3,LOOP1
DJNZ R2,LOOP2
RET
Использование многократного вызова задержки малой длительности
DELAY_100mks - tзд=100мкс DELAY_1ms: MOV R7,#10
LOOP: CALL DELAY_100mks
DJNZ R7,LOOP
3.1) Аппаратный метод формирования задержек (с помощью таймера)
Таймер считает импульсы Fclk поступающие с частотой Fсч = Fzq / 480.
Fсч =Ffzq / 480 Nсч=0...255 tзд=80мкс...20мс
В таймере можно контролировать момент времени, когда происходит переполнение таймера TF=1.
Для получения нужного времени задержки нужно осуществить предустановку таймера. Пример:tзд=240мкс X=255-240/80+1
DIS CTNTI; запрещение прерывания таймера
DELAY: MOV A,#253; программа задержки
MOV T,A; предустановка таймера
CTRT T; запуск таймера
COUNT: JTF EXIT; если TF=1, то выход
JMP COUNT; цикл счета
EXIT: STOP TCNT; остановка счетчика
Можно воспользоваться прерыванием по переполнению таймера. Перед запуском таймера нужно разрешить прерывание
EN TCNTI: разрешение прерываний от таймера.
Вектор обработки прерывания находится в ячейке по адресу 007H.
Пример: ORG 007H; начало подпрограммы
STOP TCNT; тело подпрограммы
RET; возврат из подпрограммы обработки прерываний
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.