mov TH1, #0FFh
mov TL1, #0FFh
setb TR1 ; начало счета счетчиком 1
; Инициализируем регистры таймера 2 перезагружаемым значением
; Выводим Q4 с частотой 100 гЦ
; 10 мс = 2.4 мкс * 4167 - Период вывода Q4
; 4167 - число инкрементировании таймера до
; переполнения для вывода Q4
; 4167 = 1047h, FFFFh - 4167h + 7h = BE9Fh
; 7h учитывает временные затраты на выполнение команд (7 машинных циклов)
mov RCAP2H, #0BEh
mov RCAP2L, #9Fh
; Инициализируем регистры таймера 2 начальным значением счета
mov TH2, #0BEh
mov TL2, #9Fh
setb TR2 ; начало счета таймером 2
call PROCESS_1
call PROCESS_2
call PROCESS_3
; Содержимое регистра R5 инкрементируется с частотой 100 Гц (период - 10 мс)
; За время цикла управления (0.5 c) содержимое R5 изменяется
; от 0 до 50 = 32h (10 мс * 50 = 500 мс)
cjne R5, #32h, $ ; ждем конца цикла управления
mov R5, #0 ; обнуление R5
jmp MAIN ; переход на начало нового цикла управления
;--------------------------------------------------------------------------------------------------------------------; Ввод цифровых сигналов X1,...,Х4, их преобразование, формирование
; управляющего сигнала Y1
PROCESS_1:
Jnb TR0,$ ; перед запуском таймера проверяем, закончено ли
; формирование предыдущих сигналов управления: если
; нет, то ждем окончания
; 90 мс = 2.4 мкс * 37500 - длительность сигнала Y1
; 37500 - число инкрементировании таймера до
; переполнения для формирования задержки 90 мс
; 37500 = 927Сh, FFFFh - 927Ch + 7h = 6D8Ah
; 7h учитывает временные затраты на выполнение команд (7 машинных циклов)
mov TH0, #6Dh
mov TL0, #8Ah
mov C, P1.4 ; ввод в разряд С аккумулятора значения Х1
orl C, P1.5 ; складываем X1+X2
orl C, P1.6 ; складываем (X1+X2)+X3
orl C, P1.7 ; складываем (X1+X2+X3)+X4, результат в С
jc Y1_SET ; если результат равен 1, то переход на метку вывода Y1
jnc END_OF_PROCESS_1 ; если результат равен 0, то Y1 не выводим
Y1_SET:
Setb P1.1 ; начинаем вывод Y1 на линии Р1.1 (начало управляющего сигнала)
Setb TR0 ; запускаем таймер 0 для отсчета времени вывода
END_OF_PROCESS_1: ; продолжаем выполнение программы без вывода Y1
ret ; конец подпрограммы
;--------------------------------------------------------------------------------------------------------------------;Ввод аналоговых сигналов Х5, Х6 и формирование управляющих сигналов Y2, Y3
PROCESS_2:
Mov DPTR,#8004h ; адрес канала AIN0 АЦП
Movx A,@DPTR ; инициализируем обработку Х5
Mov DPTR,#8005h ; адрес канала AIN1 АЦП
Movx A,@DPTR ; считываем N5 и инициализируем обработку Х6
Mov R3,A ; сохранение N5 в регистре R3
Mov DPTR,#8006h ; адрес канала AIN2 АЦП
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.