📄 slave_pw.asm
字号:
CJNE A, #10H, TIMER_6_MODE2
TIMER_6_MODE_B:
MOV A, E2ROMDAT2
CJNE A, PCF_HOUR, TIMER_7
JMP TIMER_6_MODE_A
TIMER_6_MODE2:
CJNE A, #20H, TIMER_7
MOV A, E2ROMDAT3
ANL A, #0FH
CJNE A, PCF_WEEK, TIMER_7
JMP TIMER_6_MODE_B
;------------------------------------
TIMER_7:
JNB TIMER_FLAG.7, TIMER_8
CLR C
MOV A, TIMER7_CNT
MOV B, #04H
MUL AB
ADD A, #TIMER7_BASE_L
MOV E2ROMADR_L, A
MOV A, B
ADDC A, #TIMER7_BASE_H
MOV E2ROMADR_H, A
CALL E2ROM_READ_BYTE4
MOV A, E2ROMDAT3
ANL A, #30H
TIMER_7_MODE0:
CJNE A, #00H, TIMER_7_MODE1
TIMER_7_MODE_A:
MOV A, E2ROMDAT1
CJNE A, PCF_MINUTE, TIMER_8
MOV A, E2ROMDAT3
MOV C, ACC.6
MOV SWTH8, C
MOV A, E2ROMDAT0
CJNE A, #0FFH, TIMER_7_END
MOV TIMER7_CNT, #00H
JMP TIMER_8
TIMER_7_END:
INC TIMER7_CNT
JMP TIMER_8
TIMER_7_MODE1:
CJNE A, #10H, TIMER_7_MODE2
TIMER_7_MODE_B:
MOV A, E2ROMDAT2
CJNE A, PCF_HOUR, TIMER_8
JMP TIMER_7_MODE_A
TIMER_7_MODE2:
CJNE A, #20H, TIMER_8
MOV A, E2ROMDAT3
ANL A, #0FH
CJNE A, PCF_WEEK, TIMER_8
JMP TIMER_7_MODE_B
;------------------------------------
TIMER_8:
CALL PCF_INTCLR
POP SP
POP A
RETI
;------------------------------------
; 7 6 5 4 3 2 1 0
;BYTE0: ---------------LOCAL ADR----------------------------------------
;BYTE1: SW/TM/SETTIME ---SWITCH ADR-----------ON/OFF
;01=SWITCH 00=TIMER(SW/TM) 10==SETTIME
;BYTE2: TIMER DATA1
;BYTE3: TIMER DATA2
;BYTE4: TIMER DATA3
;BYTE5: FF/00---CONTINUE/FINISH
;==================RS-232 INTERFACE INTERRUPT SBUROTINE===========
COM_INT:
PUSH A
PUSH PSW
CLR EA
JNB RI, COM_END_JMP
CLR RI
MOV A, SBUF
CJNE A, #0A1H, COM_END_JMP ;判断是否为本机地址
COM_TYPE_SWITCH:
JNB RI, $
CLR RI
MOV A, SBUF
MOV R1, A
COM_TYPE_SW:
ANL A, #0F0H
;---------------------------SWITCH CONTROL---------------------------
CJNE A, #00H, COM_SET_TIME_JMP
MOV A, R1
ANL A, #0FH
COM_SWITCH0:
CJNE A, #00H, COM_SWITCH1
CPL SWTH1
COM_END_JMP:
JMP COM_END
COM_SET_TIME_JMP:
JMP COM_SET_TIME
COM_SWITCH1:
CJNE A, #01H, COM_SWITCH2
CPL SWTH2
JMP COM_END
COM_SWITCH2:
CJNE A, #02H, COM_SWITCH3
CPL SWTH3
JMP COM_END
COM_SWITCH3:
CJNE A, #03H, COM_SWITCH4
CPL SWTH4
JMP COM_END
COM_SWITCH4:
CJNE A, #04H, COM_SWITCH5
CPL SWTH5
JMP COM_END
COM_SWITCH5:
CJNE A, #05H, COM_SWITCH6
CPL SWTH6
JMP COM_END
COM_SWITCH6:
CJNE A, #06H, COM_SWITCH7
CPL SWTH7
JMP COM_END
COM_SWITCH7:
CJNE A, #07H, COM_SWITCHA
CPL SWTH8
JMP COM_END
COM_SWITCHA:
CJNE A, #0AH, COM_END_JMP
MOV A, P1
CJNE A, #00H, COM_SWITCHA_0
MOV P1, #0FH
JMP COM_END
COM_SWITCHA_0:
MOV P1, #00H
JMP COM_END
;---------------------------SET TIME---------------------------
COM_SET_TIME:
CJNE A, #10H, COM_GET_TIME
MOV R1, #7
MOV R0, #2 ;START FORM SECONDS
COM_SET_LOOP:
JNB RI, $
CLR RI
MOV A, SBUF
MOV PCFDAT, A
MOV PCFADR, R0
CALL PCF_WRITE
INC R0
DJNZ R1, COM_SET_LOOP
RET
JNB RI, $
CLR RI
MOV A, SBUF
MOV PCFDAT, A
MOV PCFADR, #MONTHS
CALL PCF_WRITE
JNB RI, $
CLR RI
MOV A, SBUF
MOV PCFDAT, A
MOV PCFADR, #DAYS
CALL PCF_WRITE
JNB RI, $
CLR RI
MOV A, SBUF
MOV PCFDAT, A
MOV PCFADR, #WEEKS
CALL PCF_WRITE
JNB RI, $
CLR RI
MOV A, SBUF
;--------------------------------GET TIME--------------------
COM_GET_TIME:
CJNE A, #20H, COM_SET_TIMER
MOV R1, #7
MOV R0, #2 ;FROM SECONDS
COM_GET_LOOP:
MOV PCFADR, R0
CALL PCF_READ
MOV A, PCFDAT
MOV SBUF, A
JNB TI, $
CLR TI
INC R0
DJNZ R1, COM_GET_LOOP
RET
;-----------------------------------SET TIMER------------------------
COM_SET_TIMER:
CJNE A, #30H, COM_GET_TIMER_JMP
MOV A, R1
ANL A, #0FH
COM_SET_TIMER0:
CJNE A, #00H, COM_SET_TIMER1
MOV R0, #TIMER0_BASE_L
MOV R1, #TIMER0_BASE_H
CALL COM_TIMER_GET_ADDRESS
CALL COM_TIMER_DATA_WRITE
JMP COM_END
COM_GET_TIMER_JMP:
JMP COM_GET_TIMER
COM_SET_TIMER1:
CJNE A, #01H, COM_SET_TIMER2
MOV R0, #TIMER1_BASE_L
MOV R1, #TIMER1_BASE_H
CALL COM_TIMER_GET_ADDRESS
CALL COM_TIMER_DATA_WRITE
JMP COM_END
COM_SET_TIMER2:
CJNE A, #02H, COM_SET_TIMER3
MOV R0, #TIMER2_BASE_L
MOV R1, #TIMER2_BASE_H
CALL COM_TIMER_GET_ADDRESS
CALL COM_TIMER_DATA_WRITE
JMP COM_END
COM_SET_TIMER3:
CJNE A, #03H, COM_SET_TIMER4
MOV R0, #TIMER3_BASE_L
MOV R1, #TIMER3_BASE_H
CALL COM_TIMER_GET_ADDRESS
CALL COM_TIMER_DATA_WRITE
JMP COM_END
COM_SET_TIMER4:
CJNE A, #04H, COM_SET_TIMER5
MOV R0, #TIMER4_BASE_L
MOV R1, #TIMER4_BASE_H
CALL COM_TIMER_GET_ADDRESS
CALL COM_TIMER_DATA_WRITE
JMP COM_END
COM_SET_TIMER5:
CJNE A, #05H, COM_SET_TIMER6
MOV R0, #TIMER5_BASE_L
MOV R1, #TIMER5_BASE_H
CALL COM_TIMER_GET_ADDRESS
CALL COM_TIMER_DATA_WRITE
JMP COM_END
COM_SET_TIMER6:
CJNE A, #06H, COM_SET_TIMER7
MOV R0, #TIMER6_BASE_L
MOV R1, #TIMER6_BASE_H
CALL COM_TIMER_GET_ADDRESS
CALL COM_TIMER_DATA_WRITE
JMP COM_END
COM_SET_TIMER7:
CJNE A, #07H, COM_END_JMP1
MOV R0, #TIMER7_BASE_L
MOV R1, #TIMER7_BASE_H
CALL COM_TIMER_GET_ADDRESS
CALL COM_TIMER_DATA_WRITE
COM_END_JMP1:
JMP COM_END
;---------------------------GET TIMER---------------
COM_GET_TIMER:
CJNE A, #40H, COM_TIMER_SWITCH_JMP
MOV A, R1
ANL A, #0FH
COM_GET_TIMER0:
CJNE A, #00H, COM_GET_TIMER1
MOV R0, #TIMER0_BASE_L
MOV R1, #TIMER0_BASE_H
CALL COM_TIMER_GET_ADDRESS
CALL COM_TIMER_DATA_READ
JMP COM_END
COM_TIMER_SWITCH_JMP:
JMP COM_TIMER_SWITCH
COM_GET_TIMER1:
CJNE A, #01H, COM_GET_TIMER2
MOV R0, #TIMER1_BASE_L
MOV R1, #TIMER1_BASE_H
CALL COM_TIMER_GET_ADDRESS
CALL COM_TIMER_DATA_READ
JMP COM_END
COM_GET_TIMER2:
CJNE A, #02H, COM_GET_TIMER3
MOV R0, #TIMER2_BASE_L
MOV R1, #TIMER2_BASE_H
CALL COM_TIMER_GET_ADDRESS
CALL COM_TIMER_DATA_READ
JMP COM_END
COM_GET_TIMER3:
CJNE A, #03H, COM_GET_TIMER4
MOV R0, #TIMER3_BASE_L
MOV R1, #TIMER3_BASE_H
CALL COM_TIMER_GET_ADDRESS
CALL COM_TIMER_DATA_READ
JMP COM_END
COM_GET_TIMER4:
CJNE A, #04H, COM_GET_TIMER5
MOV R0, #TIMER4_BASE_L
MOV R1, #TIMER4_BASE_H
CALL COM_TIMER_GET_ADDRESS
CALL COM_TIMER_DATA_READ
JMP COM_END
COM_GET_TIMER5:
CJNE A, #05H, COM_GET_TIMER6
MOV R0, #TIMER5_BASE_L
MOV R1, #TIMER5_BASE_H
CALL COM_TIMER_GET_ADDRESS
CALL COM_TIMER_DATA_READ
JMP COM_END
COM_GET_TIMER6:
CJNE A, #06H, COM_GET_TIMER7
MOV R0, #TIMER6_BASE_L
MOV R1, #TIMER6_BASE_H
CALL COM_TIMER_GET_ADDRESS
CALL COM_TIMER_DATA_READ
JMP COM_END
COM_GET_TIMER7:
CJNE A, #07H, COM_END_JMP2
MOV R0, #TIMER7_BASE_L
MOV R1, #TIMER7_BASE_H
CALL COM_TIMER_GET_ADDRESS
CALL COM_TIMER_DATA_READ
COM_END_JMP2:
JMP COM_END
COM_TIMER_GET_ADDRESS:
JNB RI, $
CLR RI
MOV A, SBUF
MOV B, #04H
MUL AB
ADD A, R0
MOV E2ROMADR_L, A
MOV A, B
ADDC A, R1
MOV E2ROMADR_H, A
RET
;---------------------------TIMER SWITCH--------------------------------
COM_TIMER_SWITCH:
CJNE A, #50H, COM_END_JMP3
MOV A, R1
ANL A, #0FH
JNB RI, $
CLR RI
MOV A, SBUF
MOV TIMER_FLAG, A
COM_END_JMP3:
JMP COM_END
COM_END:
POP PSW
POP A
SETB EA
RETI
;----------------COM_TIMER_DATA_WRITE----------------
COM_TIMER_DATA_WRITE:
JNB RI, $
CLR RI
MOV A, SBUF
MOV E2ROMDAT3, A
JNB RI, $
CLR RI
MOV A, SBUF
MOV E2ROMDAT2, A
JNB RI, $
CLR RI
MOV A, SBUF
MOV E2ROMDAT1, A
JNB RI, $
CLR RI
MOV A, SBUF
MOV E2ROMDAT0, A
CALL E2ROM_WRITE_BYTE4
RET
;----------------COM_TIMER_DATA_READ----------------
COM_TIMER_DATA_READ:
CALL E2ROM_READ_BYTE4
MOV A, E2ROMDAT3
MOV SBUF, A
JNB TI, $
CLR TI
MOV A, E2ROMDAT2
MOV SBUF, A
JNB TI, $
CLR TI
MOV A, E2ROMDAT1
MOV SBUF, A
JNB TI, $
CLR TI
MOV A, E2ROMDAT0
MOV SBUF, A
JNB TI, $
CLR TI
RET
;----------------------------------------------------
;========================PCF INITIAL==============================
PCF_INIT:
MOV PCFADR, #00H
MOV PCFDAT, #00H
CALL PCF_WRITE
MOV PCFADR, #0FH
MOV PCFDAT, #40H
CALL PCF_WRITE
MOV PCFADR, #0EH
MOV PCFDAT, #81H
CALL PCF_WRITE
MOV PCFADR, #01H
MOV PCFDAT, #01H
CALL PCF_WRITE
MOV PCFADR, #02H
CALL PCF_READ
ANL A, #7FH
MOV PCFDAT, A
CALL PCF_WRITE
RET
;=================================================================
PCF_READ_TIME:
CALL I2C_START
MOV A, #0A2H
CALL I2C_SEND_B
CALL I2C_READ_ACK
MOV A, #MINUTES
CALL I2C_SEND_B
CALL I2C_READ_ACK
CALL I2C_START
MOV A, #0A3H
CALL I2C_SEND_B
CALL I2C_READ_ACK
CALL I2C_READ_B
CALL I2C_SEND_ACK
ANL A, #7FH
MOV PCF_MINUTE, A
CALL I2C_READ_B
CALL I2C_SEND_ACK
ANL A, #3FH
MOV PCF_HOUR, A
CALL I2C_READ_B
CALL I2C_SEND_ACK
CALL I2C_READ_B
ANL A, #07H
MOV PCF_WEEK, A
CALL I2C_NACK
CALL I2C_STOP
RET
;-----------------------------------------------------------------
PCF_INTCLR:
MOV PCFADR, #01H
CALL PCF_READ
ANL A, #0FBH
MOV PCFDAT, A
CALL PCF_WRITE
RET
;-----------------------------------------------------------------
PCF_WRITE:
CALL I2C_START
MOV A, #0A2H
CALL I2C_SEND_B
CALL I2C_READ_ACK
MOV A, PCFADR
CALL I2C_SEND_B
CALL I2C_READ_ACK
MOV A, PCFDAT
CALL I2C_SEND_B
CALL I2C_READ_ACK
CALL I2C_STOP
RET
;-----------------------------------------------------------------
PCF_READ:
CALL I2C_START
MOV A, #0A2H
CALL I2C_SEND_B
CALL I2C_READ_ACK
MOV A, PCFADR
CALL I2C_SEND_B
CALL I2C_READ_ACK
CALL I2C_START
MOV A, #0A3H
CALL I2C_SEND_B
CALL I2C_READ_ACK
CALL I2C_READ_B
MOV PCFDAT, A
CALL I2C_NACK
CALL I2C_STOP
RET
;-----------------------------------------------------------------
E2ROM_WRITE_BYTE4:
CALL I2C_START
MOV A, #0A0H
CALL I2C_SEND_B
CALL I2C_READ_ACK
MOV A, E2ROMADR_H
CALL I2C_SEND_B
CALL I2C_READ_ACK
MOV A, E2ROMADR_L
CALL I2C_SEND_B
CALL I2C_READ_ACK
MOV A, E2ROMDAT3
CALL I2C_SEND_B
CALL I2C_READ_ACK
MOV A, E2ROMDAT2
CALL I2C_SEND_B
CALL I2C_READ_ACK
MOV A, E2ROMDAT1
CALL I2C_SEND_B
CALL I2C_READ_ACK
MOV A, E2ROMDAT0
CALL I2C_SEND_B
CALL I2C_READ_ACK
CALL I2C_STOP
RET
;-----------------------------------------------------------------
E2ROM_READ_BYTE4:
CALL I2C_START
MOV A, #0A0H
CALL I2C_SEND_B
CALL I2C_READ_ACK
MOV A, E2ROMADR_H
CALL I2C_SEND_B
CALL I2C_READ_ACK
MOV A, E2ROMADR_L
CALL I2C_SEND_B
CALL I2C_READ_ACK
CALL I2C_START
MOV A, #0A1H
CALL I2C_SEND_B
CALL I2C_READ_ACK
CALL I2C_READ_B
MOV E2ROMDAT3, A
CALL I2C_SEND_ACK
CALL I2C_READ_B
MOV E2ROMDAT2, A
CALL I2C_SEND_ACK
CALL I2C_READ_B
MOV E2ROMDAT1, A
CALL I2C_SEND_ACK
CALL I2C_READ_B
MOV E2ROMDAT0, A
CALL I2C_NACK
CALL I2C_STOP
RET
;-----------------------------------------------------------------
;=================================================================
I2C_SEND_B: MOV R7, #08H
I2C_SEND_0: RLC A
MOV SDA, C
SETB SCL
CLR SCL
DJNZ R7, I2C_SEND_0
RET
I2C_READ_B: MOV R7, #08H
I2C_READ_0: SETB SCL
MOV C, SDA
RLC A
CLR SCL
DJNZ R7, I2C_READ_0
RET
;-----------------------------------------------------------------
I2C_START: SETB SDA
SETB SCL
CLR SDA
CLR SCL
RET
I2C_READ_ACK: SETB SCL
JB SDA, $
CLR SCL
RET
I2C_SEND_ACK: CLR SDA
SETB SCL
NOP
NOP
CLR SCL
SETB SDA
RET
I2C_NACK: SETB SCL
NOP
NOP
CLR SCL
RET
I2C_STOP: CLR SDA
SETB SCL
SETB SDA
RET
DELAY_MS:
MOV R0, #0FFH
DELAY_MS_0:
MOV R1, #0FFH
DELAY_MS_1:
DJNZ R1, DELAY_MS_1
DJNZ R0, DELAY_MS_0
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -