Разработка аппаратных средств. Разработка структурной схемы. Разработка модуля пульта управления CPAN, страница 10

MOVX           A,@DPTR                              ;пустое считывние из АЦП, чтобы запомнить в его внутренний регистр адрес канала

SETB  P1.5                                        ;разрешение счёта внешним таймером

MOV   IE,#CW_IE                 ;разрешение прерываний

MAIN:

CALL  PROC_1

CALL  PROC_2

CALL  PROC_3

MOV   R3,#10

DELAY:

;Организация задержки на 0,5с

MOV   R0,#40         ;один проход цикла DELAY 50мс

MOV   R1,#255

LOOP1:

DJNZ  R0,LOOP1      

DJNZ  R1,LOOP1

MOV   R0,#216

LOOP2:

DJNZ  R0,LOOP2      

JNB     IS_INDMODE,COMP

CALL  INDOUT

COMP:

DJNZ  R3,DELAY                            ;10циклов по 50мс   

JMP    MAIN

;Обработчик сигналов X1-X4 c заданием режима для

;формирования Y1

;Y1=X1+X2*X3*X4

;T1=50мс      

PROC_1:

MOV   A,P1

MOV   C,ACC.3        

ANL    C,ACC.2                     ;C=X4*X3

ANL    C,ACC.1                     ;C=X4*X3*X2

ORL    C,ACC.0                     ;C=X1+X4*X3*X2

MOV   DPTR,#ADDR_CT0  ;программируем 0-ой канал таймера

JNC   NOUT_Y1        ;если Y1=0 то к метке записи FFFFH

MOV   A,#82H         ;если Y1=1 то выводм сначала младший затем старший байт

MOVX            @DPTR,A        ;интервалы поступления счётных импульсов 24мкс

MOV   A,#6H          ;T1=826h*24мкс=50мс.

MOVX            @DPTR,A       

JMP    END_PROC1

NOUT_Y1:

MOV   A,#0FFH                                ;пишем FFFFH - на выходе таймера будем иметь постоянный                           

MOVX            @DPTR,A        ;высокий уровень => Y1=0 в течении всего времени управления

MOV   A,#0FFH

MOVX            @DPTR,A

END_PROC1:           

RET

;Обработчик сигналов X5-X6:

;Принимаем X5-X6=>N5-N6 с АЦП

;Вычисляем Q2=N5-N6+K

;Если Q2<Q0,задаём режим для формирования Y2 длительностью 60 мс

;Если Q2>Q0,задаём режим для формирования Y3 длительностью 120 мс

PROC_2:

CLR    P1.4                                                    ;Сигнал CONVST для запуска АЦП на преобразование, регистр АЦП уже содержит адрес канала

MOV DPTR,#ADDR_ADC1           ;адрес канала для следующего преобразования в ADC

MOVX           A,@DPTR;

SETB P1.4;

MOV R3,A                                                   ;сохранение считанного значения в регистр

CLR    P1.4                                                    ;Сигнал CONVST для запуска АЦП на преобразование, регистр АЦП уже содержит адрес канала

MOV DPTR,#ADDR_ADC2           ;адрес канала для следующего преобразования в ADC

MOVX           A,@DPTR;

SETB P1.4;

MOV R4,A                                                   ;сохранение считанного значения в регистр

;расчет значения функции Q2=N5-N6+K

MOV A,R3                                                   ;запись N5 в аккумулятор

CLR    C                                                                    ;очистка бита переноса для проведения вычитания

SUBB A,R4                                                   ;A=N5-N6

ADD   A,K                                                    ;A=N5-N6+K

JB        OV,Y3_OUT                          ;если произошло переполнение, то Q2 больше, чем Q0

;сравнение значений Q0 и Q2

CLR    C                                                                    ;очистка флага переноса

SUBB A,#Q0                                                ;вычитание из полученного значения константы Q0

ANL    A,#10000000b                       ;проверка бита знака, если он равен 0, то флаг Z будет установлен в 1

JNZ     Y3_OUT                                            ;если флаг Z=1 (т.е. Q2<Q0), то переход к формированию сигнала Y3

;формирование сигнала Y2

MOV DPTR,#ADDR_CT1                ;запись в DPTR адреса канала таймера 1

MOV A,#0C4H;             ;T2=9C4h*24мкс=60мс

MOVX @DPTR,A                                        ;вывод младшего бита

MOV A,#9H;

MOVX @DPTR,A                                        ;вывод старшего бита

MOV DPTR,#ADDR_CT2                ;запись в DPTR адреса канала таймера 2

MOV A,#0FFH;                        ;запрещаем вывод Y3