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

📄 fire_ctr.asm

📁 消防报警信号转换控制器
💻 ASM
📖 第 1 页 / 共 4 页
字号:
        JMP     RSLINK_MODEM_ANSWER_RET1
RSLINK_MODEM_ANSWER_LP5:                       
        CPL     WATCH_DOG 
        CJNE    R3,     #09H,   RSLINK_MODEM_ANSWER_RET1          ;"NO ANSWER"?
        NOP
        NOP
        SETB    MODEM_TEL_BUSY_FLG
        INC     MODEM_TEL_BUSY_NUM
        MOV     A,  MODEM_TEL_BUSY_WAIT
        CJNE    A,  #00H,   RSLINK_MODEM_ANSWER_LP5_1
        MOV     MODEM_TEL_BUSY_WAIT,    #0DFH
        SETB    FIRE_ALARM_FLG
RSLINK_MODEM_ANSWER_LP5_1:  
        JMP     RSLINK_MODEM_ANSWER_RET1

RSLINK_MODEM_ANSWER_RET1:
        CPL     WATCH_DOG
        RET


         
;**********************************
;        MODEM 测试指令
;**********************************
MODEM_TEL_TEST:
        CPL     WATCH_DOG
        CLR     EA
        CLR     ES
        CALL    MODEM_ATDS             ;"ATDS=0"
        SETB    EA
        SETB    ES
        CPL     WATCH_DOG
        RET

         
;*******************************
;    MODEM拨号子程序 ATDS=0
;*******************************
MODEM_ATDS:
        CPL     WATCH_DOG
        CALL    MODEM_AT
        CLR    	TI
        MOV     A,      #44H           ;"D"
        MOV   	SBUF,   A
MODEM_ATDS_SELF1: 
		JNB  	TI,  	MODEM_ATDS_SELF1
        CLR    	TI
        MOV     A,      #53H           ;"S"
        MOV   	SBUF,   A
MODEM_ATDS_SELF2: 
		JNB  	TI,  	MODEM_ATDS_SELF2
        CLR    	TI
        CPL     WATCH_DOG 
        MOV     A,      #3DH           ;"="
        MOV   	SBUF,   A
MODEM_ATDS_SELF3: 
		JNB  	TI,  	MODEM_ATDS_SELF3
        CLR    	TI
        MOV     A,      #30H           ;"0"
        MOV   	SBUF,   A
MODEM_ATDS_SELF4: 
		JNB  	TI,  	MODEM_ATDS_SELF4
        CLR    	TI
        CALL    MODEM_RETURN
        CPL     WATCH_DOG
        RET

;*******************************
;  MODEM +++ 指令
;*******************************
MODEM_END:
        CPL     WATCH_DOG
        CLR    	TI
        MOV     A,      #2BH           ;"+"
        MOV   	SBUF,   A
MODEM_END_SELF1: 
		JNB  	TI,  	MODEM_END_SELF1
        CLR    	TI
        MOV     A,      #2BH           ;"+"
        MOV   	SBUF,   A
MODEM_END_SELF2: 
		JNB  	TI,  	MODEM_END_SELF2
        CLR    	TI
        MOV     A,      #2BH           ;"+"
        MOV   	SBUF,   A
MODEM_END_SELF3: 
		JNB  	TI,  	MODEM_END_SELF3
        CLR    	TI
        CPL     WATCH_DOG
        RET


;*******************************
;     MODEM   "ATH0"指令
;*******************************
MODEM_ATH0:
        CPL     WATCH_DOG
        CALL    MODEM_AT
        CLR    	TI
        MOV     A,      #48H           ;"H"
        MOV   	SBUF,   A
MODEM_ATH0_SELF1: 
		JNB  	TI,  	MODEM_ATH0_SELF1
        CLR    	TI
        MOV     A,      #30H           ;"0"
        MOV   	SBUF,   A
MODEM_ATH0_SELF2: 
		JNB  	TI,  	MODEM_ATH0_SELF2
        CLR    	TI
        CPL     WATCH_DOG 
        CALL    MODEM_RETURN
        CPL     WATCH_DOG
        RET


;*******************************
;     MODEM   "AT"指令
;*******************************
MODEM_AT:
        CPL     WATCH_DOG
        CLR    	TI
        MOV     A,      #41H           ;"A"
        MOV   	SBUF,   A
MODEM_AT_SELF1: 
		JNB  	TI,  	MODEM_AT_SELF1
        CLR    	TI
        MOV     A,      #54H           ;"T"
        MOV   	SBUF,   A
MODEM_AT_SELF2: 
		JNB  	TI,  	MODEM_AT_SELF2
        CLR    	TI
        CPL     WATCH_DOG
        RET

;*********************************
;     MODEM "&"指令
;*********************************
MODEM_LINK:
        CPL     WATCH_DOG
        CLR    	TI
        MOV     A,      #26H           ;"&"
        MOV   	SBUF,   A
