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

📄 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 页
字号:
;========================================================================
;=																		=
;=		Power Supply Board Switch Control Program						=
;=																		=
;=						----------Aurthor by:	daiyanjun				=
;=												zhangwenjun				=
;=												2004/09/29-2004/10/03	=
;========================================================================

;TIME INTERRUPT INT0
	SWTH1	EQU	P1.0
	SWTH2	EQU	P1.1
	SWTH3	EQU	P1.2
	SWTH4	EQU	P1.3
	SWTH5	EQU	P1.4
	SWTH6	EQU	P1.5
	SWTH7	EQU	P1.6
	SWTH8	EQU	P1.7
	SCL		EQU	P3.3
	SDA		EQU	P3.4
	DOG		EQU	P3.7
	EXT		EQU	P3.5	;FOR EXTEND

;=====================DEFINE OF REGISTER AND CONSTANT=============
;------------Timer Control and Switch backup----------------------
	TIMER_FLAG	EQU		22H
    TIMER_BACK  EQU     23H

	PCF_WEEK	EQU		30H
	PCF_HOUR	EQU		31H
	PCF_MINUTE	EQU		32H

	TIMER0_CNT	EQU		33H
	TIMER1_CNT	EQU		34H
	TIMER2_CNT	EQU		35H
	TIMER3_CNT	EQU		36H
	TIMER4_CNT	EQU		37H
	TIMER5_CNT	EQU		38H
	TIMER6_CNT	EQU		39H
	TIMER7_CNT	EQU		3AH

;------------PCF8563--------------
	PCFADR		EQU		3BH		;PCF INTERFACE ADDRESS
	PCFDAT		EQU		3CH		;PCF INTERFACE DATA ADDRESS

	SECONDS		EQU 	02H
	MINUTES 	EQU 	03H
	HOURS		EQU 	04H
	DAYS		EQU 	05H
	WEEKS	    EQU		06H
	MONTHS		EQU		07H
	YEARS		EQU		08H

;------------AT24C256-------------
	E2ROMADR_H	EQU		3DH		;E2ROM INTERFACE ADDRESS HIGH
	E2ROMADR_L	EQU		3EH		;E2ROM INTERFACE ADDRESS LOW
	E2ROMDAT0	EQU		3FH		;E2ROM INTERFACE DATA ADDRESS
	E2ROMDAT1	EQU		40H
	E2ROMDAT2	EQU		41H
	E2ROMDAT3	EQU		42H

	DELAY_CNT	EQU		43H

;---------------Space Specify-----
	SWITCH_BKP_H	EQU		00H
	SWITCH_BKP_L	EQU		00H

	TIMER_FLAG_H	EQU		00H
	TIMER_FLAG_L	EQU		01H

	;TIMER 0:0002H-0FFFH
	TIMER0_BASE_H	EQU		00H
	TIMER0_BASE_L	EQU		02H
	;TIMER 1:1000H-1FFFH
	TIMER1_BASE_H	EQU		10H
	TIMER1_BASE_L	EQU		00H
	;TIMER 2:2000H-2FFFH
	TIMER2_BASE_H	EQU		20H
	TIMER2_BASE_L	EQU		00H
	;TIMER 3:3000H-3FFFH
	TIMER3_BASE_H	EQU		30H
	TIMER3_BASE_L	EQU		00H
	;TIMER 4:4000H-4FFFH
	TIMER4_BASE_H	EQU		40H
	TIMER4_BASE_L	EQU		00H
	;TIMER 5:5000H-5FFFH
	TIMER5_BASE_H	EQU		50H
	TIMER5_BASE_L	EQU		00H
	;TIMER 6:6000H-6FFFH
	TIMER6_BASE_H	EQU		60H
	TIMER6_BASE_L	EQU		00H
	;TIMER 87:7000H-7FFFH
	TIMER7_BASE_H	EQU		70H
	TIMER7_BASE_L	EQU		00H

;=================================================================

	ORG  	0000H
    JMP  	START
    ORG  	0003H
    JMP  	SECOND_TIMER_INT
	ORG		000BH
	JMP		TIMER_INT
    ORG  	0023H
    JMP  	COM_INT


    ORG		0030H
