Movx A,@DPTR ; считываем N6 и инициализируем обработку Х7
Mov R4,A ; сохранение N6 в регистре R4
; вычисление функции Q2 = max(N5 - N6, K)
mov A,R3 ; переносим N5 в аккумулятор
sub A,R4 ; сложение N5 - N6 без учета флага переноса
mov PSW.5,C ; сохраняем флаг переноса
cmp A,K ; сравнение (N5-N6) и K без учета флага переноса
jnae p2_1 ; конец если К меньше или равно (N5-N6)
mov A,K ; если нет то в А записываем К
p2_1:
orl C,PSW.5 ; Формируем признак того, что Q2>FFh
; константа Q0 занимает 1 байт
; т.о. если С=1, Q2>Q0
jc Y3_SET
; если C=0, проверяем соотношение Q2 и Q0
cjne A,#Q0,NOT_EQUAL ; сравниваем Q2 с константой Q0
jmp Y2_SET ; если Q2=Q0, формируем сигнал Y2
NOT_EQUAL:
Jnc Y3_SET ; если Q2<>Q0 и С=0, формируем сигнал Y3
; в противном случае, если Q2<>Q0 и С=1, формируем сигнал Y2
; вывод управляющего сигнала Y2
Y2_SET:
Jnb TR0, $ ; перед запуском таймера проверяем, закончено ли
; формирование предыдущих сигналов управления: если
; нет, то ждем окончания
; 20 мс = 2.4 мкс * 8333 - длительность сигнала Y2
; 8333 - число инкрементировании таймера до
; переполнения для формирования задержки 20 мс
; 8333 = 208Dh, FFFFh - 208Dh + 7h = DF79h
; 7h учитывает временные затраты на выполнение команд (7 машинных циклов)
mov TH0, #0DFh
mov TL0, #79h
setb P1.2 ; устанавливаем вывод P1.2 в единицу (начало управляющего сигнала Y2)
setb TR0 ; запускаем таймер 0 для отсчета времени вывода
jmp END_OF_PROCESS_2 ; выход
; вывод управляющего сигнала Y3
Y3_SET:
Jnb TR0, $ ; перед запуском таймера проверяем, закончено ли
; формирование предыдущих сигналов управления: если
; нет, то ждем окончания
; 40 мс = 2.4 мкс * 16667 - длительность сигнала Y3
; 16667 - число инкрементировании таймера до
; переполнения для формирования задержки 40 мс
; 16667 = 411Bh, FFFFh - 411Bh + 7h = BEEBh
; 7h учитывает временные затраты на выполнение команд (7 машинных циклов)
mov TH0, #0BEh
mov TL0, #0EBh
setb P1.3 ; устанавливаем вывод P1.3 в единицу (начало управляющего сигнала Y3)
setb TR0 ; запускаем таймер 0 для отсчета времени вывода
END_OF_PROCESS_2:
ret ; конец подпрограммы
;--------------------------------------------------------------------------------------------------------------------; Ввод аналогового сигнала Х7, вычисление функции Q4 и формирование
; аналогового управляющего сигнала Y4
PROCESS_3:
; ввод аналогового сигнала X7 и преобразование его в цифровое значение N7
mov DPTR, #8006h ; адрес канала AIN2 АЦП
movx A, @DPTR ; считываем N7
; вычисление функции Q4 = A0 + A1*N7 = 0.17 + 0.25*N7
; умножение двоичного числа на 0.25 - сдвиг на 3 разряда вправо
rr A ; сдвиг N7 на разряд вправо (бит 0 идет на место 7)
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.