MODEM_LINK_SELF1: 
		JNB  	TI,  	MODEM_LINK_SELF1
        CLR    	TI
        CPL     WATCH_DOG 
        RET

;********************************
;      MODEM 指令结束码"RETURN
;********************************
MODEM_RETURN:
        CPL     WATCH_DOG
        CLR    	TI
        MOV     A,      #0DH           ;"RETURN" 
        MOV   	SBUF,   A
MODEM_RETURN_SELF1: 
		JNB  	TI,  	MODEM_RETURN_SELF1
        SETB    ES
        CLR    	TI
        CPL     WATCH_DOG 
        RET

;***********************************
;  MODEM存号码指令子程序   "AT&Zn="
;***********************************
MODEM_TEL_ORDER:
        CPL     WATCH_DOG
        CLR    	TI
        CALL    MODEM_AT               ;"AT"
        CALL    MODEM_LINK             ;"&"
        MOV     A,      #5AH           ;"Z"
        MOV   	SBUF,   A
MODEM_TEL_ORDER_SELF4: 
		JNB  	TI,  	MODEM_TEL_ORDER_SELF4
        CLR    	TI
        CPL     WATCH_DOG 
        MOV     A,      MODEM_TEL_Z
        ADD     A,      #30H           ;"Zn"
        MOV   	SBUF,   A
MODEM_TEL_ORDER_SELF5: 
		JNB  	TI,  	MODEM_TEL_ORDER_SELF5
        CLR    	TI
        MOV     A,      #3DH           ;"="
        MOV   	SBUF,   A
MODEM_TEL_ORDER_SELF6: 
		JNB  	TI,  	MODEM_TEL_ORDER_SELF6
        CLR    	TI
        CPL     WATCH_DOG 
        RET

;*******************************
;   MODEM一位号码设置子程序
;*******************************
MODEM_TEL_SET:
        CPL     WATCH_DOG
        CLR    	TI
        MOV     A,      MODEM_TEL_BUF
        ANL     A,      #0F0H
        SWAP    A
        CJNE    A,      #00H,   MODEM_TEL_SET_LP1
        JMP     MODEM_TEL_SET_LP2
MODEM_TEL_SET_LP1:
        ADD     A,      #30H
        MOV   	SBUF,   A                       ;号码高位
MODEM_TEL_SET_SELF1: 
		JNB  	TI,  	MODEM_TEL_SET_SELF1
        CLR    	TI
        CPL     WATCH_DOG 
MODEM_TEL_SET_LP2:
        MOV     A,      MODEM_TEL_BUF
        ANL     A,      #0FH
        CJNE    A,      #00H,   MODEM_TEL_SET_LP3
        JMP     MODEM_TEL_SET_LP4
MODEM_TEL_SET_LP3:
        ADD     A,      #30H
        MOV     SBUF,   A
MODEM_TEL_SET_SELF2: 
		JNB  	TI,  	MODEM_TEL_SET_SELF2
        CLR    	TI
        CPL     WATCH_DOG 
MODEM_TEL_SET_LP4:
        CPL     WATCH_DOG
        RET   


;*******************************       
;         发送子程序
;*******************************
;R0数据首地址,R2字节数
SEND_PRG:
        CPL     WATCH_DOG
SEND_PRG_CON:  
		MOV  	A,   	R0
        ADD   	A,     	#01H
        MOV   	R0,    	A
        MOV   	A,     	@R0
        MOV   	SBUF,   A
SEND_PRG_SELFE: 
		JNB  	TI,  	SEND_PRG_SELFE
        CLR    	TI
        CPL     WATCH_DOG
        DJNZ   	R2,  	SEND_PRG_CON
        CPL    	WATCH_DOG
        CLR    	RS485_CTR
        CLR     RS485_CTR
        CLR    	TI
        CLR    	RI       
		RET


;************************************
;            EEPROM  写子程序
;************************************
WRITE_BYTE:
		CALL  	I2C_START    		;调用启动子程序
 		CALL  	I2C_START
		CLR    	C
        MOV    	A,  	#0A0H     	;送出器件地址,R/W=0
        CALL   	BYTE_WRITE    		;写器件地址,调用写字节子程序
        CALL   	ACK_TEST      		;调用ACK检测子程序
        CLR    	C
        MOV    	A,    	EE_WRITE_ADD    ;写数据地址
        CALL   	BYTE_WRITE    		;调用写字节子程序,写数据地址
        CALL   	ACK_TEST      		;调用ACK检测子程序
        CLR   	C
        MOV   	A,     	EE_WRITE_DATA
        CALL  	BYTE_WRITE
        CALL  	ACK_TEST
        CALL  	I2C_STOP
        RET

;**************************************
;        EEPROM  读子程序
;**************************************
READ_CHARE_DATA:
		CALL  	I2C_START    		;调用启动子程序
        CALL  	I2C_START
		CLR    	C
        MOV    	A,  	#0A0H     	;送出器件地址,R/W=0
        CALL   	BYTE_WRITE    		;写器件地址,调用写字节子程序
        CALL   	ACK_TEST      		;调用ACK检测子程序
        CLR    	C             		;准备送出数据地址
        MOV    	A,    	EE_READ_ADD     ;读数据地址所在EEPROM存储单元
        CALL   	BYTE_WRITE    		;调用写字节子程序,写数据地址
        CALL   	ACK_TEST      		;调用ACK检测子程序
        CALL   	I2C_START    		;调用启动子程序
        CALL  	I2C_START
		CLR    	C
        MOV    	A,   	#0A1H    	;送出器件地址,R/W=1
        CALL   	BYTE_WRITE    		;写器件地址,调用写字节子程序
        CALL   	ACK_TEST      		;调用ACK检测子程序
        CLR    	C
        CALL   	BYTE_READ     		;调用读字节子程序,读出EEPROM 3CH数据
        CALL   	I2C_STOP
        RET

;*****************************
;       顺序读子程序
;*****************************
READ_LINK_SET:
		MOV    	EE_READ_ADD,   #3FH
		MOV    	R2,   	#00H    	;连续读数据 EEPROM  40H---47H
EEPROM_R_NEXT: 
		INC     EE_READ_ADD
        CALL   	READ_CHARE_DATA
        MOV    	3AH,   	A      		;读出数据暂存3AH单元
        MOV    	A,   	#40H
        ADD    	A,   	R2
        MOV    	R0,  	A
        MOV    	@R0,  	3AH
        INC    	R2
        CJNE   	R2, 	#08H, EEPROM_R_NEXT
        RET

;*********************************
;         I2C 启动子程序
;*********************************
I2C_START: 
        CLR    	SCL          		;定义一个时钟
		NOP
		NOP
        SETB   	SDA
		NOP
		NOP
		SETB	SCL
		NOP
		NOP
        CLR    	SDA
		NOP
		NOP
		NOP
		NOP
        RET

;*********************************
;         I2C 停止子程序
;*********************************
I2C_STOP: 
        CLR    	SCL            		;定义一个时钟
		NOP
		NOP
        CLR    	SDA
		NOP
		NOP
        SETB   	SCL
		NOP
		NOP
        SETB   	SDA
		NOP
		NOP
		NOP
		NOP
		CALL	TIMER1
		CALL	TIMER1
        RET

;***********************************
;         I2C 字节写子程序
;***********************************

BYTE_WRITE:
		MOV    	R7,   	#08H     	;写一个字节8位
BYTE_W_NEXT_BIT:
		CLR    	SCL       		    ;定义一个时钟
 		NOP
		NOP
		NOP
		NOP
        RLC     A
        MOV     SDA,   	C
        SETB    SCL
		NOP
		NOP
		NOP
		NOP
        DJNZ    R7,   	BYTE_W_NEXT_BIT   ;循环写8次
        RET

;************************************
;         I2C 字节读子程序
;************************************

BYTE_READ:
		MOV   	R7,   	#08H      	;读一个字节8位
BYTE_R_NEXT_BIT:
		CLR    	SCL       		;定义一个时钟
 		NOP
		NOP
		NOP
		NOP
        SETB    SCL
		NOP
		NOP
		NOP
		NOP
        MOV     C,   	SDA
        RLC     A
        DJNZ    R7,  	BYTE_R_NEXT_BIT   ;循环读8次
        RET
;*****************************
;       ACK检测子程序
;*****************************

ACK_TEST:
		CLR     SCL
		NOP
		NOP
		SETB   	SDA           		;准备检测ACK应答
		NOP
		NOP
		NOP
		NOP
        SETB   	SCL
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
        JB     	SDA,   	ACK_WAIT
		JMP     ACK_TEST_RET
ACK_WAIT:
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
        JB     	SDA,    ACK_FAILS    	;无ACK应答转出错FAILS	 
ACK_TEST_RET:
        RET

;**********************************
;       ACK应答出错子程序
;**********************************

ACK_FAILS:
		;MOV    	2AH,  	#33H
        ;MOV    	2BH,  	#33H
        ;MOV    	2CH,  	#33H
        ;MOV    	2DH,  	#33H
		;MOV		2EH,    #33H
	    ;MOV        2FH,    #33H
        ;CALL   	SEND_PRG

		CALL	I2C_STOP
		RET

;**********************************
;           延时子程序
;**********************************
TIMER1: MOV    R6,     #0F0H
        MOV    R5,     #0F0H
WAIT0:  NOP
        NOP
        NOP
	    NOP
        DJNZ   R5 ,    WAIT0
WAIT:   NOP
        NOP
        CLR    RI
        SETB   ES
        DJNZ   R6,     WAIT
        RET

TIMER2: MOV    R4,     #1AH
WAIT2:  CALL  TIMER1
        CLR    RI
        SETB   ES
        DJNZ   R4,     WAIT2
        RET

        END


⌨️ 快捷键说明

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