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

📄 sms1.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,#00100000B           ;中断使能寄存器  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

        MOV     R0,#BUF_SEND
        MOV     DPTR,#TABLE_SETSMS0
        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

        MOV     R0,#BUF_SEND
        MOV     DPTR,#TABLE_GOGSM
        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
        
; 		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,#20
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,#20
        lCALL 	ATSEND
		MOV		R0,#BUF_DATA
		MOV		R2,#10

SS_41:
		lCALL	WAIT_RI
		JC		SS_4
		CLR		RI
		MOV		A,SBUF
		MOV		@R0,A
		INC		R0
		DJNZ	R2,SS_41
        lCALL	CHECK
        JnB		chr_OK,SS_4
       	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




		;SETB	BIT_ONLINE
		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_SETSMS0	DB		'A','T','+','C','M','G','F','=','1',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_gogsm		DB      'A','T','+','C','O','P','S','=','0',0DH,0AH
;TABLE_SCOMRATE	DB		'A','T','+','I','P','R','=','9','6','0','0',ODH,0AH

table_msglen	db		'A','T','+','C','M','G','S','=','1','3','8','1','5','0','1','7','4','1','5',0DH
table_zhong		db		't','e','s','t',5eh,'Z'
				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 + -