;*******ZLG7289 PARAMETERS*******
ZLG_BIT_CNT EQU 30H ;The number of data sended
ZLG_REC_BUF EQU 31H ;The buffer of data received
ZLG_SEND_BUF EQU 32H ;The buffer of data sended
mov ZLG_SEND_BUF,#00010101B ;Send the command of reading keyboard
lcall zlg_send
lcall zlg_receive ;Read the data of keyboard
setb ZLG_CS ;Set standby mode
jnb ZLG_KEY,$ ;Wait the key to pop
WAIT_OPERATION_KEY:
lcall SET_SELECTION ;Change target to modify
jb ZLG_KEY,$ ;Wait for keyboard
mov ZLG_SEND_BUF,#00010101B ;Send the command of reading keyboard
lcall zlg_send
lcall zlg_receive ;Read the data of keyboard
setb ZLG_CS ;Set standby mode
jnb ZLG_KEY,$ ;Wait the key to pop
mov r0,ZLG_REC_BUF
cjne r0,#15,NOT_OK
mov SECOND,CURR_SECOND
mov MINUTE,CURR_MINUTE
mov HOUR,CURR_HOUR
dec SECOND ;Reduce error
jmp SET_TIME_EXIT
;*****************************************************************
;Receive a byte to ZLG7289 with higer bit first
zlg_receive:
mov ZLG_BIT_CNT,#8 ;Set the number of data received
clr ZLG_CS ;Set set ZLG7289 ready,T1
lcall delay_50
ZLG_REC_LP:
;Receive a bit
setb ZLG_CLK ;T2
lcall delay_8
mov c,ZLG_DATA
mov a,ZLG_REC_BUF
rlc a
mov ZLG_REC_BUF,acc
clr ZLG_CLK ;T3
lcall delay_8
djnz ZLG_BIT_CNT,ZLG_REC_LP ;Loop to next bit
clr ZLG_DATA
ret
;*****************************************************************
;Delay for (50+2) us
delay_50:
mov VAR_DELAY,#25
djnz VAR_DELAY,$
ret
;*****************************************************************
;Delay for (8+2) us
delay_8:
mov VAR_DELAY,#4
djnz VAR_DELAY,$
ret
;*****************************************************************
END