START:
    MOV  	SP,     #50H                ;设置堆栈
	MOV  	TMOD,   #22H                ;初始化串口,定时器1,串口0,定时器0,工作在方式1,计数
	MOV  	TH1,    #0FAH               ;波特率4800
	MOV  	TL1,    #0FAH
	MOV		TL0,	#160
	MOV		TH0,	#160
	MOV  	SCON,   #50H               ;串行口方式1,允许接收
	SETB 	TR1                           ;启动定时器
	SETB	TR0
	SETB 	IT0                           ;外部中断
  	SETB  	ET0		;TIMER0 ENABLE
	SETB 	EX0                           ;开外部中断
	SETB 	ES                            ;开串口中断
	MOV		P1,		#0FFH
	MOV		P3,		#38H
    MOV		TIMER0_CNT,	#00H
	MOV		TIMER1_CNT,	#00H
	MOV		TIMER2_CNT,	#00H
	MOV		TIMER3_CNT,	#00H
	MOV		TIMER4_CNT,	#00H
	MOV		TIMER5_CNT,	#00H
	MOV		TIMER6_CNT,	#00H
	MOV		TIMER7_CNT,	#00H
	CALL	PCF_INIT
    MOV     TIMER_FLAG,     #00H
	SETB 	EA
MAIN:
	CPL		DOG
	CALL	REM_CONTROL
    JMP		MAIN

INT_ENABLE:
	CLR		EA
	NOP
	SETB 	EX0         ;开外部中断
  	SETB  	EX1
	SETB 	ES          ;开串口中断
	SETB	EA
   	NOP
	RET

INT_DISABLE:
   	NOP
	CLR		EA
	NOP
	CLR 	EX0         ;开外部中断
  	CLR  	EX1
	CLR 	ES          ;开串口中断
	SETB	EA
   	NOP
	RET

;=======================REMOTE	CONTROL===========================
REM_CONTROL:
	CALL	INT_DISABLE
	JNB		EXT,	REM_CONTROL_BEGIN
	JMP		IRR_LOOP_6
REM_CONTROL_BEGIN:
	MOV		DELAY_CNT,	#90
	JNB		EXT,	$
	MOV		A,		DELAY_CNT
	JNZ		IRR_LOOP_6
	JB		EXT,	$
	MOV		R6,	#03H
IRR_LOOP_0:
	MOV		R5,	#08H
IRR_LOOP_1:
	JNB		EXT,	$
	MOV		DELAY_CNT,	#8
	MOV		A,		#00H
	CJNE	A,		DELAY_CNT,		$
   	JB		EXT,	IRR_LOOP_H
	CLR		C
	MOV 	A,		B
	RRC		A
	MOV		B,		A
	JMP		IRR_LOOP_2
IRR_LOOP_H:
	SETB	C
	MOV		A,		B
	RRC		A
	MOV		B,		A
	MOV		DELAY_CNT,	#12
	JB		EXT,	$
	MOV		A,		#00H
	CJNE	A,		DELAY_CNT,	IRR_LOOP_2
	JMP		IRR_LOOP_6
IRR_LOOP_2:
	DJNZ	R5,	IRR_LOOP_1
	CJNE	R6,	#03H,	IRR_LOOP_3
	MOV		R4,	B
	DEC		R6
	JMP		IRR_LOOP_0
IRR_LOOP_3:
	CJNE	R6,	#02H,	IRR_LOOP_4
	MOV		R3,	B
	DEC		R6
	JMP		IRR_LOOP_0
IRR_LOOP_4:
	CJNE	R6,	#01H,	IRR_LOOP_5
	MOV		R2,	B
	DEC		R6
	JMP		IRR_LOOP_0
IRR_LOOP_5:
	CJNE	R6,	#00H,	IRR_LOOP_6
	MOV		R1,	B
	CJNE	R4,	#9AH,		IRR_LOOP_6
	CJNE	R3,	#65H,		IRR_LOOP_6
	MOV		A,		R1
	XRL		A,		R2
   	CPL     A
	JNZ		IRR_LOOP_6
	CALL	KEY_SCAN
IRR_LOOP_6:
	CALL	INT_ENABLE
	RET

KEY_SCAN:
	CJNE	A,		#2AH,	KEY_1
	CPL		SWTH1
	RET
KEY_1:
	CJNE	A,		#2BH,	KEY_2
	CPL		SWTH2
	RET
KEY_2:
	CJNE	A,		#2CH,	KEY_3
	CPL		SWTH3
	RET
KEY_3:
	CJNE	A,		#2DH,	KEY_4
	CPL		SWTH4
	RET
