📄 fire_ctr.asm
字号:
ORG 0000H
JMP START
ORG 000BH ;定时器0中断入口地址
JMP START
ORG 0023H ;串口中断入口地址
JMP RSLINK ;串行通讯子程序
WATCH_DOG EQU P1.4
RS485_CTR EQU P3.5
RS_DCD EQU P2.0
RS_RTS EQU P2.1
RS_CTS EQU P2.2
RS_DSR EQU P2.3
RS_DTR EQU P2.4
TEL_IN EQU P1.0
DC24V_IN EQU P1.1
NO_IN EQU P1.2
AC220V_IN EQU P2.5
WP EQU P1.3
SCL EQU P1.6
SDA EQU P1.5
OUT1 EQU P0.4
OUT2 EQU P0.5
OUT3 EQU P0.6
OUT4 EQU P0.7
TEL_LED EQU P0.0
AC220V_LED EQU P0.1
DC24V_LED EQU P0.2
NO_IN_LED EQU P0.3
;40H---4FH 保存串口接收数据
RECEIVE_BYTE0 EQU 40H
RECEIVE_BYTE1 EQU 41H
RECEIVE_BYTE2 EQU 42H
RECEIVE_BYTE3 EQU 43H
RECEIVE_BYTE4 EQU 44H
RECEIVE_BYTE5 EQU 45H
RECEIVE_BYTE6 EQU 46H
RECEIVE_BYTE7 EQU 47H
RECEIVE_BYTE8 EQU 48H
RECEIVE_BYTE9 EQU 49H
RECEIVE_BYTEA EQU 4AH
RECEIVE_BYTEB EQU 4BH
RECEIVE_BYTEC EQU 4CH
RECEIVE_BYTED EQU 4DH
RECEIVE_BYTEE EQU 4EH
RECEIVE_BYTEF EQU 4FH
RECEIVE_BYTE16 EQU 50H
RECEIVE_BYTE17 EQU 51H
RECEIVE_BYTE18 EQU 52H
RECEIVE_BYTE19 EQU 53H
;30H---39H 保存发送数据
SEND_BYTE0 EQU 30H
SEND_BYTE1 EQU 31H
SEND_BYTE2 EQU 32H
SEND_BYTE3 EQU 33H
SEND_BYTE4 EQU 34H
SEND_BYTE5 EQU 35H
SEND_BYTE6 EQU 36H
SEND_BYTE7 EQU 37H
SEND_BYTE8 EQU 38H
SEND_BYTE9 EQU 39H
SEND_BYTEA EQU 3AH
SEND_BYTEB EQU 3BH
SEND_BYTEC EQU 3CH
SEND_BYTED EQU 3DH
SEND_BYTEE EQU 3EH
SEND_BYTEF EQU 3FH
TEL_STATE BIT 00H
AC220V_STATE BIT 01H
DC24V_STATE BIT 02H
NO_IN_STATE BIT 03H
MODEM_TEST_FLG BIT 04H
MODEM_CONNECT_FLG BIT 05H
MODEM_TEL_BUSY_FLG BIT 06H
MODEM_SEND_OK_FLG BIT 07H
FIRE_ALARM_FLG BIT 08H
MODEM_TEL_WAIT_FLG BIT 09H
ADD0 EQU 0AH ;组地址
SELF_ADDRESS EQU 10H ;设备地址
EE_READ_ADD EQU 11H
EE_WRITE_ADD EQU 12H
EE_WRITE_DATA EQU 13H
TEL_H1 EQU 14H
TEL_H2 EQU 15H
TEL_L1 EQU 16H
TEL_L2 EQU 17H
MODEM_TEL_BUF EQU 18H
MODEM_TEL_Z EQU 19H
MODEM_SEND_END_DELAY EQU 1AH
MODEM_SEND_ATH0_DELAY EQU 1BH
DC24V_ERROR_SEND_DELAY EQU 1CH
AC220V_ERROR_SEND_DELAY EQU 1DH
MODEM_TEL_BUSY_NUM EQU 1EH ;未拨通次数
MODEM_TEL_BUSY_WAIT EQU 1FH ;时间间隔
ORG 0050H ;主程序
START:
MOV SP, #55H ;堆栈指针
MOV P1, #00H ;P1口-P0口清零
MOV P0, #00H
MOV IE, #80H
MOV SCON, #50H ;串行接收方式1,SM2=0
MOV TMOD, #20H ;T1为方式2,T0为方式0
MOV TH1, #0FDH
MOV TL1, #0FDH
SETB TR1 ;T1启动
CLR ET0 ;T0开中断
CLR TR0 ;T0启动
SETB TEL_LED
SETB AC220V_LED
SETB DC24V_LED
SETB NO_IN_LED
SETB TEL_IN
SETB AC220V_IN
SETB DC24V_IN
SETB NO_IN
CLR TEL_STATE
CLR AC220V_STATE
CLR DC24V_STATE
CLR NO_IN_STATE
MOV ADD0, #01H
MOV SELF_ADDRESS, #02H
MOV TEL_H1, #00H
MOV TEL_H2, #00H
MOV TEL_L1, #00H
MOV TEL_L2, #00H
CLR OUT1
CLR MODEM_TEST_FLG
CLR MODEM_CONNECT_FLG
CLR MODEM_TEL_BUSY_FLG
CLR MODEM_SEND_OK_FLG
CLR FIRE_ALARM_FLG
CLR MODEM_TEL_WAIT_FLG
CLR RS485_CTR
MOV MODEM_SEND_END_DELAY, #00H
MOV MODEM_SEND_ATH0_DELAY, #00H
MOV DC24V_ERROR_SEND_DELAY, #10H
MOV AC220V_ERROR_SEND_DELAY, #10H
MOV MODEM_TEL_BUSY_NUM, #00H
MOV MODEM_TEL_BUSY_WAIT, #00H
CALL MODEM_EXIT
CALL MODEM_INT
CALL TIMER2
CPL WATCH_DOG
MOV EE_READ_ADD, #10H ;读电话号码子程序
CALL READ_CHARE_DATA
MOV TEL_H1, A
CPL WATCH_DOG
MOV EE_READ_ADD, #11H ;读电话号码子程序
CALL READ_CHARE_DATA
MOV TEL_H2, A
CPL WATCH_DOG
MOV EE_READ_ADD, #12H ;读电话号码子程序
CALL READ_CHARE_DATA
MOV TEL_L1, A
CPL WATCH_DOG
MOV EE_READ_ADD, #13H ;读电话号码子程序
CALL READ_CHARE_DATA
MOV TEL_L2, A
CPL WATCH_DOG
MOV MODEM_TEL_Z, #00H ;Z0
CALL MODEM_TEL_ORDER
MOV MODEM_TEL_BUF, TEL_H1
CALL MODEM_TEL_SET
MOV MODEM_TEL_BUF, TEL_H2
CALL MODEM_TEL_SET
MOV MODEM_TEL_BUF, TEL_L1
CALL MODEM_TEL_SET
MOV MODEM_TEL_BUF, TEL_L2
CALL MODEM_TEL_SET
CPL WATCH_DOG
CALL MODEM_RETURN ;"RETURN"
CPL WATCH_DOG
CALL TIMER2
MOV MODEM_TEL_Z, #01H ;Z1
CALL MODEM_TEL_ORDER
CALL MODEM_RETURN ;"RETURN"
CPL WATCH_DOG
CALL TIMER2
MOV MODEM_TEL_Z, #02H ;Z2
CALL MODEM_TEL_ORDER
CALL MODEM_RETURN ;"RETURN"
CPL WATCH_DOG
CALL TIMER2
MOV MODEM_TEL_Z, #03H ;Z3
CALL MODEM_TEL_ORDER
CALL MODEM_RETURN ;"RETURN"
MAIN:
CLR EX0
CLR EX1
CLR RI
SETB EA
SETB ES ;串行开中断
CPL WATCH_DOG ;看门狗
CALL TIMER2
CPL WATCH_DOG
CALL TIMER2
CPL WATCH_DOG
MOV ADD0, #01H
MOV SELF_ADDRESS, #02H
MAIN_DC24V_LP1: ;DC24V异常回传
MOV A, DC24V_ERROR_SEND_DELAY
CJNE A, #00H, MAIN_DC24V_LP2
JNB DC24V_STATE, MAIN_AC220V_LP1 ;AA AA ADD0 ADD1 30H DATA0 DATA1 00 00 CHK
JB MODEM_TEL_WAIT_FLG, MAIN_AC220V_LP1
MOV SEND_BYTE0, #0AAH
MOV SEND_BYTE1, #0AAH
MOV SEND_BYTE2, ADD0
MOV SEND_BYTE3, SELF_ADDRESS
MOV SEND_BYTE4, #30H
MOV SEND_BYTE5, #01H
JNB AC220V_STATE, MAIN_DC24V_LP1_1
MOV SEND_BYTE6, #01H
JMP MAIN_DC24V_LP1_2
MAIN_DC24V_LP1_1:
MOV SEND_BYTE6, #00H
MAIN_DC24V_LP1_2:
MOV SEND_BYTE7, #00H
MOV SEND_BYTE8, #00H
MOV A, SEND_BYTE2
ADD A, SEND_BYTE3
ADD A, SEND_BYTE4
ADD A, SEND_BYTE5
ADD A, SEND_BYTE6
ADD A, SEND_BYTE7
ADD A, SEND_BYTE8
MOV SEND_BYTE9, A
MOV R0, #2FH
MOV R2, #0AH
SETB RS485_CTR
CALL SEND_PRG
CLR RS485_CTR
MOV DC24V_ERROR_SEND_DELAY, #0FFH
JMP MAIN_AC220V_LP1
MAIN_DC24V_LP2:
DEC DC24V_ERROR_SEND_DELAY
MAIN_AC220V_LP1: ;AC220V断电回传
MOV A, AC220V_ERROR_SEND_DELAY
CJNE A, #00H, MAIN_AC220V_LP2
JNB AC220V_STATE, MAIN_TEL_LINK ;AA AA ADD0 ADD1 30H DATA0 DATA1 00 00 CHK
JB MODEM_TEL_WAIT_FLG, MAIN_TEL_LINK
MOV SEND_BYTE0, #0AAH
MOV SEND_BYTE1, #0AAH
MOV SEND_BYTE2, ADD0
MOV SEND_BYTE3, SELF_ADDRESS
MOV SEND_BYTE4, #30H
MOV SEND_BYTE6, #01H
JNB DC24V_STATE, MAIN_AC220V_LP1_1
MOV SEND_BYTE5, #01H
JMP MAIN_AC220V_LP1_2
MAIN_AC220V_LP1_1:
MOV SEND_BYTE5, #00H
MAIN_AC220V_LP1_2:
MOV SEND_BYTE7, #00H
MOV SEND_BYTE8, #00H
MOV A, SEND_BYTE2
ADD A, SEND_BYTE3
ADD A, SEND_BYTE4
ADD A, SEND_BYTE5
ADD A, SEND_BYTE6
ADD A, SEND_BYTE7
ADD A, SEND_BYTE8
MOV SEND_BYTE9, A
MOV R0, #2FH
MOV R2, #0AH
SETB RS485_CTR
;CALL SEND_PRG
CLR RS485_CTR
MOV AC220V_ERROR_SEND_DELAY, #0FFH
JMP MAIN_TEL_LINK
MAIN_AC220V_LP2:
DEC AC220V_ERROR_SEND_DELAY
MAIN_TEL_LINK:
MOV A, MODEM_TEL_BUSY_WAIT ;连续3次拨不通,停止拨号
CJNE A, #00H, MAIN_TEL_LINK_LP1
MOV A, MODEM_TEL_BUSY_NUM
CJNE A, #03H, MAIN_TEL_LINK_LP2
MOV MODEM_TEL_BUSY_NUM, #00H
MOV MODEM_TEL_BUSY_WAIT, #00H
CLR FIRE_ALARM_FLG
JMP MAIN_LP8
MAIN_TEL_LINK_LP2:
JNB FIRE_ALARM_FLG, MAIN_LP8 ;是否有火警
CALL MODEM_TEL_TEST
SETB MODEM_TEL_WAIT_FLG
CLR FIRE_ALARM_FLG
JMP MAIN_LP8
MAIN_TEL_LINK_LP1:
DEC MODEM_TEL_BUSY_WAIT
MAIN_LP8:
MOV A, MODEM_SEND_ATH0_DELAY
CJNE A, #00H, MAIN_LP8_1
JMP MAIN_LP6
MAIN_LP8_1:
DEC A
MOV MODEM_SEND_ATH0_DELAY, A
CJNE A, #00H, MAIN_LP6
CALL MODEM_ATH0
MOV MODEM_SEND_ATH0_DELAY, #00H
CLR MODEM_TEL_WAIT_FLG
JMP MAIN_LP6
MAIN_LP6:
MOV A, MODEM_SEND_END_DELAY
CJNE A, #00H, MAIN_LP6_1
JMP MAIN_LP7
MAIN_LP6_1:
DEC A
MOV MODEM_SEND_END_DELAY, A
CJNE A, #00H, MAIN_LP7
CALL MODEM_END
MOV MODEM_SEND_END_DELAY, #00H
MOV MODEM_SEND_ATH0_DELAY, #10H
JMP MAIN_LP7
MAIN_LP7:
JB TEL_STATE, MAIN_LP1 ;ADSL状态
SETB TEL_LED
JMP MAIN_LP1_1
MAIN_LP1:
CPL TEL_LED
MAIN_LP1_1:
JB AC220V_IN, MAIN_LP2
;CPL AC220V_LED
SETB AC220V_STATE
JMP MAIN_LP2_1
MAIN_LP2:
SETB AC220V_LED
CLR AC220V_STATE
MOV AC220V_ERROR_SEND_DELAY, #00H
MAIN_LP2_1:
JB DC24V_IN, MAIN_LP3
CPL DC24V_LED
SETB DC24V_STATE
JMP MAIN_LP3_1
MAIN_LP3:
SETB DC24V_LED
CLR DC24V_STATE
MOV DC24V_ERROR_SEND_DELAY, #00H
MAIN_LP3_1:
JB NO_IN, MAIN_LP4
CPL NO_IN_LED
SETB NO_IN_STATE
SETB FIRE_ALARM_FLG
MOV SEND_BYTE0, #0AAH ;AA AA ADD0 ADD1 32H DATA0 DATA1 00 00 CHK
MOV SEND_BYTE1, #0AAH
MOV SEND_BYTE2, ADD0
MOV SEND_BYTE3, SELF_ADDRESS
MOV SEND_BYTE4, #32H
MOV SEND_BYTE5, #01H
MOV SEND_BYTE6, #01H
MOV SEND_BYTE7, #00H
MOV SEND_BYTE8, #00H
MOV A, SEND_BYTE2
ADD A, SEND_BYTE3
ADD A, SEND_BYTE4
ADD A, SEND_BYTE5
ADD A, SEND_BYTE6
ADD A, SEND_BYTE7
ADD A, SEND_BYTE8
MOV SEND_BYTE9, A
MOV R0, #2FH ;发送数据起始
MOV R2, #0AH ;发送字节数
SETB RS485_CTR
CALL SEND_PRG
CLR RS485_CTR
JMP MAIN_LP4_1
MAIN_LP4:
SETB NO_IN_LED
CLR NO_IN_STATE
CLR FIRE_ALARM_FLG
MAIN_LP4_1:
JNB MODEM_TEST_FLG, MAIN_LP5
CLR MODEM_TEST_FLG
CALL MODEM_TEL_TEST
JMP MAIN_CON
MAIN_LP5:
JNB MODEM_CONNECT_FLG, MAIN_CON
CLR MODEM_CONNECT_FLG
CPL WATCH_DOG
MOV R0, #2FH ;发送数据起始
;MOV R2, #0FH ;发送字节数 ,不同消防主机协议字节数不同
;SETB RS485_CTR
CALL SEND_PRG
;CLR RS485_CTR
CLR FIRE_ALARM_FLG
MOV MODEM_SEND_END_DELAY, #10H
MAIN_CON:
JMP MAIN
;*******************************
; MODEM强制退出子程序
;*******************************
MODEM_EXIT:
CPL WATCH_DOG
CALL MODEM_END
CALL TIMER2
CPL WATCH_DOG
CALL TIMER2
CPL WATCH_DOG
CALL TIMER2
CPL WATCH_DOG
CALL TIMER2
CPL WATCH_DOG
CALL TIMER2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -