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

📄 fire_ctr.asm

📁 消防报警信号转换控制器
💻 ASM
📖 第 1 页 / 共 4 页
字号:


            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 + -