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

📄 sms7.asm

📁 实现短消息发送报警功能
💻 ASM
📖 第 1 页 / 共 3 页
字号:
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

;口线定义
igb	        BIT     P1.1      ;点火脚
BIT_ESCL        BIT     P1.6      ;24C16时钟脚
BIT_ESDA        BIT     P1.7      ;24C16数据脚
in1    		BIT     P0.0      ;输入信号一
in2    		BIT     P0.1      ;输入信号二
in3             BIT     p0.2      ;输入信号三
SMSLED          BIT     P3.5      ;信息发送灯
READYLED        BIT     P3.7      ;初始化完成

;--用户位定义
ALREAD_ALARMA   BIT     21H.0      ;A已经报过警标志
ALREAD_ALARMB   BIT     21H.1      ;B已经报过警标志
ALREAD_ALARMC   BIT     21H.2      ;C已经报过警标志
MGS_RI          BIT     21H.3      ;有短信中断
MSG_EN          BIT     21H.4      ;短信报警禁止标准
BIT_EEF         BIT     22H.0      ;24C16读写出错标志
OBJ2_EN_OK    	BIT     22H.1      ;第二目标发送允许
IF_ACK_BIT      BIT     22H.2      ;命令已经发送等待返回码标志
COM_DATE_READY  BIT     22H.3      ;上位机有数据来了
BIT_TIMEOUT	BIT	22H.4      ;接收超时标志
SEND_OK         BIT	22H.5      ;短消息发送成功标志
READ_OK         BIT	22H.6      ;短信发送准备好标志等待短信内容
COMD_OK    	BIT     22H.7      ;复位命令返回OK成功标致
;--寄存器定义
R_EPAGE         EQU     30H        ;24C16页地址寄存器
R_EADDR         EQU     31H        ;24C16字节地址寄存器
OBJADDR         EQU     32H        ;目标号码页地址
SMSADDR         EQU     33H        ;信息内容地址
MSG_LEN         EQU     34H        ;信息长度积存器
SUM             EQU     35H        ;求和校验积存器
SDATE_LEN       EQU     36H        ;发送数据长度
RDATE_LEN	EQU	37h        ;接收数据长度
_R1		EQU	38H        ;延时积存器
_R2		EQU	39H
_R3		EQU	3AH
CMD_R           EQU     3BH        ;命令码积存器
RSMS_LIST1      EQU     3CH        ;信息存储位置1
RSMS_LIST2      EQU     3DH        ;信息存储位置2
RSEND_CONT      EQU     3EH        ;失败从发次数
STACK_TOP       EQU     40H        ;定义堆栈首址40
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,#0DCH
		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
        SETB    EA
        CLR     SMSLED
        LCALL   DELAY1000MS
        SETB    SMSLED
        LCALL   DELAY1000MS
        CLR     SMSLED
        LCALL   DELAY1000MS
        SETB    SMSLED
        CLR     EA
        lCALL	INITMODEM
WAIT_EN:
         MOV    R_EPAGE,#02H
         MOV    R_EADDR,#0FH
         MOV    R2,#1
         MOV    R0,#BUF_SEND
         LCALL  R_24C16
         JB     BIT_EEF,WAIT_EN
         DEC    R0
         CJNE   @R0,#0AAH,WAIT_EN1
         SETB   OBJ2_EN_OK
         AJMP   WAIT
WAIT_EN1:
         CLR    OBJ2_EN_OK
wait:
        setb     ea
        JNB      MGS_RI,$+6
        LCALL    RGSMMSG
        JNB      COM_DATE_READY,ALARMA
        CLR      COM_DATE_READY
        MOV      R0,#BUF_DATA+1              ;命令等待,解释执行
        MOV      A,@R0
        MOV      B,#3
        MUL      AB
        MOV      DPTR,#DATA_PROC
        JMP      @A+DPTR

ALARMA: JB     MSG_EN,WAIT
        JnB    IN1,ALARMA1                    ;A路报警检测
        CLR   ALREAD_ALARMA                  ;清已报警信号
        AJMP  ALARMB
ALARMA1:
        JB    ALREAD_ALARMA,ALARMB           ;判断是否已经报过警
        MOV    OBJADDR,#01H
        MOV    SMSADDR,#03H
        LCALL  SENDA
        SETB   ALREAD_ALARMA
        LCALL  DELAY100MS
        JNB    OBJ2_EN_OK,ALARMB              ;报警处理
        MOV    OBJADDR,#02H
        MOV    SMSADDR,#03H
        LCALL  SENDA
