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

JNB     IS_INSTALLMODE,END_KBRD    ;режим ввода кода УСТАВКИ К ?

MOV   R0,#K                 

JB                   NO_INTETR,HITETR        ;если NO_INTETR=0 - вводим мл.тетрада

XCHD A,@R0                   ;обмен младшими тетрадами

CPL     NO_INTETR               ;взведение NO_INTETR=1 - следующей пойдёт ст.тетрада

JMP    END_KBRD

HITETR:

MOV   B,A                     ;обмен старшими тетрадами

MOV   A,R0

SWAP A

MOV   R0,A

MOV   A,B

XCHD A,@R0

MOV   A,R0

SWAP A

MOV   R0,A

CPL     IS_INSTALLMODE          ;ввод кода уставки завершён

CPL     NO_INTETR 

END_KBRD:

USING 0

POP     B

POP     ACC

POP     DPH

POP     DPL

POP     PSW   

RETI  

;Вывод на индикацию X1-X4 и Q4

INDOUT:

SETB  P1.7                                                                ;Взводим для вывода на светодиоды X1-X4

MOV A,Q4;                ;получение старшей выводимой цифры

MOV B,#100;

DIV     AB;

MOV DPTR,#TABLE                                             ;получение изображения первой цифры по ее номеру

MOVC            A,@A+DPTR

MOV DPTR,#ADDR_RGIND                     ;запись в регистр для вывода "изображение" цифры

MOVX           @DPTR,A                                                     ;вывод на старшее знакоместо

MOV A,B                                                                ;получение младшей выводимой цифры

MOV B,#10

DIV     AB

MOV DPTR,#TABLE                                             ;получение изображения первой цифры по ее номеру

MOVC            A,@A+DPTR

ORL A,10000000b                                     ;выбираем второй индикатор

MOV DPTR,#ADDR_RGIND                     ;запись в регистр для вывода "изображение" цифры

MOVX           @DPTR,A                                                     ;вывод на младшее знакоместо

RET

RSEG  BITVAR

IS_INSTALLMODE: DBIT   1

NO_INTETR:             DBIT   1

IS_INDMODE:                      DBIT   1

RSEG  VAR

X_IN:  DS       1

K:                    DS       1

Q4:      DS       1

RSEG CONST

TABLE: DB 00111111b,00000110b,01011011b,01001111b,01100110b,01101101b,01111101b,00000111b,01111111b,01101111b;для отображения десятичных цифр     

END

Листинг программы для ОМЭВМ AT89C2051:

NAME AT89C2051

PROG SEGMENT     CODE

CONST           SEGMENT     CODE

VAR    SEGMENT     DATA

BITVAR         SEGMENT     BIT

STACK           SEGMENT     IDATA

EXDAT          SEGMENT     XDATA

RSEG  STACK

DS                   10H

CSEG  AT       0

USING            0

JMP    INIT

RSEG PROG

ORG    40H

INIT:

SETB  P1.2                            ;линия формирования прерывания INT3 для AT89C51

MOV   P3,#8H

SCAN:

MOV   A,P3                           ;читаем содержимое порта P3

ANL    A,#00111000b   ;получаем номер линии возврата - 1-ца в соответствующем разряде

RR                  A              ;сдвиг на 3 разряда

RR                  A

RR                  A

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

CJNE  A,#0,READ_KEY  ;если на линии возврата все нули, то нажатых клавиш на линии нет

JMP    NEXT_SCAN

READ_KEY:               ;чтение кода клавиши

JNB     ACC.0,LINE1    ;если нажатая клавиша на линии 1

MOV   A,P3

ANL    A,00000111b    ;то её код равен номеру линии сканирования

JMP OUT_RGKEYB  

LINE1:

JNB     ACC.1,LINE2    ;если нажатая клавиша на линии 2

MOV   A,P3

ANL    A,00000111b

ADD   A,#8           ;то прибавляем 8 к номеру линии сканирования

JMP    OUT_RGKEYB

LINE2:

MOV   A,P3           ;если нажатая клавиша на линии 3

ANL    A,00000111b

ADD   A,#16          ;то прибавляем 16 к номеру линии сканирования

JMP    OUT_RGKEYB

OUT_RGKEYB:

MOV   P1,A                           ;запись в регистр RGKEYB

MOV   A,P3

CLR    P3.5

CLR    P3.4

CLR    P3.3

CLR    P1.2           ;формирование сигнала прерыания INT3

SETB  P1.2

NEXT_SCAN:

CPL    P3.0           ;формирования кода линии для следующего сканирования

JNB     P3.0,NEXT1

JMP    SCAN            

NEXT1:

CPL     P3.1

JNB     P3.1,NEXT2

JMP    SCAN

NEXT2:

CPL     P3.2

JMP    SCAN

RSEG  BITVAR

RSEG  VAR

RSEG CONST

END