📄 slave_pw.asm
字号:
;========================================================================
;= =
;= 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 + -