Разработка микропроцессорной системы для управления объектом. Составление карты распределения адресного пространства, страница 19

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 АЦП