ALARMB:
        jnB     IN2,ALARMB1
        CLR    ALREAD_ALARMB
        AJMP   ALARMC
ALARMB1:
        JB     ALREAD_ALARMB,ALARMC
        MOV    OBJADDR,#01H
        MOV    SMSADDR,#04H
        LCALL  SENDA
        SETB   ALREAD_ALARMB
        LCALL  DELAY100MS
        JNB    OBJ2_EN_OK,ALARMC
        MOV    OBJADDR,#02H
        MOV    SMSADDR,#04H
        LCALL  SENDA
ALARMC:
        JnB     IN3,ALARMC1
        CLR    ALREAD_ALARMC
        AJMP   WAIT
ALARMC1:
        JB     ALREAD_ALARMC,WAIT
        MOV    OBJADDR,#01H
        MOV    SMSADDR,#05H
        LCALL  SENDA
        SETB   ALREAD_ALARMC
        LCALL  DELAY100MS
        JNB    OBJ2_EN_OK,WAIT
        MOV    OBJADDR,#02H
        MOV    SMSADDR,#05H
        LCALL  SENDA
        lJMP    WAIT

DATA_PROC:
         ljmp   R_CENTERNUM
         ljmp   R_OBJNUM1
         ljmp   R_OBJNUM2
         ljmp   R_ALARM1
         ljmp   R_ALARM2
         ljmp   R_ALARM3

R_CENTERNUM:
         CLR    EA
         MOV    R_EPAGE,#00H
         MOV    R_EADDR,#00H
         MOV    R2,#15
         MOV    R0,#BUF_DATA+2
         LCALL  W_24C16
         JB     BIT_EEF,R_CENTERNUM
         ajmp   WAIT
R_OBJNUM1:
         CLR    EA
         MOV    R_EPAGE,#01H
         MOV    R_EADDR,#00H
         MOV    R2,#15
         MOV    R0,#BUF_DATA+2
         LCALL  W_24C16
         JB     BIT_EEF,R_OBJNUM1
         ajmp   WAIT
R_OBJNUM2:
         CLR    EA
         MOV    R_EPAGE,#02H
         MOV    R_EADDR,#00H
         MOV    R2,#16
         MOV    R0,#BUF_DATA+2
         LCALL  W_24C16
         JB     BIT_EEF,R_OBJNUM2
         ajmp   WAIT
R_ALARM1:
         CLR    EA
         MOV    R_EPAGE,#03H
         MOV    R_EADDR,#00H
         MOV    R0,#BUF_DATA+2
         MOV    A,@R0
         ADD    A,#1
         MOV    R2,A
         MOV    R0,#BUF_DATA+2
         LCALL  W_24C16
         JB     BIT_EEF,R_ALARM1
         ajmp   WAIT
R_ALARM2:
         CLR    EA
         MOV    R_EPAGE,#04H
         MOV    R_EADDR,#00H
         MOV    R0,#BUF_DATA+2
         MOV    A,@R0
         ADD    A,#1
         MOV    R2,A
         MOV    R0,#BUF_DATA+2
         LCALL  W_24C16
         JB     BIT_EEF,R_ALARM2
         ajmp   WAIT
R_ALARM3:
         CLR    EA
         MOV    R_EPAGE,#05H
         MOV    R_EADDR,#00H
         MOV    R0,#BUF_DATA+2
         MOV    A,@R0
         ADD    A,#1
         MOV    R2,A
         MOV    R0,#BUF_DATA+2
         LCALL  W_24C16
         JB     BIT_EEF,R_ALARM3
         ajmp   WAIT
         RET

;INCLUDE MODEM.ASM
;--------------------------------------------------------------------
;  本程序处理gsmMODEM的初始化,
;
;  InitModem    --初始化MODEM,9600 BPS,
;  IN:SEND_BUF  OUT:CMD_OK
;--------------------------------------------------------------------
;复位并关闭回显
InitModem:
        CLR    EA
        SETB    READYLED
     	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
IM_2:
        MOV     R0,#BUF_SEND
        MOV     SDATE_LEN,#6
        MOV	R1,#BUF_DATA
	MOV	RDATE_LEN,#0
        SETB    IF_ACK_BIT
        SETB    EA
        SETB    TI
