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

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

MOV A,#0FFH;

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

JMP END_PROC2

;выдача сигнала Y3

Y3_OUT:

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

MOV A,#88H;                          ;T3=1388h*24мкс=120мс

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

MOV A,#13H;

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

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

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

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

MOV A,#0FFH;

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

END_PROC2:

RET

;Обработчик сигнала X7:

;Принимаем X7=>N7 с АЦП

;Вычисляем Q4=0.125*N7+0.17 => Вывод на ЦАП => Y4

PROC_3:

CLR    P1.4

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

MOVX           A,@DPTR

SETB P1.4

RR A                                                                                     ;умножение на 0.125 (сдвиг вправо на 3 разряда)

RR A                                                                                     ;фактически деление на 8

RR A

ANL    A,00011111b                                     ;обнуление старших разрядов

ADD   A,#A0                                                            ;суммирование с константой A0

MOV Q4,A                                                              ;сохранение полученного значения в переменную

MOV DPTR,#ADDR_DAC

MOVX           @DPTR,A                                                     ;вывод значения в ЦАП

RET

;Обработчик прерывания INT1 от аварийного датчика

;производится вывод значений X1-X4 и Q4 на индиакторы и включает звуковой сигнал

ERROR:

LOOP_ERROR:

CALL          INDOUT

SETB           P1.7                 ;получение меандра скважностью 2

MOV           R0,#208                                                         ;с периодом 2000мс

DJNZ  R0,$

CLR    P1.7

MOV   R0,#208                                                        

DJNZ  R0,$

JMP LOOP_ERROR

RETI

;Обработчик прерывания INT2 от источника питания

;происходит запись содержимого всей внутренней ОЗУ памяти во внешнее энергонезависимое ОЗУ

NRG:

PUSH  DPL

PUSH  DPH

PUSH  PSW

USING            1

MOV   DPTR,#0

MOVX            @DPTR,A                                                     ;сохраняем значение A во внешнем ОЗУ

POP     ACC

INC     DPL

MOVX            @DPTR,A                                                     ;сохраняем значение PSW во внешнем ОЗУ

POP     ACC

INC     DPL

MOVX            @DPTR,A                                                     ;сохраняем значение DPH во внешнем ОЗУ

POP     ACC

INC     DPL

MOVX            @DPTR,A                                                     ;сохраняем значение DPL во внешнем ОЗУ

INC     DPL

MOVX           @DPTR,A;

MOV   R0,#128         

MEM_SAFE:

INC     DPL;

MOV A,@R0                                                                       ;получение значения текущей ячейки внутренней памяти ОЗУ

MOVX           @DPTR,A;             ;сохранение ее во внешнюю память ОЗУ

DJNZ R0,MEM_SAFE

SETB  SCON.1               ;переход в режим микропотребления

RETI

;Обработчик прерываний от клавиатуры INT3

;считывает код клавиши из регистра клавиатуры

KBRD:

PUSH  PSW

PUSH  DPL

PUSH  DPH

PUSH  ACC

PUSH  B

USING 1

CLR    TF1

MOV   TH1,#0FFH               

MOV           TL1,#0FFH               

MOV   DPTR,#ADDR_RGKEYB

MOVX            A,@DPTR

CJNE  A,#OUTPUT_KEY,NEXT1

CPL     P1.7

CALL  INDOUT

JMP    END_KBRD

NEXT1:

CJNE  A,#INSTALL_KEY,NEXT2

SETB  IS_INSTALLMODE

JMP    END_KBRD

NEXT2:

CJNE  A,#BREAK_KEY,NEXT3

SETB  SCON.1

JMP    END_KBRD

NEXT3:

JB                   ACC.4,END_KBRD                         ;если 4-ый разряд 1 - нецифровая клавиша