📄 sms7.asm
字号:
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 + -