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

📄 sms7.asm

📁 实现短消息发送报警功能
💻 ASM
📖 第 1 页 / 共 3 页
字号:
SS_41:
	LCALL   DELAY100MS
        MOV     A,RDATE_LEN
        CLR     C
        CJNE    A,#09H,$+3
        JC      SS_41
        LCALL   CHECK_UP
        INC     RSEND_CONT
        JNB     SEND_OK,SS_42
        AJMP    SS_43
SS_42:
        CLR     C
        MOV     A,RSEND_CONT
        CJNE    A,#3,$+3
        JNC      SS_4
SS_43:
        CLR     IF_ACK_BIT
        SETB    SMSLED
        CLR     EA
        ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;串口中断
;IN  :R0-SENDADDR,R1-RECIVEADDR
;OUT :RDATE_LEN ,BUF_DATA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INT_232:

	PUSH 	ACC			;保护现场
	PUSH 	PSW
	PUSH	DPL
	PUSH	DPH

        JBC 	RI,I_232_RCV
I_232_SEND:
        CLR     TI
        MOV     A,SDATE_LEN
        JZ      I_232_EOF
        MOV     A,@R0
        MOV     SBUF,A
        INC     R0
        dec     SDATE_LEN
        LJMP   I_232_EOF
I_232_RCV:
        CLR     RI
        JB      IF_ACK_BIT,I_232_ROF
	MOV	A,SBUF
        CJNE    A,#06H,I_232_RMSG
        MOV     R1,#BUF_DATA          ;ACK
        MOV     @R1,A
        INC     R1
        LCALL   WAIT_RI
        JB      BIT_TIMEOUT,I_232_EOF
        MOV     A,SBUF                 ;COMMD
        MOV     @R1,A
        MOV     CMD_R,A
        INC     R1
        LCALL   WAIT_RI
        JB      BIT_TIMEOUT,I_232_ERR
        MOV     A,SBUF                  ;LEN
        MOV     @R1,A
        INC     R1
        MOV     R2,A
        CLR     A
I_232_DATA:
        LCALL   WAIT_RI
        JB      BIT_TIMEOUT,I_232_ERR
        MOV     @R1,SBUF                  ;DATE
        ADD     A,@R1
        MOV     SUM,A
        INC     R1
        DJNZ    R2,I_232_DATA
        LCALL   WAIT_RI
        JB      BIT_TIMEOUT,I_232_ERR
        MOV     @R1,SBUF                   ;SUM
        MOV     A,@R1
        CJNE    A,SUM,I_232_ERR
        SETB    COM_DATE_READY
        CLR     TI
        MOV     SBUF,#06
        JNB     TI,$
        CLR     TI
        MOV     SBUF,CMD_R                 ;返回成功标志,和命令码
        JNB     TI,$
        CLR     TI
        AJMP    I_232_EOF
I_232_ERR:
        CLR     TI
        MOV     SBUF,#26
        JNB     TI,$
        MOV     SBUF,CMD_R                 ;返回失败标志,和命令码
        JNB     TI,$
        CLR     TI
        AJMP    I_232_EOF
I_232_ROF:
        MOV	A,SBUF
        MOV     @R1,A
        INC     R1
        INC     RDATE_LEN
I_232_EOF:
        POP	DPH
	POP	DPL
	POP 	PSW			;恢复现场
	POP 	ACC
        RETI
I_232_RMSG:
        MOV     R1,#BUF_DATA
        MOV     @R1,A
        INC     R1
        LCALL   WAIT_RI
        JB      BIT_TIMEOUT,I_232_EOF
        MOV     @R1,SBUF
        INC     R1
I_232_RMSG1:
        LCALL   WAIT_RI
        JB      BIT_TIMEOUT,I_232_EOF
        MOV     @R1,SBUF
        MOV     A,@R1
        INC     R1
        CJNE    A,#0AH,I_232_RMSG1
        MOV     R1,#BUF_DATA+2
        MOV     A,@R1
        CJNE    A,#2BH,I_232_EOF
        SETB    MGS_RI
        MOV     R1,#BUF_DATA+14
        MOV     RSMS_LIST1,@R1
        INC     R1
        MOV     RSMS_LIST2,@R1
        AJMP    I_232_EOF
;;;;;;;;;;;;;;;;;;;;;;;;;;;
;WAIT_RI:
;IN:
;OUT:BIT_TIMEOUT
;;;;;;;;;;;;;;;;;;;;;;;;;;;
WAIT_RI:
        MOV     TH1,#00
        MOV     TL1,#00
	CLR	BIT_TIMEOUT
        SETB    TR1
        NOP
        NOP
WAITR_1:
	lCALL	WATCHDOG
	NOP
	JB	RI,WAITR_2
	NOP
	NOP
        JNB     TF1,WAITR_1     ;等待中断发送数据完毕,或超时
        SETB	BIT_TIMEOUT
WAITR_2:
        CLR     TR1
        CLR	TF1
	CLR	RI
	RET
