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

📄 sms2.asm

📁 实现短消息发送报警功能
💻 ASM
字号:
;E87
T2CON           EQU    0C8H
RCAP2L          EQU    0CAH
RCAP2H          EQU    0CBH
TL2             EQU    0CCH
TH2             EQU    0CDH
;cpu 8xc52
		ORG 0000H
		LJMP MAIN
		ORG 0023H
                ljmp INT_232


WDTRST		EQU    0A6H		;看门狗定时器寄存器
;************宏定义

ADDR_SYS        EQU     02H
ADDR_SYS1       EQU     04H
ADDR_SYS2       EQU     06H
ADDR_TMP        EQU     03H
ADDR_BAK        EQU     05H
ADDR_DATA       EQU     07H
CONST_1MSH      EQU     0FCH
CONST_1MSL      EQU     065H     ;按1ms定时,定时器初值
CONST_10MSH	EQU	0DCH
CONST_10MSL	EQU	000H
CONST_100MSH	EQU	00H
CONST_100MSL	EQU	00H
_R1		EQU	50H
_R2		EQU	51H
_R3		EQU	52H
;口线定义
igb	        BIT     P1.1
BIT_ESCL        BIT     P1.6
BIT_ESDA        BIT     P1.7
in1    		BIT     P0.0
in2    		BIT     P0.1
in3             BIT     p0.2

;--用户位定义
BIT_EEF         BIT     22H.0
bit_OK         	BIT     22H.1
BIT_ONLINE      BIT     22H.2
BIT_TINYTIMEOUT BIT     22H.3
BIT_LASTBYTE	BIT	22H.4
BIT_LASTOK	BIT	22H.5
BIT_IDLE	BIT	22H.6
chr_ok    	BIT     22H.7
;--寄存器定义
;COMM_LEN		EQU		59h
STACK_TOP       EQU     10H        ;定义堆栈首址48
BUF_SEND        EQU     60H
;BUF_EOF        EQU     6FH
BUF_DATA     	EQU     80H
;BUF_REOF       EQU     0FFH



;---------------------------------------------------------------------------------------
		ORG 0100H
MAIN:
		MOV    	SP,#STACK_TOP		;栈
		MOV    	PSW,#00H			;0号工作区

                MOV    	P0,#0FFH
                MOV    	P1,#0FFH
                MOV    	P2,#0FFH
                MOV    	P3,#0FFH

                SETB   	BIT_ESDA
                SETB   	BIT_ESCL


;--------------------RAM空间清0及测试----------------------------
       	        MOV    	R0,#0
M_1:
		MOV    	@R0,#0
		DJNZ   	R0,M_1
	;--定时器T0,T1参数设置
		MOV    	TMOD,#00010001B			;定时器T0,T1工作于方式1(16位定时)
		MOV    	TH0,#CONST_1MSH
		MOV    	TL0,#CONST_1MSL
	;--串口参数设置
		MOV    	SCON,#01010000B     	;sm0 sm1 sm2 ren tb8 rb8 ti ri
		MOV    	TH2,#0FFH
		MOV    	TL2,#070H
		MOV    	RCAP2H,#0FFH			;波特率    115200  57600   38400   28800   19200   9600  7200  4800  3600  2400
		MOV    	RCAP2L,#0DCH			;TH2:TL2=  FF:FD   FF:FA   FF:F7   FF:F4   FF:EE   FF:DC FF:D0 FF:B8 FF:A0 FF:70
		MOV    	T2CON,#00110100B		;TF2 EXF2 RCLK TCKL EXEN2 TR2 C/T2 CP/RL2
		MOV    	IP,#00010000B           ;中断优先        *  * PT2 PS PT1 PX1 PT0 PX0
	        MOV    	IE,#00010000B           ;中断使能寄存器  EA X ET2 ES ET1 EX1 ET0 EX0
		;SETB	EA
                        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   	LCALL	DELAY10MS
    	SETB	IGB
   	LCALL	Delay10MS
    	CLR		IGB
    	LCALL	DELAY100MS
    	LCALL	DELAY100MS
    	SETB	IGB
	LCALL	INITMODEM

