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

📄 sms4.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		;看门狗定时器寄存器
;************宏定义

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
READ_OK         BIT	22H.6
COM_ok    	BIT     22H.7      ;校验成功标致
;--寄存器定义
SDATE_LEN       EQU     58H        ;发送数据长度
RDATE_LEN	EQU	59h        ;接收数据长度
STACK_TOP       EQU     30H        ;定义堆栈首址48
BUF_SEND        EQU     80H        ;发送缓冲区首址
BUF_DATA     	EQU     60H        ;接收缓冲区首址



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

                        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   	LCALL	DELAY10MS
    	SETB	IGB
   	LCALL	Delay10MS
    	CLR		IGB
    	LCALL	DELAY100MS
    	LCALL	DELAY100MS
    	SETB	IGB
	LCALL	INITMODEM

wait:
	lcall	delay1000ms


	lcall	sms_send

	ajmp	$

RET


;INCLUDE MODEM.ASM
;--------------------------------------------------------------------
;  本程序处理gsmMODEM的初始化,
;
;  InitModem    --初始化MODEM,9600 BPS,
;
;--------------------------------------------------------------------
;===========================
;复位并关闭回显
;===========================
InitModem:

        CLR		EA
     	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_UP
        jnb	COM_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_UP
        jnb	COM_OK,im_4
        lCALL	DELAY1000MS
;==================================
;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_UP
        jNb	COM_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_UP
        jNb	COM_OK,im_10
        lCALL	DELAY1000MS
        ;RET
;=====================================
;设置UCS2
;=====================================
 	MOV     R0,#BUF_SEND
        MOV     DPTR,#TABLE_STECHAR
        MOV     R2,#21
IM_11:
        CLR     A
        MOVC    A,@A+DPTR
        MOV	@R0,A
        INC     DPTR
        INC     R0
        DJNZ    R2,IM_11
		NOP
		NOP
IM_12:
        MOV     R0,#BUF_SEND
        MOV     R2,#21
        lCALL 	ATSEND
	 MOV	R0,#BUF_DATA
	 MOV	R2,#6

IM_121:
	lCALL	WAIT_RI
	JC	IM_12
	CLR	RI
	MOV	A,SBUF
	MOV	@R0,A
	INC	R0
	DJNZ	R2,IM_121
  	lCALL	CHECK_UP
        jNb	COM_OK,im_12
        lCALL	DELAY1000MS
        ;RET
        ;==============================
        ;设置短信中心号码
        ;==============================
SET_CENTER_NUMBER:
        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_UP
        jnb	COM_OK,im_6
        lCALL	DELAY10MS

        ret

;**************************************
;======================================
;SEND SMS
;======================================
sms_send:
        SETB    EA
        MOV     R0,#BUF_SEND
        MOV     DPTR,#TABLE_msglen
        MOV     R2,#11
SS_1:
        CLR     A
        MOVC    A,@A+DPTR
        MOV	@R0,A
        INC     DPTR
        INC     R0
        DJNZ    R2,SS_1
SS_2:
        MOV     R0,#BUF_SEND
        MOV     SDATE_LEN,#11
        MOV	R1,#BUF_DATA
        MOV     RDATE_LEN,#0
        SETB    TI
SS_DELAY:
        LCALL   DELAY100MS
        MOV     A,RDATE_LEN
        CJNE    A,#4,SS_DELAY
        LCALL   CHECK_UP
        JNB     READ_OK,SS_2

  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        MOV     R0,#BUF_SEND
        MOV     DPTR,#TABLE_MSGDATE
        MOV     R2,#57
SS_3:
        CLR     A
        MOVC    A,@A+DPTR
        MOV     @R0,A
        INC     DPTR
        INC     R0
        DJNZ    R2,SS_3
SS_4:
        MOV     R0,#BUF_SEND
        MOV     SDATE_LEN,#57
        MOV	R1,#BUF_DATA
        MOV     RDATE_LEN,#0
        SETB    TI
	LCALL   DELAY1000MS
        LCALL   DELAY1000MS
        LCALL   DELAY1000MS
        LCALL   DELAY1000MS
        AJMP    $
        CLR     EA
        ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;串口中断
;IN      R0,R1
;OUT     RDATE_LEN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INT_232:
    	;CLR 	ES                      ;关闭串口中断
	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
	MOV	A,SBUF
        MOV     @R1,A
        INC     R1
        INC     RDATE_LEN

I_232_EOF:
        POP	DPH
	POP	DPL
	POP 	PSW				;恢复现场
	POP 	ACC
        ;SETB 	ES                         	;开放串口中断
        RETI
;-----------------------
; 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
;----------------------------------------
;  CHECK_UP:	检查是否是"OK"
;               COM_OK
;----------------------------------------
CHECK_UP:
	LCALL 	WATCHDOG
	clr	COM_OK
        CLR     READ_OK
	MOV	R0,#BUF_DATA
CHK_COM:                         ;校验命令返回码?
        INC	R0
	INC	R0
	MOV	A,@R0
	CJNE	A,#4FH,CHK_READ
	INC	R0
	mov	a,@r0
	cjne	a,#4bh,CHECK_UP_EOF
	SETB	COM_OK
        LJMP    CHECK_UP_EOF
CHK_READ:                         ;校验数据准备提示符?
        CJNE    A,#3EH,CHECK_UP_EOF
        INC     R0
        MOV     A,@R0
        CJNE    A,#20H,CHECK_UP_EOF
        SETB    READ_OK
CHECK_UP_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:

	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','=','0',0DH,0AH
TABLE_SCOMRATE:          DB	'A','T','+','I','P','R','=','9','6','0','0',0DH,0AH
TABLE_STECHAR:           DB     'A','T','+','C','S','M','P','=','1','7',',','1','6'
                         DB       '7',',','0',',','2','4',0DH,0AH

table_msglen:            db	'A','T','+','C','M','G','S','=','1','9',0DH;,'8','1','5','0','4','1','8','0','7',0DH
table_MSGDATE:           db	30H,38H,39H,31H,36H,38H,33H,31H,30H,38H,35H;08 91 6831085
			 db	30H,39H,31H,30H,35H,46H,30H,30h,31H,31H,30H;09105f0 1100
                         db	30H,44H,39H,31H,36H,38H,33H,31H,36H,38H,31H;0d 91 6831681
			 db	31H,38H,39H,35H,34H,46H,34H,30H,30H,30H,38H;18954f4 0008
			 db	30H,30H,30H,34H,'4','F','6','0','5','9','7','d'1AH       ;0002 4e2d<sub>
                          ;34H,45H,32H,44H

⌨️ 快捷键说明

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