;----------------------------------------
;CHECK_UP:	检查是否是"OK"
;               COMD_OK
;IN:BUF_DATA
;OUT:COMD_OK,READY_OK,SEND_OK
;----------------------------------------
CHECK_UP:
        SETB 	RS0
        CLR 	RS1
	LCALL 	WATCHDOG
	clr	COMD_OK
        CLR     READ_OK
        CLR     SEND_OK
	MOV	R0,#BUF_DATA+2
CHK_COM:                         ;校验命令返回码?
        CJNE	@R0,#4FH,CHK_READ
	INC	R0
	Cjne	@R0,#4bh,CHECK_UP_EOF
	SETB	COMD_OK
        LJMP    CHECK_UP_EOF
CHK_READ:                         ;校验数据准备提示符?
        CJNE    @R0,#3EH,CHK_SEND
        INC     R0
        CJNE    @R0,#20H,CHECK_UP_EOF
        SETB    READ_OK
CHK_SEND:
        CJNE    @R0,#2BH,CHECK_UP_EOF
        INC     R0
        CJNE    @R0,#43H,CHECK_UP_EOF
        INC     R0
        CJNE    @R0,#4DH,CHECK_UP_EOF
        INC     R0
        CJNE    @R0,#47H,CHECK_UP_EOF
        INC     R0
        CJNE    @R0,#53H,CHECK_UP_EOF
        SETB    SEND_OK
CHECK_UP_EOF:
        CLR 	RS0
        CLR 	RS1
        RET

;======================================================
;功能:
;	EEPROM 24C16程序读写模块:
;	    连续方式读:		R_24C16 (R_EPAGE,R_EADDR,R0,R2)
; 	    连续字节方式写:	W_24C16 (R_EPAGE,R_EADDR,R0,R2)
;说明:
;======================================================
;---------------------------------------------------
;功能:
;	对24C16的
;入口:	R_EPAGE--
;      	R_EADDR--
;      	R0--内存地址
;      	R2--长度<256
;---------------------------------------------
R_24C16:
        CLR 	EA
	;--终止可能没有结束的读写
        CLR     BIT_ESCL
        CLR     BIT_ESDA
        SETB    BIT_ESCL
        SETB    BIT_ESDA
        MOV     R5,R_EADDR
LOP4:
        MOV     A,R_EPAGE
        ANL     A,#07H
        RL      A
        ORL     A,#0A0H
	;--START
        CLR     BIT_ESCL
        SETB    BIT_ESDA
        SETB    BIT_ESCL
        CLR     BIT_ESDA
	;--PAGE ADDR
        MOV     R3,#8
ILP:
	CLR     BIT_ESCL
        RLC     A
        MOV     BIT_ESDA,C
        SETB    BIT_ESCL
        DJNZ    R3,ILP
        CLR     BIT_ESCL
        SETB    BIT_ESDA
        ;--ACK
        SETB    BIT_ESCL
        JB      BIT_ESDA,ER3
        ;--WORD ADDR
        MOV     A,R5
        MOV     R3,#8
ILP1:
	CLR     BIT_ESCL
        RLC     A
        MOV     BIT_ESDA,C
        SETB    BIT_ESCL
        DJNZ    R3,ILP1
        CLR     BIT_ESCL
        SETB    BIT_ESDA
        ;--ACK
        SETB    BIT_ESCL
ER3:
	JNB     BIT_ESDA,ER31
        LJMP 	ER2
ER31:
	;--注释部分为使用随机方式读
        CLR     BIT_ESCL
        ;--START
        SETB    BIT_ESDA
        SETB    BIT_ESCL
        CLR     BIT_ESDA
        ;--SLAVE ADDRESS
        MOV     A,R_EPAGE
        ANL     A,#07H
        RL      A
        ORL     A,#0A1H
        MOV     R3,#08H
LOP2:
	CLR     BIT_ESCL
        RLC     A
        MOV     BIT_ESDA,C
        SETB    BIT_ESCL
        DJNZ    R3,LOP2
        CLR     BIT_ESCL
        SETB    BIT_ESDA
        SETB    BIT_ESCL
        ;--BYTES
        MOV     R4,#08H
LOP3:
	MOV     A,@R0
        CLR     BIT_ESCL
        SETB    BIT_ESCL
        MOV     C,BIT_ESDA
        RLC     A
        MOV     @R0,A
        DJNZ    R4,LOP3
        INC     R0
        INC     R5
        DJNZ    R2,LOP40
        LJMP    LOP41
LOP40:
	LJMP    LOP4
LOP41:
	;--STOP
        CLR     BIT_ESCL
        CLR     BIT_ESDA
        SETB    BIT_ESCL
        SETB    BIT_ESDA
        CLR     BIT_EEF
        SETB    EA
        RET
ER2:
        SETB    BIT_EEF
        SETB    EA
        RET