KEY_4:
	CJNE	A,		#50H,	KEY_5
	CPL		SWTH5
	RET
KEY_5:
	CJNE	A,		#51H,	KEY_6
	CPL		SWTH6
	RET
KEY_6:
	CJNE	A,		#52H,	KEY_7
	CPL		SWTH7
	RET
KEY_7:
	CJNE	A,		#53H,	KEY_8
	CPL		SWTH8
	RET
KEY_8:
	CJNE	A,		#54H,	KEY_9
	MOV		P1,		#0FFH
	RET
KEY_9:
	CJNE	A,		#55H,	KEY_0
	MOV		P1,		#00H
	RET
KEY_0:
	RET

;--------100us Timer interrupt---
TIMER_INT:
	CLR		EA
	PUSH	A
	PUSH	B
	PUSH	PSW
	MOV		A,		DELAY_CNT
	JZ		TIMER_EXIT
	DEC		DELAY_CNT
TIMER_EXIT:
	POP		PSW
	POP		B
	POP		A
	SETB	EA
	RETI
;====================SECOND TIMER INTERRUPT SUBROTINE=============
SECOND_TIMER_INT:
    CLR     ES
    PUSH	A
	PUSH	SP
	CALL	PCF_READ_TIME
;------------------------------------
TIMER_0:
	JNB		TIMER_FLAG.0,	TIMER_1

	CLR		C
	MOV		A,		TIMER0_CNT
	MOV		B,		#04H
	MUL		AB
	ADD		A,		#TIMER0_BASE_L
	MOV		E2ROMADR_L,	A
	MOV		A,		B
	ADDC    A,		#TIMER0_BASE_H
	MOV		E2ROMADR_H,	A

	CALL	E2ROM_READ_BYTE4

	MOV		A,	E2ROMDAT3
	ANL		A,  #30H
TIMER_0_MODE0:
	CJNE	A,	#00H,	TIMER_0_MODE1
TIMER_0_MODE_A:
	MOV		A,	E2ROMDAT1
	CJNE	A,	PCF_MINUTE,	TIMER_1
	MOV		A,	E2ROMDAT3
	MOV		C,	ACC.6
	MOV		SWTH1, C
	MOV		A,	E2ROMDAT0
	CJNE	A,	#0FFH,		TIMER_0_END
	MOV		TIMER0_CNT,		#00H
	JMP		TIMER_1
TIMER_0_END:
	INC		TIMER0_CNT
	JMP		TIMER_1

TIMER_0_MODE1:
	CJNE	A,	#10H,	TIMER_0_MODE2
TIMER_0_MODE_B:
	MOV		A,	E2ROMDAT2
	CJNE	A,	PCF_HOUR,	TIMER_1
	JMP		TIMER_0_MODE_A

TIMER_0_MODE2:
	CJNE	A,	#20H,	TIMER_1
	MOV		A,	E2ROMDAT3
	ANL		A,	#0FH
	CJNE	A,	PCF_WEEK,	TIMER_1
	JMP		TIMER_0_MODE_B
;------------------------------------
TIMER_1:
	JNB		TIMER_FLAG.1,	TIMER_2

	CLR		C
	MOV		A,		TIMER1_CNT
	MOV		B,		#04H
	MUL		AB
	ADD		A,		#TIMER1_BASE_L
	MOV		E2ROMADR_L,	A
	MOV		A,		B
	ADDC    A,		#TIMER1_BASE_H
	MOV		E2ROMADR_H,	A

	CALL	E2ROM_READ_BYTE4

	MOV		A,	E2ROMDAT3
	ANL		A,  #30H
TIMER_1_MODE0:
	CJNE	A,	#00H,	TIMER_1_MODE1
TIMER_1_MODE_A:
	MOV		A,	E2ROMDAT1
	CJNE	A,	PCF_MINUTE,	TIMER_2
	MOV		A,	E2ROMDAT3
	MOV		C,	ACC.6
	MOV		SWTH2, C
	MOV		A,	E2ROMDAT0
	CJNE	A,	#0FFH,		TIMER_1_END
	MOV		TIMER1_CNT,		#00H
	JMP		TIMER_2
TIMER_1_END:
	INC		TIMER1_CNT
	JMP		TIMER_2

TIMER_1_MODE1:
	CJNE	A,	#10H,	TIMER_1_MODE2