wait:
		lcall	delay1000ms
	        ;ajmp    $

		lcall	sms_send

		ajmp	$

RET


;INCLUDE MODEM.ASM
;--------------------------------------------------------------------
;  本程序处理MODEM的初始化,
;
;  InitModem    --初始化MODEM,19200 BPS,自动应答
;
;--------------------------------------------------------------------


InitModem:
;复位并关闭回显
	;CLR		ES
     	CLR		RI

        MOV     R0,#BUF_SEND
        MOV     DPTR,#TABLE_RESET
        MOV     R2,#6

IM_1:
        CLR     A
        MOVC    A,@A+DPTR
        MOV	    @R0,A
        INC     DPTR
        INC     R0
        DJNZ    R2,IM_1
	NOP
	NOP
IM_2:
        MOV     R0,#BUF_SEND
        MOV     R2,#6
        lCALL 	ATSEND
	MOV		R0,#BUF_DATA
	MOV		R2,#6

IM_21:
	lCALL	WAIT_RI
	JC		IM_2
	CLR		RI
	MOV		A,SBUF
	MOV		@R0,A
	INC		R0
	DJNZ	R2,IM_21
   	lCALL	CHECK
        jnb		chr_ok,im_2
        lCALL	DELAY1000MS
        ;RET
;设置自动搜索GSM网
        MOV     R0,#BUF_SEND
        MOV     DPTR,#TABLE_GOGSM
        MOV     R2,#11

IM_3:
        CLR     A
        MOVC    A,@A+DPTR
        MOV	    @R0,A
        INC     DPTR
        INC     R0
        DJNZ    R2,IM_3
		NOP
		NOP
IM_4:
        MOV     R0,#BUF_SEND
        MOV     R2,#11
        lCALL 	ATSEND
	MOV		R0,#BUF_DATA
	MOV		R2,#6

IM_41:
	lCALL	WAIT_RI
	JC	IM_4
	CLR	RI
	MOV	A,SBUF
	MOV	@R0,A
	INC	R0
	DJNZ	R2,IM_41
   	lCALL	CHECK
        jnb	chr_ok,im_4
        lCALL	DELAY1000MS
;=================================        
;设置短信中心号码
        MOV     R0,#BUF_SEND
        MOV     DPTR,#TABLE_SETSMS1
        MOV     R2,#24

IM_5:
        CLR     A
        MOVC    A,@A+DPTR
        MOV	    @R0,A
        INC     DPTR
        INC     R0
        DJNZ    R2,IM_5
		NOP
		NOP
IM_6:
        MOV     R0,#BUF_SEND
        MOV     R2,#24
        lCALL 	ATSEND
	MOV	R0,#BUF_DATA
	MOV	R2,#6

IM_61:
	lCALL	WAIT_RI
	JC	IM_6
	CLR	RI
	MOV	A,SBUF
	MOV	@R0,A
	INC	R0
	DJNZ	R2,IM_61
   	lCALL	CHECK
        jnb	chr_ok,im_6
        lCALL	DELAY10MS
;====================================        
;SET PDU OR TEXT
        MOV     R0,#BUF_SEND
        MOV     DPTR,#TABLE_SETSMS0
        MOV     R2,#11
IM_7:
        CLR     A
        MOVC    A,@A+DPTR
        MOV	@R0,A
        INC     DPTR
        INC     R0
        DJNZ    R2,IM_7
		NOP
		NOP
IM_8:
        MOV     R0,#BUF_SEND
        MOV     R2,#11
        lCALL 	ATSEND
	MOV	R0,#BUF_DATA
	MOV	R2,#6

IM_81:
	lCALL	WAIT_RI
	JC	IM_8
	CLR	RI
	MOV	A,SBUF
	MOV	@R0,A
	INC	R0
	DJNZ	R2,IM_81
   	lCALL	CHECK
        jNb	chr_ok,im_8
        lCALL	DELAY1000MS
        ;RET
