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

📄 sms.asm

📁 实现短消息发送报警功能
💻 ASM
字号:

T2CON           EQU    0C8H
RCAP2L          EQU    0CAH
RCAP2H          EQU    0CBH
TL2             EQU    0CCH
TH2             EQU    0CDH
;cpu 8xc52
		ORG 0000H
		LJMP MAIN
		ORG 0023H



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,#01110000B     	;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,#00000000B           ;中断优先        *  * 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
		
		lcall	sms_send

		ajmp	wait

RET


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


InitModem:
		CLR		ES
     	CLR		RI
        
        MOV     R0,#BUF_SEND
        MOV     DPTR,#TABLE_RESET
        MOV     R2,#5

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,#5
        lCALL 	ATSEND   
		MOV		R0,#BUF_DATA
		MOV		R2,#10
		
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	DELAY10MS
        ;RET
          
        MOV     R0,#BUF_SEND
        MOV     DPTR,#TABLE_SETSMS0
        MOV     R2,#10
 
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,#10
        lCALL 	ATSEND   
		MOV		R0,#BUF_DATA
		MOV		R2,#10
		
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	DELAY10MS
             
        MOV     R0,#BUF_SEND
        MOV     DPTR,#TABLE_SETSMS1
        MOV     R2,#23

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,#23
        lCALL 	ATSEND   
		MOV		R0,#BUF_DATA
		MOV		R2,#10
		
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,#10
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,#10
        lCALL 	ATSEND   
		MOV		R0,#BUF_DATA
		MOV		R2,#10
		
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	DELAY10MS
        
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
sms_send:
        MOV     R0,#BUF_SEND
        MOV     DPTR,#TABLE_msglen
        MOV     R2,#11
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,#11
        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_6
     	lCALL	DELAY10MS
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;      
        MOV     R0,#BUF_SEND
        MOV     DPTR,#TABLE_zhong
        MOV     R2,#55
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,#55
        lCALL 	ATSEND   
		MOV		R0,#BUF_DATA
		MOV		R2,#10
		
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
;		JB		BIT_ONLINE,I_232_ONLINE
	;--检查是否为"CONNECT"
		CJNE	A,#00H,I_232_EOF
		lCALL	WAIT_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		;!!!!!
		MOV		R2,#02
		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	
TABLE_SETSMS0	DB		'A','T','+','C','M','G','F','=','0',0DH
TABLE_setsms1	DB		'A','T','+','C','S','C','A','=','+','8',
				DB		'6','1','3','8','0','0','5','1','9','5','0','0',0DH	
TABLE_gogsm		DB      'A','T','+','C','O','P','S','=','0',0DH
table_msglen	db		'A','T','+','C','M','G','S','=','1','8',0DH							
table_zhong		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','6','8','0'
				db		'1','2','2','7','3','F','5','0','0','0','8'
				db		'0','0','0','2','4','E','2','D',5EH,'z',0DH

END


⌨️ 快捷键说明

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