IM_21:
	lCALL	DELAY10MS
	MOV     A,RDATE_LEN
        CJNE    A,#6,IM_21
   	lCALL	CHECK_UP
        jnb	COMD_OK,im_2
        CLR     IF_ACK_BIT
        CLR     EA
         ;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
IM_4:
        MOV     R0,#BUF_SEND
        MOV     SDATE_LEN,#11
    	MOV	R1,#BUF_DATA
	MOV	RDATE_LEN,#0
        SETB    IF_ACK_BIT
        SETB    EA
        SETB    TI
IM_41:
	lCALL	DELAY100MS
	MOV     A,RDATE_LEN
        CJNE    A,#6,IM_41
   	lCALL	CHECK_UP
        jnb	COMD_OK,im_4
        CLR     IF_ACK_BIT
        CLR     EA
;==================================
;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
IM_8:
        MOV     R0,#BUF_SEND
        MOV     SDATE_LEN,#11
        MOV	R1,#BUF_DATA
	MOV	RDATE_LEN,#0
        SETB    IF_ACK_BIT
        SETB    EA
        SETB    TI
 IM_81:
	lCALL	DELAY100MS
	MOV     A,RDATE_LEN
        CJNE    A,#6,IM_81
   	lCALL	CHECK_UP
        jNb	COMD_OK,im_8
        CLR     IF_ACK_BIT
        CLR     EA
;=====================================
;波特率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
IM_10:
        MOV     R0,#BUF_SEND
        MOV     SDATE_LEN,#13
        MOV	R1,#BUF_DATA
	MOV	RDATE_LEN,#0
        SETB    IF_ACK_BIT
        SETB    EA
        SETB    TI
IM_101:
	lCALL	DELAY100MS
	MOV     A,RDATE_LEN
        CJNE    A,#6,IM_101
  	lCALL	CHECK_UP
        jNb	COMD_OK,im_10
        CLR     IF_ACK_BIT
        CLR     EA
;=====================================
;设置短信提示
;=====================================
 	MOV     R0,#BUF_SEND
        MOV     DPTR,#TABLE_STECHAR
        MOV     R2,#19
IM_11:
        CLR     A
        MOVC    A,@A+DPTR
        MOV	@R0,A
        INC     DPTR
        INC     R0
        DJNZ    R2,IM_11
IM_12:
        MOV     R0,#BUF_SEND
        MOV     SDATE_LEN,#19
        MOV	R1,#BUF_DATA
	MOV	RDATE_LEN,#0
        SETB    IF_ACK_BIT
        SETB    EA
        SETB    TI
IM_121:
	lCALL	DELAY100MS
	MOV     A,RDATE_LEN
        CJNE    A,#6,IM_121
  	lCALL	CHECK_UP
        jNb	COMD_OK,im_12
        CLR     IF_ACK_BIT
        ;AJMP    $
        CLR     EA
        CLR     READYLED
        RET
;==============================
;短信接收 ,删除
;==============================
RGSMMSG:
        CLR     MGS_RI
        MOV     R0,#BUF_SEND
        MOV     DPTR,#TABLE_RMSG
        MOV     R2,#8
REG_1:
        CLR     A
        MOVC    A,@A+DPTR
        MOV	@R0,A
        INC     DPTR
        INC     R0
        DJNZ    R2,REG_1
        MOV     @R0,RSMS_LIST1
        MOV     A,RSMS_LIST2
        CJNE    A,#0DH,REG_2
        INC     R0
        MOV     @R0,#0DH
        INC     R0
        MOV     @R0,#0AH
        MOV     SDATE_LEN,#11
        AJMP    REG_2_1
REG_2:
        INC     R0
        MOV     @R0,RSMS_LIST2
        INC     R0
        MOV     @R0,#0DH
        INC     R0
        MOV     @R0,#0AH
        MOV     SDATE_LEN,#12
REG_2_1:
        MOV     R0,#BUF_SEND
        MOV	R1,#BUF_DATA
	MOV	RDATE_LEN,#0
        SETB    IF_ACK_BIT
        SETB    EA
        SETB    TI
REG_21:
	lCALL	DELAY100MS
        LCALL   DELAY100MS
        LCALL   DELAY100MS
        LCALL   DELAY100MS
        LCALL   DELAY100MS
        MOV     A,RDATE_LEN
        CJNE    A,#98,REG_ERR
        CLR     IF_ACK_BIT

⌨️ 快捷键说明

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