;---------------------------------------------------
;功能:
;	连续写24C16
;入口:	R_EPAGE--
;      	R_EADDR--
;      	R0--内存地址
;      	R2--长度
;;---------------------------------------------
W_24C16:
        CLR     EA
	;--START AND STOP
        CLR     BIT_ESCL
        SETB    BIT_ESDA
        SETB    BIT_ESCL
        CLR     BIT_ESDA
	;--PAGE ADDR
        MOV     A,R_EPAGE
        ANL     A,#07H
        RL      A
        ORL     A,#0A0H
        MOV     R3,#08H
ILOP:
	CLR     BIT_ESCL
        RLC     A
        MOV     BIT_ESDA,C
        SETB    BIT_ESCL
        DJNZ    R3,ILOP
	;--ACK
        CLR     BIT_ESCL
        SETB    BIT_ESDA
        SETB    BIT_ESCL
        JB      BIT_ESDA,HERE
	;--WORD ADDR
        MOV     A,R_EADDR
        MOV     R3,#8
ILOP1:
	CLR     BIT_ESCL
        RLC     A
        MOV     BIT_ESDA,C
        SETB    BIT_ESCL
        DJNZ    R3,ILOP1
	;--ACK
        CLR     BIT_ESCL
        SETB    BIT_ESDA
        SETB    BIT_ESCL
        JB      BIT_ESDA,HERE
	;--DATA
ILOP3:
	MOV     R3,#8
        MOV     A,@R0
ILOP2:
	CLR     BIT_ESCL
        RLC     A
        MOV     BIT_ESDA,C
        SETB    BIT_ESCL
        DJNZ    R3,ILOP2
	;--ACK
        CLR     BIT_ESCL
        SETB    BIT_ESDA
        SETB    BIT_ESCL
        JB      BIT_ESDA,HERE
        INC     R0
        DJNZ    R2,ILOP3
	;--STOP
        CLR     BIT_ESCL
        CLR     BIT_ESDA
        SETB    BIT_ESCL
        SETB    BIT_ESDA
        CLR     BIT_EEF
        SETB    EA
        RET
HERE:
        SETB    BIT_EEF
        SETB    EA
        RET
;-------------------------------------------
WATCHDOG:
;       MOV             WDTRST,#01EH
;       MOV             WDTRST,#0E1H
        NOP
        NOP
		RET
;-------------------------------------------
; Delay1MS:
;
;-------------------------------------------
Delay1MS:
	PUSH	_R2
	MOV	_R2,#98
DM11_1:
        LCALL	WATCHDOG
	DJNZ	_R2,DM11_1
	POP	_R2
	NOP
        RET
;-------------------------------------------
; Delay100MS:
;   in -- RCNT_MS:延时值MS  (<256)
;
;-------------------------------------------
Delay10MS:
	PUSH	_R2
	PUSH	_R3
	MOV	_R2,#100
DM_1:
	MOV	_R3,#60
DM_2:

	DJNZ	_R3,$
	DJNZ	_R2,DM_1
	POP	_R3
	POP	_R2
	NOP
        RET
;-------------------------------------------
; Delay100MS:
;   in --
;
;-------------------------------------------
Delay100MS:
	PUSH	_R1
	MOV	_R1,#10
DM1_1:
	lCALL	DELAY10MS
	DJNZ	_R1,DM1_1
	POP	_R1
	NOP
        RET
;---------------------------------------------
delay1000ms:
	lcall	delay100ms
	lcall	delay100ms
	lcall	delay100ms
	lcall	delay100ms
	lcall	delay100ms
	lcall	delay100ms
	lcall	delay100ms
	lcall	delay100ms
	lcall	delay100ms
	lcall	delay100ms
	ret


table_reset:      	 db	'A','T','Z','0',0dh,0Ah
TABLE_gogsm:	       	 DB     'A','T','+','C','O','P','S','=','0',0DH,0AH
TABLE_setsms1:           DB     'A','T','+','C','S','C','A','=','+'
TABLE_SETSMS0:         	 DB	'A','T','+','C','M','G','F','=','0',0DH,0AH
TABLE_SCOMRATE:          DB	'A','T','+','I','P','R','=','9','6','0','0',0DH,0AH
TABLE_STECHAR:           DB     'A','T','+','C','N','M','I','=','2',',','1',',','0',',','1',',','1',0DH,0AH
TABLE_RMSG:              DB     'A','T','+','C','M','G','R','='
TABLE_DMSG:              DB     'A','T','+','C','M','G','D','='

table_msgcomd:            db	'A','T','+','C','M','G','S','='
TABLE_MSGstart:           DB    '0','8','9','1'
TABLE_MSGhead:            DB    '1','1','0','0','0','D','9','1'
TABLE_MSGCONTRAL:         DB    '0','0','0','8','0','0'
TABLE_RACK:               DB    'A','T','+','C','M','G','S','=','0','2','3',0DH
TABLE_SETOK:              DB    '8','B','B','E','7','F','6','E','6','2','1','0','5','2','9','F',1AH
TABLE_SETERR:             DB    '8','B','B','E','7','F','6','E','5','9','3','1','8','D','2','5',1AH
 END

⌨️ 快捷键说明

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