TIMER_1_MODE_B:
	MOV		A,	E2ROMDAT2
	CJNE	A,	PCF_HOUR,	TIMER_2
	JMP		TIMER_1_MODE_A

TIMER_1_MODE2:
	CJNE	A,	#20H,	TIMER_2
	MOV		A,	E2ROMDAT3
	ANL		A,	#0FH
	CJNE	A,	PCF_WEEK,	TIMER_2
	JMP		TIMER_1_MODE_B
;------------------------------------
TIMER_2:
	JNB		TIMER_FLAG.2,	TIMER_3

	CLR		C
	MOV		A,		TIMER2_CNT
	MOV		B,		#04H
	MUL		AB
	ADD		A,		#TIMER2_BASE_L
	MOV		E2ROMADR_L,	A
	MOV		A,		B
	ADDC    A,		#TIMER2_BASE_H
	MOV		E2ROMADR_H,	A

	CALL	E2ROM_READ_BYTE4

	MOV		A,	E2ROMDAT3
	ANL		A,  #30H
TIMER_2_MODE0:
	CJNE	A,	#00H,	TIMER_2_MODE1
TIMER_2_MODE_A:
	MOV		A,	E2ROMDAT1
	CJNE	A,	PCF_MINUTE,	TIMER_3
	MOV		A,	E2ROMDAT3
	MOV		C,	ACC.6
	MOV		SWTH3, C
	MOV		A,	E2ROMDAT0
	CJNE	A,	#0FFH,		TIMER_2_END
	MOV		TIMER2_CNT,		#00H
	JMP		TIMER_3
TIMER_2_END:
	INC		TIMER2_CNT
	JMP		TIMER_3

TIMER_2_MODE1:
	CJNE	A,	#10H,	TIMER_2_MODE2
TIMER_2_MODE_B:
	MOV		A,	E2ROMDAT2
	CJNE	A,	PCF_HOUR,	TIMER_3
	JMP		TIMER_2_MODE_A

TIMER_2_MODE2:
	CJNE	A,	#20H,	TIMER_3
	MOV		A,	E2ROMDAT3
	ANL		A,	#0FH
	CJNE	A,	PCF_WEEK,	TIMER_3
	JMP		TIMER_2_MODE_B
;------------------------------------
TIMER_3:
	JNB		TIMER_FLAG.3,	TIMER_4

	CLR		C
	MOV		A,		TIMER3_CNT
	MOV		B,		#04H
	MUL		AB
	ADD		A,		#TIMER3_BASE_L
	MOV		E2ROMADR_L,	A
	MOV		A,		B
	ADDC    A,		#TIMER3_BASE_H
	MOV		E2ROMADR_H,	A

	CALL	E2ROM_READ_BYTE4

	MOV		A,	E2ROMDAT3
	ANL		A,  #30H
TIMER_3_MODE0:
	CJNE	A,	#00H,	TIMER_3_MODE1
TIMER_3_MODE_A:
	MOV		A,	E2ROMDAT1
	CJNE	A,	PCF_MINUTE,	TIMER_4
	MOV		A,	E2ROMDAT3
	MOV		C,	ACC.6
	MOV		SWTH4, C
	MOV		A,	E2ROMDAT0
	CJNE	A,	#0FFH,		TIMER_3_END
	MOV		TIMER3_CNT,		#00H
	JMP		TIMER_4
TIMER_3_END:
	INC		TIMER3_CNT
	JMP		TIMER_4

TIMER_3_MODE1:
	CJNE	A,	#10H,	TIMER_3_MODE2
TIMER_3_MODE_B:
	MOV		A,	E2ROMDAT2
	CJNE	A,	PCF_HOUR,	TIMER_3
	JMP		TIMER_3_MODE_A

TIMER_3_MODE2:
	CJNE	A,	#20H,	TIMER_4
	MOV		A,	E2ROMDAT3
	ANL		A,	#0FH
	CJNE	A,	PCF_WEEK,	TIMER_4
	JMP		TIMER_3_MODE_B
;------------------------------------
TIMER_4:
	JNB		TIMER_FLAG.4,	TIMER_5

	CLR		C
	MOV		A,		TIMER4_CNT
	MOV		B,		#04H
	MUL		AB
	ADD		A,		#TIMER4_BASE_L
	MOV		E2ROMADR_L,	A
	MOV		A,		B
	ADDC    A,		#TIMER4_BASE_H
	MOV		E2ROMADR_H,	A

	CALL	E2ROM_READ_BYTE4

	MOV		A,	E2ROMDAT3
	ANL		A,  #30H