;=====================================        
;波特率9600BPS
 	 MOV     R0,#BUF_SEND
        MOV     DPTR,#TABLE_SCOMRATE
        MOV     R2,#13
IM_9:
        CLR     A
        MOVC    A,@A+DPTR
        MOV	    @R0,A
        INC     DPTR
        INC     R0
        DJNZ    R2,IM_9
		NOP
		NOP
IM_10:
        MOV     R0,#BUF_SEND
        MOV     R2,#13
        lCALL 	ATSEND
	 MOV	R0,#BUF_DATA
	 MOV	R2,#6

IM_101:
	lCALL	WAIT_RI
	JC	IM_10
	CLR	RI
	MOV	A,SBUF
	MOV	@R0,A
	INC	R0
	DJNZ	R2,IM_101
  	lCALL	CHECK
       jNb	chr_ok,im_10
       lCALL	DELAY1000MS
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
sms_send:
        MOV     R0,#BUF_SEND
        MOV     DPTR,#TABLE_msglen
        MOV     R2,#23
SS_3:
        CLR     A
        MOVC    A,@A+DPTR
        MOV	@R0,A
        INC     DPTR
        INC     R0
        DJNZ    R2,SS_3
		NOP
		NOP
SS_4:
        MOV     R0,#BUF_SEND
        MOV     R2,#23
        lCALL 	ATSEND
	MOV	R0,#BUF_DATA
	MOV	R2,#6
        ;LCALL   DELAY10MS
        ;LCALL   DELAY1000MS
        ;LCALL   DELAY1000MS
SS_41:
	lCALL	WAIT_RI
	JC	SS_4
	CLR	RI
	MOV	A,SBUF
	MOV	@R0,A
        ;CJNE    A,#3EH,TT
        ;SJMP    $
TT:
	INC	R0
	DJNZ	R2,SS_41
        MOV	R0,#BUF_DATA		;!!!!!
	INC	R0
	INC	R0
        MOV     A,@R0
        CJNE    A,#3eH,SS_4
       	lCALL	DELAY100MS
        ;lCALL	CHECK
        ;JnB	chr_OK,SS_4
        
        ;====================

        ;MOV     A,@R0
        ;CJNE    A,#3EH,ZTF0
       	;lCALL	DELAY100MS
   	;MOV	R0,#BUF_DATA
   	;mov	a,r0
	;add	A,#8
	;MOV	R0,A
	;MOV	A,@R0
	;CJNE	A,#3eH,ss_4
	lCALL	DELAY10MS

  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        MOV     R0,#BUF_SEND
        MOV     DPTR,#TABLE_zhong
        MOV     R2,#6
SS_5:
        CLR     A
        MOVC    A,@A+DPTR
        MOV     @R0,A
        INC     DPTR
        INC     R0
        DJNZ    R2,SS_5
		NOP
		NOP
SS_6:
        MOV     R0,#BUF_SEND
        MOV     R2,#6
        lCALL 	ATSEND
	MOV	R0,#BUF_DATA
	MOV	R2,#6

SS_61:
	lCALL	WAIT_RI
	JC	SS_6
	CLR	RI
	MOV	A,SBUF
	MOV	@R0,A
	INC	R0
	DJNZ	R2,SS_61
        lCALL	CHECK
        JnB	chr_OK,SS_6
        lCALL	DELAY10MS
        ret





;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;串口中断
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INT_232:
    	CLR 	ES                      ;关闭串口中断
	PUSH 	ACC						;保护现场
	PUSH 	PSW
	PUSH	DPL
	PUSH	DPH
        ;--选择1号工作区
        SETB 	RS0
        CLR 	RS1
        JB 	RI,I_232_RCV
I_232_EOF:
        CLR 	RS0
        CLR 	RS1
	POP	DPH
	POP	DPL
	POP 	PSW							;恢复现场
	POP 	ACC
        SETB 	ES                         	;开放串口中断
        RETI
I_232_RCV:
	MOV	A,SBUF
	CLR	RI




	lJMP	I_232_EOF
;-----------------------
; WAIT_RI:
;
;-----------------------
WAIT_RI:
        MOV     TH1,#00
        MOV     TL1,#00
	CLR	C
        SETB    TR1
        NOP
        NOP
WAITR_1:
	lCALL	WATCHDOG
	NOP
	JB	RI,WAITR_2
	NOP
	NOP
        JNB     TF1,WAITR_1     ;等待中断发送数据完毕,或超时
        SETB	C
WAITR_2:
        CLR     TR1
        CLR	TF1
	CLR	RI
	RET
;-----------------------------------------
;  AtSend:发送AT指令
;     in -- R0:开始地址
;           R2:发送的个数
;-----------------------------------------
AtSend:
	lCALL	WATCHDOG
        CLR     TI
        CLR	C
AS_1:
        MOV     TH1,#CONST_10MSH
        MOV     TL1,#CONST_10MSL
        SETB    TR1
        MOV     A,@R0
        MOV     SBUF,A
AS_2:
	lCALL	WATCHDOG
        JB     	TI,AS_3
     	JNB	TF1,AS_2
     	SETB	C
	CLR	TR1
	RET
AS_3:
        CLR     TI
		CLR		TR1
		INC     R0
        DJNZ    R2,AS_1
        RET



;-------------------------------
; BYTESEND:在10MS内发送一个字节
;
;  IN --ACC
;  OUT--CY
;-------------------------------
BYTESEND:
        MOV     TH1,#CONST_10MSH
        MOV     TL1,#CONST_10MSL
	CLR	C
	CLR	TI
	MOV	SBUF,A
        SETB    TR1
BS_1:
	lCALL	WATCHDOG
	NOP
	JB	TI,BS_2
	NOP
	NOP
        JNB     TF1,BS_1     		;等待中断发送数据完毕,或超时
        SETB	C
BS_2:
        CLR     TR1
        CLR	TF1
	CLR	RI
        CLR 	TI
	LCALL 	DELAY1MS
	nop
	RET

;----------------------------------------
;  Check:	检查是否是"OK"或"CO"
;   out- bit_ok=1   or bit_online=1
;----------------------------------------
CHECK:
	LCALL 	WATCHDOG
	clr	chr_ok

	MOV	R0,#BUF_DATA		;!!!!!

	INC	R0
	INC	R0
CHK_R2:
	MOV	A,@R0
	CJNE	A,#4FH,CHK_eof

CHK_R4:
	INC	R0
	mov	a,@r0
	cjne	a,#4bh,chk_eof
	SETB	chr_ok
CHK_EOF:

		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:
	;lCALL	WATCHDOG
	;NOP
        ;NOP
	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','=','+','8','6','1'
	              	DB	'3','8','0','0','5','1','9','5','0','0',0DH,0AH
TABLE_SETSMS0:         	DB	'A','T','+','C','M','G','F','=','1',0DH,0AH

TABLE_SCOMRATE:          DB	'A','T','+','I','P','R','=','9','6','0','0',0DH,0AH

table_msglen:            db	'A','T','+','C','M','G','S','=','1','3','8','1'
                         db     '5','0','1','1','7','4','1','5',,0dh
table_zhong:             db     't','e','s','t',5eh,5ah
                         db	'0','8','9','1','6','8','3','1','0','8','5'
			 db	'0','9','1','0','5','F','0','1','1','0','0'
		         db	'0','D','9','1','6','8','3','1','1','8','0'
			 db	'5','7','1','1','4','F','5','0','0','0','8'
			 db	'0','0','0','2','4','E','2','D',5EH,'Z'

;			db	00H,08H,09H,01H,06H,08H,03H,01H,00H,08H,05H
;			db	00H,09H,01H,00,05H,0FH,00H,01H,01H,00H,00H
;			db	00H,0DH,09H,01H,06H,08H,03H,01H,01H,08H,00H,05H
;			db	01H,04H,00H,08H,0FH,07H,00H,00H,00H,08H
;			db	00H,00H,00H,02H,04H,0EH,02H,0DH,5EH,'z'

END


⌨️ 快捷键说明

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