⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 slave_pw.asm

📁 power ctrl this a power contrl program. you can control you plug in device by com port or ir remote
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	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 + -