TIMER_4_MODE0:
	CJNE	A,	#00H,	TIMER_4_MODE1
TIMER_4_MODE_A:
	MOV		A,	E2ROMDAT1
	CJNE	A,	PCF_MINUTE,	TIMER_4
	MOV		A,	E2ROMDAT3
	MOV		C,	ACC.6
	MOV		SWTH5, C
	MOV		A,	E2ROMDAT0
	CJNE	A,	#0FFH,		TIMER_4_END
	MOV		TIMER4_CNT,		#00H
	JMP		TIMER_5
TIMER_4_END:
	INC		TIMER4_CNT
	JMP		TIMER_5

TIMER_4_MODE1:
	CJNE	A,	#10H,	TIMER_4_MODE2
TIMER_4_MODE_B:
	MOV		A,	E2ROMDAT2
	CJNE	A,	PCF_HOUR,	TIMER_5
	JMP		TIMER_4_MODE_A

TIMER_4_MODE2:
	CJNE	A,	#20H,	TIMER_5
	MOV		A,	E2ROMDAT3
	ANL		A,	#0FH
	CJNE	A,	PCF_WEEK,	TIMER_5
	JMP		TIMER_4_MODE_B
;------------------------------------
TIMER_5:
	JNB		TIMER_FLAG.5,	TIMER_6

	CLR		C
	MOV		A,		TIMER5_CNT
	MOV		B,		#04H
	MUL		AB
	ADD		A,		#TIMER5_BASE_L
	MOV		E2ROMADR_L,	A
	MOV		A,		B
	ADDC    A,		#TIMER5_BASE_H
	MOV		E2ROMADR_H,	A

	CALL	E2ROM_READ_BYTE4

	MOV		A,	E2ROMDAT3
	ANL		A,  #30H
TIMER_5_MODE0:
	CJNE	A,	#00H,	TIMER_5_MODE1
TIMER_5_MODE_A:
	MOV		A,	E2ROMDAT1
	CJNE	A,	PCF_MINUTE,	TIMER_6
	MOV		A,	E2ROMDAT3
	MOV		C,	ACC.6
	MOV		SWTH6, C
	MOV		A,	E2ROMDAT0
	CJNE	A,	#0FFH,		TIMER_5_END
	MOV		TIMER5_CNT,		#00H
	JMP		TIMER_6
TIMER_5_END:
	INC		TIMER5_CNT
	JMP		TIMER_6

TIMER_5_MODE1:
	CJNE	A,	#10H,	TIMER_5_MODE2
TIMER_5_MODE_B:
	MOV		A,	E2ROMDAT2
	CJNE	A,	PCF_HOUR,	TIMER_6
	JMP		TIMER_5_MODE_A

TIMER_5_MODE2:
	CJNE	A,	#20H,	TIMER_6
	MOV		A,	E2ROMDAT3
	ANL		A,	#0FH
	CJNE	A,	PCF_WEEK,	TIMER_6
	JMP		TIMER_5_MODE_B
;------------------------------------
TIMER_6:
	JNB		TIMER_FLAG.6,	TIMER_7

	CLR		C
	MOV		A,		TIMER6_CNT
	MOV		B,		#04H
	MUL		AB
	ADD		A,		#TIMER6_BASE_L
	MOV		E2ROMADR_L,	A
	MOV		A,		B
	ADDC    A,		#TIMER6_BASE_H
	MOV		E2ROMADR_H,	A

	CALL	E2ROM_READ_BYTE4

	MOV		A,	E2ROMDAT3
	ANL		A,  #30H
TIMER_6_MODE0:
	CJNE	A,	#00H,	TIMER_6_MODE1
TIMER_6_MODE_A:
	MOV		A,	E2ROMDAT1
	CJNE	A,	PCF_MINUTE,	TIMER_7
	MOV		A,	E2ROMDAT3
	MOV		C,	ACC.6
	MOV		SWTH7, C
	MOV		A,	E2ROMDAT0
	CJNE	A,	#0FFH,		TIMER_6_END
	MOV		TIMER6_CNT,		#00H
	JMP		TIMER_7
TIMER_6_END:
	INC		TIMER6_CNT
	JMP		TIMER_7

TIMER_6_MODE1:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -