; ASSUMPTIONS:
; D0 OF PORT1 = SW1
; D1 OF PORT1 = SW2
; D2 OF PORT1 = SW3
; KEY IS A VARIABLE IN WHICH YOU STORE PORT DATA
.EQU KEY, 0x20 ; DEFINITION OF 'KEY' VARIABLE
MAIN: ; PROGRAM ENTRY POINT
LCALL SCAN_KEY ; CHEK FOR KEY PRESS
LCALL EXECUTE_KEY ; IF KEY IS PRESSED CHECK WHICH ONE IS THAT
SJMP MAIN ; LOOP BACK TO MAIN
SCAN_KEY:
MOV A, P1 ; PORT1 DATA TO ACC.
CJNE A, #0xFF, SCAN_KEY ; LOOP HERE TILL A KEY IS PRESSED
MOV KEY, A ; THEN MOVE ACC. DATA TO KEY VAR.
RET ; RETURN TO CALLER
EXECUTE_KEY:
MOV A, KEY ; MOVE KEY VARIABLE TO ACC.
CJNE A, #0xFE, CHECK_SW2 ; CHECK IF IT IS SW1 ELSE CHECK FOR SW2
;DO NOTHING
SJMP END_OF_EXECUTE_KEY ; GOTO END OF SUBROUTINE
CHECK_SW2:
CJNE A, #0xFD, CHECK_SW3 ; CHECK IF IT IS SW2 ELSE CHECK FOR SW3
LCALL SEND_ONE_PULSE ; SEND ONE PULSE
SJMP END_OF_EXECUTE_KEY ; GOTO END OF SUBROUTINE
CHECK_SW3:
CJNE A, #0xFB, END_OF_EXECUTE_KEY ; IF NOT SW3 THEN RETURN TO CALLER
LCALL SEND_TWO_PULSES ; SEND TWO PULSES
END_OF_EXECUTE_KEY:
RET ; RETURN TO CALLER