;****************************************************************************** ;* KEYBOARD FUNCTIONS * ;****************************************************************************** GET_SCAN CLR IE.7 ;STOP INTERRUPTS PUSH PSW ;SAVE WORKING REGISTERS PUSH ACC ; PUSH R0 ; PUSH R1 ; MOV A,#0 ; MOV R1,#8 ;COUNTER FOR 8 BIT ;-----------------------LOOP TO GET BYTE FROM KEYBOARD---------------------- LCALL GET_BIT ;GET THE START BIT ; JB PSW.1,A_I_RET ;IF TIME OUT EXIT ST_KEY LCALL GET_BIT ;ENTRY FOR 8 LOOPS JB PSW.1,A_I_RET ;IF TIME OUT EXIT RRC A ;PUT THE BIT IN ACC DJNZ R1,ST_KEY ;AGAIN ;----------------------PROCCESS HERE---------------------------------------- JNB ACC.7,NO_KILL ;IF LAST CODE IS > 7FH MEANS ;KEY RELEASE ;------IT MUST BE CHECKED FOR RELEASE AND KILL------------------------------ CJNE A,#0E0H,NO_EXT1 ;IF E0 OR E1 THEN IGNORE IT SJMP I_RET0 NO_EXT1 CJNE A,#0E1H,CHCK_1 ; SETB KILL_NEXT ;THIS MEANS pause PRESSED SJMP I_RET0 CHCK_1 CJNE A,#0B8H,CHCK_2 ;IS ALT? CLR ALT_FLG A_I_RET SJMP I_RET0 ;AUX EXIT CHCK_2 CJNE A,#0AAH,CHCK_3 CLR SHFT_FLG SJMP I_RET0 CHCK_3 CJNE A,#09DH,CHCK_4 CLR CTRL_FLG SJMP I_RET0 CHCK_4 CJNE A,#0B6H,CHCK_5 CLR SHFT_FLG CHCK_5 CJNE A,#0BAH,CHCK_6 CPL CAPS_FLG SJMP I_RET0 CHCK_6 CJNE A,#0C5H,CHCK_7 JBC KILL_NEXT,I_RET0 CPL NUM_FLG SJMP I_RET0 CHCK_7 CJNE A,#0C6H,CHCK_8 CPL SCRL_FLG SJMP I_RET0 CHCK_8 CJNE A,0D2H,CHCK_E CPL INS_FLG SJMP I_RET0 CHCK_E SJMP I_RET0 ;-----------NOW CHECK FOR CONTROL KEYS NO_KILL CHECK_1 CJNE A,#038H,CHECK_2 ;IS ALT? SETB ALT_FLG SJMP I_RET0 CHECK_2 CJNE A,#02AH,CHECK_3 SETB SHFT_FLG SJMP I_RET0 CHECK_3 CJNE A,#01DH,CHECK_4 SETB CTRL_FLG SJMP I_RET0 CHECK_4 CJNE A,#036H,CHECK_E SETB SHFT_FLG SJMP I_RET0 CHECK_E SJMP I_RET I_RET0 MOV A,#0 ;EXIT POINT WITH NO SCAN CODE I_RET MOV KEY_BUF,A ;NORMAL EXIT POINT ; CLR P3.2 ;INHIBIT KEYBOARD JZ I_RET1