下面是我们用西门子3508手机开发的车辆报警系统源程序,西门子3508支持
AT指令,和TC35I模块完全相同,所以网友可以借鉴学习。
;采用
AT89C2051 单片机 ,晶振11.0592MHz,通讯速率19200,采用TTL串口通讯
;手机号码缓存在28H-33H的内存中
;短信内容缓存在48H-57H的内存中
;短信中心的号码存放在58H-63H的内存中
;密码"车辆报警"存放在64H-73H的内存中
;手机号码存放在74H-7F的内存中
;P1.0为手机开关机控制端
;P1.1为串口接收模块数据OK
;P1.2为解防/设防控制端
;P1.3
;P1.4
;P1.5
;P1.6
;P1.7
;P3.0串行接收端(RXD)
;P3.1串行发射端(TXD)
;P3.2
;P3.3
;P3.4
;P3.5
;P3.7
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
ORG 0000H
AJMP MAIN;转入主程序
ORG 0003H ;外部中断P3.2脚INT0入口地址
NOP
NOP
NOP
NOP
NOP
NOP
RETI
ORG 000BH;中断陷阱
NOP
NOP
NOP
NOP
NOP
NOP
RETI
ORG 0013H;中断陷阱
NOP
NOP
NOP
NOP
NOP
NOP
RETI
ORG 001BH;中断陷阱
NOP
NOP
NOP
NOP
NOP
NOP
RETI
ORG 0023H
NOP
NOP
NOP
NOP
RETI
FOK EQU P1.0;定义为串口接收模块数据OK
KGJ EQU P1.1;定义手机开关机控制端
SX EQU P1.2;定义手机模块上线状态
JSF EQU P1.3;定义解防/设防控制端(解防 0 设防1)
TC EQU P1.4;定义
ZK EQU P1.5;定义中控控制端
;EQU P1.6;定义
KK EQU P1.7;定义
BJ EQU P3.2;定义报警触发控制端
DY EQU P3.3;定义电源断线控制端
CM EQU P3.4;定义车门控制端
XL EQU P3.5;定义行李厢
JJ EQU P3.6;定义紧急
DD EQU P3.7;定义低电压报告
MAIN:
;以下为主程序进行CPU中断方式设置
SETB IT0 ;设定INT0的触发方式为脉冲负边沿触发
MOV SCON,#50H;设置成串口1方式
MOV TMOD,#20H;波特率发生器T1工作在模式2上
MOV TH1,#0FDH;预置初值(按照波特率9600BPS预置初值)
MOV TL1,#0FDH;预置初值(按照波特率9600BPS预置初值)
SETB TR1;启动定时器T1
MOV PCON,#10000000B;设定SMOD为1,波特率翻倍!
;以上完成串口19200通讯初始化设置
LCALL YUSJ;开机清除接收短消息手机号码
CLR KGJ;打开手机
MOV DPTR,#1000;延时1秒
LCALL DELAYXMS;开机延时
SETB KGJ;复位手机控制
; MOV DPTR,#10000;延时10秒
;LCALL DelayXmS;开机延时
LCALL
ATEOK;开机发送
ATE指令!
LCALL CNMI ;发送(
AT+CNMI=1,1,0,0,1),短信到达TE
LCALL SCQBDX;调用删除SIM卡中所有短信的子程序
;完成和手机通信握手,和SIM卡删除所有短消息初始化
START:
LCALL XRDXZX;调用询问手机SIM卡中短信中心号码子程序
LCALL XRSJ;读出授权电话号码及密码,写入内存中
LCALL MJCS
LCALL MJCS
CLR SX;模块上线
;**********************************************
KKS:
JB RI,UARTI;检测到RI变1就退出
JNB BJ,BAOJIN
JB RI,UARTI;检测到RI变1就退出
JNB DY,DYBJ
JB RI,UARTI;检测到RI变1就退出
JNB CM,CMBJ
JB RI,UARTI;检测到RI变1就退出
JNB XL,XLBJ
JB RI,UARTI;检测到RI变1就退出
JNB JJ,JJBJ
AJMP KKS
;**********************************************
DYBJ:
LCALL FDYBJ
AJMP KKS
CMBJ:
LCALL FCMBJ
AJMP KKS
XLBJ:
LCALL FXLBJ
AJMP KKS
JJBJ:
LCALL FJJBJ
AJMP KKS
;报警程序
BAOJIN:
LCALL CPAS;调用模块状态报告子程序
MOV A,25H
CJNE A,#34H,BAOJIN1;判断串口数据
AJMP BAOJIN3;如果模块正在呼出或通话,就退出
BAOJIN1:
LCALL CPAS
MOV A,25H
CJNE A,#34H,BAOJIN2
AJMP BAOJIN3
BAOJIN2:
LCALL
ATH;调用串口发送
ATH挂机子程序
LCALL PDOK;判断手机是否回答OK?
JZ BAOJIN2;如果没有检测到OK,重复发
LCALL FBJDX
MOV DPTR,#5000;延时5秒
LCALL DelayXmS
LCALL
ATD;调用串口发送13906079959子程序
BAOJIN3:
AJMP KKS
;**********************************************
;**********************************************
;进入串口中断方式接收
UARTI:
CLR RI;清楚串口中断标志
LCALL PDDA;调用串口接收0D/0A数据子程序
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#2BH,PDRD;判断串口数据+PDR
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#43H,EXITT1;判断串口数据C
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
;+CMTI: "SM",7短信到达存放位置
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#4DH,EXITT1;判断串口数据M
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#54H,EXITT1;判断串口数据T
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#49H,EXITT1;判断串口数据I
CLR RI;软件清除串口中断标记
;检测到"CMTI"的ASCII码--------
;跳过7个内存(: "SM",)
MOV R3,#7;定义接收数据的总长度
LCALL TGSJ;调用接收串口数据子程序
;短信位置,存放在26H中
MOV R0,#26H;数据在内存的存放位置
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
MOV @R0,A
INC R0;内存单元地址0
;跳过8个内存
MOV R3,#8;定义接收数据的总长度
LCALL TGSJ;调用接收串口数据子程序
LCALL DXNR;解析短信内容
EXITT1:LJMP EXITT
PDRD:LCALL RING;电话呼入提示
EXITT:
CLR RI;软件清除串口中断标记,退出串口中断
AJMP KKS
;**********************************************
RING:;电话呼入提示
CLR RI;清楚串口中断标志
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#52H,RING1;判断串口数据R
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#49H,RING1;判断串口数据I
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#4EH,RING1;判断串口数据N
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#47H,RING1;判断串口数据G
CLR RI;软件清除串口中断标记
LCALL PDDA;调用串口接收0D/0A数据子程序
MOV DPTR,#100;延时0.1秒
LCALL DelayXmS
;发送
AT+CLCC
LCALL CLCC;调用来电显示指令子程序
;跳过20个内存(: 1,1,4,0,0,")
MOV R3,#20;定义接收数据的总长度
LCALL TGSJ;调用接收串口数据子程序
LCALL DHHM;判断来电号码
JZ GJ
;跳过13个内存
MOV R3,#13;定义接收数据的总长度
LCALL TGSJ;调用接收串口数据子程序
MOV DPTR,#100;延时0.1秒
LCALL DelayXmS
;检查是否继续呼入
;等待第二次RING电话呼入提示
CLR RI;软件清除串口中断标记
LCALL PDDXRI;5秒内检测串口是否有数据返回?
JNC RING1;如果5秒内没检查到铃音,就退出
;震铃2次后关机,解防/设防
;震铃5次后进入通话状态
;跳过8个内存
MOV R3,#8;定义接收数据的总长度
LCALL TGSJ;调用接收串口数据子程序
;**********************************************
PDLYT:
;发送
AT+CPAS,模块状态报告
MOV R2,#30
ZLYKK1:
MOV DPTR,#500;延时0.5秒
LCALL DelayXmS
LCALL CPAS;调用模块状态报告子程序
MOV A,25H
CJNE A,#30H,ZL1
AJMP ZLYK;如果没有检测到呼入,就进入振铃遥控
ZL1:
DJNZ R2,ZLYKK1
MOV R2,#15
ZLYKK2:
MOV DPTR,#500;延时0.5秒
LCALL DelayXmS
LCALL CPAS;调用模块状态报告子程序
MOV A,25H
CJNE A,#30H,ZL2
AJMP RING2;如果没有检测到呼入,就退出
ZL2:
DJNZ R2,ZLYKK2
;**********************************************
LCALL
ATA;应答
RING1:AJMP RING2
GJ:
MOV DPTR,#500;延时1秒
LCALL DelayXmS
LCALL
ATH;调用串口发送
ATH挂机子程序
AJMP RING2
ZLYK:
MOV DPTR,#500;延时0.5秒
LCALL DelayXmS
LCALL CPAS;调用模块状态报告子程序
MOV A,25H
CJNE A,#30H,ZLYKK1;如果没有检测到呼入,就退出
JB JSF,ZLYK1
SETB JSF;设防
AJMP RING2
ZLYK1:CLR JSF;解防
RING2:
RET
;**********************************************
;**********************************************
DXNR:;信息内容检测
MOV DPTR,#1000
LCALL DELAYXMS
LCALL CMGR;调用读短信子程序
MOV R3,#42;跳过42个数据
LCALL TGSJ;调用跳过串口数据子程序
LCALL DXJC;检测电话号码
JZ DPDSQ;如果电话号码是默认值,就检测信息内容
;跳过20个内存(含0 4)
MOV R3,#20;定义接收数据的总长度
LCALL TGSJ;调用接收串口数据子程序
;**********************************************
PDCX:;查询信息
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#36H,PDJF;判断串口数据6
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#37H,PDJF;判断串口数据7
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#45H,PDJF;判断串口数据E
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#35H,PDJF;判断串口数据5
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#38H,PDJF;判断串口数据8
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#42H,PDJF;判断串口数据B
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#45H,PDJF;判断串口数据E
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#32H,PDJF;判断串口数据2
CLR RI;软件清除串口中断标记
MOV R3,#8;跳过8个数据
LCALL TGSJ;调用跳过串口数据子程序
JB JSF,DFASF
LCALL FAJF;调用发送"解防"子程序
AJMP SCC
DFASF:LCALL FASF;调用发送"设防"子程序
AJMP SCC
;**********************************************
DPDSQ:LCALL PDSQ
;**********************************************
;检测"(解)防",PDU码--0489E39632
;30 34 38 (39 45 33) 39 36 33 32
PDJF:
MOV DPTR,#1000;延时1秒
LCALL DelayXmS
LCALL CMGR;再次调用读短信子程序
MOV R3,#74;跳过74个数据
LCALL TGSJ;调用跳过串口数据子程序
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#38H,PDSQ;判断串口数据8
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#39H,SHEFAN;判断串口数据9
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#45H,PDSQ;判断串口数据E
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#33H,PDSQ;判断串口数据3
CLR RI;软件清除串口中断标记
LCALL FANG;调用(防)接收串口数据子程序
JZ SC
CLR JSF;解防
AJMP SCC
;**********************************************
;检测"(设)防",PDU码--048BBE9632
;30 34 38 (42 42 45) 39 36 33 32
SHEFAN:;(设)
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#42H,PDSQ;判断串口数据B
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#42H,PDSQ;判断串口数据B
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#45H,PDSQ;判断串口数据E
CLR RI;软件清除串口中断标记
LCALL FANG;调用(防)接收串口数据子程序
JZ SC
SETB JSF;设防
SC:AJMP SCC
;**********************************************
;**********************************************
PDSQ:;短信授权检测
;如果电话号码不是默认值,就检测信息内容
MOV DPTR,#1000
LCALL DelayXmS
LCALL CMGR;再次调用读短信子程序
MOV R3,#74;跳过74个数据
LCALL TGSJ;调用跳过串口数据子程序
;校验存放在64H-73H的内存中密码"车辆报警"
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,64H,SC;判断串口数据8
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,65H,SC;判断串口数据F
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,66H,SC;判断串口数据 6
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,67H,SC;判断串口数据 6
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,68H,SC;判断串口数据8
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,69H,SC;判断串口数据F
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,6AH,SC;判断串口数据 8
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,6BH,SC;判断串口数据 6
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,6CH,SCC;判断串口数据 6
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,6DH,SCC;判断串口数据2
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,6EH,SCC;判断串口数据A
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,6FH,SCC;判断串口数据 5
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,70H,SCC;判断串口数据 8
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,71H,SCC;判断串口数据B
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,72H,SCC;判断串口数据6
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,73H,SCC;判断串口数据 6
;"车辆报警"检测成功!判断是否要修改密码?
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#36H,FSQR;判断串口数据
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#35H,FSQR;判断串口数据
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#33H,FSQR;判断串口数据
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#39H,FSQR;判断串口数据
;检测到"改"的汉字内码
;密码"车辆报警"存放在64H-73H的内存中
;将"改"后面的两个汉字作为密码保存到 单片机 64H-73H的内存中!
MOV R3,#16;定义接收数据的总长度为16个
MOV R0,#64H;数据从内存的64H开始依次往后存放
LCALL GPSSJ;调用接收串口数据子程序
MOV R3,#8;跳过8个数据
LCALL TGSJ;调用跳过串口数据子程序
FSQR:
LCALL JPA
SCC:;删除短信
LCALL SCJSDX
RET
JPA:
MOV DPTR,#1000
LCALL DELAYXMS
LCALL CMGR;再次调用读短信子程序
MOV R3,#42;跳过42个数据
LCALL TGSJ;调用跳过串口数据子程序
;把短信授权的手机号码存储起来
;手机号码存放在74H-7F的内存中
MOV R3,#12;定义接收手机号码的数据长度
MOV R0,#74H;数据在内存的存放位置
LCALL GPSSJ;调用接收串口数据子程序
MOV DPTR,#1000
LCALL DELAYXMS
;校验短信授权的手机号码
LCALL CMGR;再次调用读短信子程序
MOV R3,#42;跳过42个数据
LCALL TGSJ;调用跳过串口数据子程序
LCALL DXJC
JZ JPA
LCALL FDX;发送授权成功的短信息通知客户!
JNZ JPA1
LCALL FDX;发送授权成功的短信息通知客户!
JPA1:LCALL BCDM;保存授权电话号码及密码
RET
;发送
AT指令!
AT:
MOV A,#41H;将ASCII码A发送到串口去
LCALL FS
MOV A,#54H;将ASCII码T发送到串口去
LCALL FS
RET
;发送
ATH,挂机
ATH:
LCALL
AT MOV A,#48H
LCALL FS
LCALL HC;回车!
RET
;发送
ATA,应答
ATA:
LCALL
AT MOV A,#41H
LCALL FS
LCALL HC;回车!
RET
;发送
AT+C,应答
ATC:
LCALL
AT MOV A,#2BH
LCALL FS
MOV A,#43H
LCALL FS
RET
;发送HC回车指令!
HC:
MOV A,#0DH
LCALL FS
MOV A,#0AH
LCALL FS
RET
;发送
AT+CMGD=删除第X条短消息指令!
SCDX:
LCALL
ATC
MOV A,#4DH
LCALL FS
MOV A,#47H
LCALL FS
MOV A,#44H
LCALL FS
MOV A,#3DH
LCALL FS
RET
;发送
AT+CPBW=
CPBW:
LCALL
ATC
MOV A,#50H
LCALL FS
MOV A,#42H
LCALL FS
MOV A,#57H
LCALL FS
MOV A,#3DH
LCALL FS
RET
;发送
AT+CPBR=
CPBR:
LCALL
ATC
MOV A,#50H
LCALL FS
MOV A,#42H
LCALL FS
MOV A,#52H
LCALL FS
MOV A,#3DH
LCALL FS
RET
;发送
AT+CNMI=1,1,0,0,1,短信到达TE
CNMI:
LCALL
ATC
MOV A,#4EH;4E
LCALL FS
MOV A,#4DH;4D
LCALL FS
MOV A,#49H;49
LCALL FS
MOV A,#3DH;3D
LCALL FS
MOV A,#31H;31
LCALL FS
MOV A,#2CH;2C
LCALL FS
MOV A,#31H;31
LCALL FS
MOV A,#2CH;2C
LCALL FS
MOV A,#30H;30
LCALL FS
MOV A,#2CH;2C
LCALL FS
MOV A,#30H;30
LCALL FS
MOV A,#2CH;2C
LCALL FS
MOV A,#31H;31
LCALL FS
LCALL HC;回车!
LCALL PDOK;判断手机是否回答OK?
JZ CNMI;如果没有检测到OK,重复发
RET
;发送
AT+CMGR=26H,读短信
;00 43 00 4D 00 47 00 52 00 3D
CMGR:
LCALL
ATC
MOV A,#4DH
LCALL FS
MOV A,#47H
LCALL FS
MOV A,#52H
LCALL FS
MOV A,#3DH
LCALL FS
MOV A,26H
LCALL FS
LCALL HC;回车!
RET
;发送
AT+CMGL=4列出所有短消息指令!
CMGL:
LCALL
ATC
MOV A,#4DH
LCALL FS
MOV A,#47H
LCALL FS
MOV A,#4CH
LCALL FS
MOV A,#3DH
LCALL FS
MOV A,#34H
LCALL FS
LCALL HC;回车!
RET
FANG:
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#39H,FANG1;判断串口数据9
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#36H,FANG1;判断串口数据6
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#33H,FANG1;判断串口数据3
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#32H,FANG1;判断串口数据2
CLR RI;软件清除串口中断标记
;跳过8个内存(0D 0A 0D 0A 4F 4B 0D 0A)
MOV R3,#8;定义接收数据的总长度
LCALL TGSJ;调用接收串口数据子程序
AJMP FANG2
FANG1:LCALL SB
FANG2:
RET
;和手机握手, 单片机 发
ATE手机回答OK子程序
ATEOK:
MOV DPTR,#500
LCALL DELAYXMS
;发送
ATE指令!
LCALL
AT MOV A,#45H;将ASCII码E发送到串口去
LCALL FS
LCALL HC;回车!
LCALL PDOK;判断手机是否回答OK?
JZ
ATEOK;如果没有检测到OK,重复发
RET
;发送
AT+CSCA?查询短信中心号码子程序
CSCA:
MOV DPTR,#500
LCALL DELAYXMS
LCALL
ATC
MOV A,#53H
LCALL FS
MOV A,#43H
LCALL FS
MOV A,#41H
LCALL FS
MOV A,#3FH
LCALL FS
LCALL HC;回车!
RET
;检测手机是否回答短信中心号码?
XRDXZX:
LCALL CSCA
MOV R3,#13;跳过13个数据
LCALL TGSJ;调用跳过串口数据子程序
JNC XRDXZX1
;准备接收短信中心号码
MOV R3,#5;循环接收5次
MOV R0,#58H;数据从58H-63H内存开始存放
TFSJ:
INC R0;内存单元地址
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
MOV @R0,A
DEC R0
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
MOV @R0,A
INC R0;内存单元地址
INC R0;内存单元地址
DJNZ R3,TFSJ;判断是否已经接收完10个短信中心号码?
MOV A,#46H;字母F的固定代码
MOV @R0,A
INC R0;内存单元地址
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
MOV @R0,A
INC R0;内存单元地址
;短信中心的号码已经存放在58H-63H的内存中
MOV R3,#13;跳过13个数据
LCALL TGSJ;调用跳过串口数据子程序
LCALL CSCA;调用询问手机SIM卡中短信中心号码子程序
MOV R3,#13;跳过13个数据
LCALL TGSJ;调用跳过串口数据子程序
LCALL JYZXHM;调用校验短信中心号码子程序
JZ XRDXZX
AJMP XRDXZX2
XRDXZX1:LCALL XRDXZX
XRDXZX2:
RET
;检测13800597500,PDU码--3108507905F0
;短信中心的号码存放在58H-63H的内存中
JYZXHM:
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,59H,JYZXHM1;判断串口数据1
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,58H,JYZXHM1;判断串口数据3
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,5BH,JYZXHM1;判断串口数据8
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,5AH,JYZXHM1;判断串口数据0
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,5DH,JYZXHM1;判断串口数据0
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,5CH,JYZXHM1;判断串口数据5
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,5FH,JYZXHM1;判断串口数据9
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,5EH,JYZXHM1;判断串口数据7
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,61H,JYZXHM1;判断串口数据5
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,60H,JYZXHM1;判断串口数据0
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,63H,JYZXHM1;判断串口数据0
CLR RI;软件清除串口中断标记
MOV R3,#13;跳过13个数据
LCALL TGSJ;调用跳过串口数据子程序
AJMP JYZXHM2
JYZXHM1:LCALL SB
JYZXHM2:
RET
;读出授权电话号码及密码,写入内存中
XRSJ:
MOV DPTR,#2000
LCALL DELAYXMS
LCALL CPBR;读出授权电话
AT+CPBR=1
MOV A,#31H
LCALL FS
LCALL HC
LCALL DCSJ
JNC XRSJ1
;手机号码存放在74H-7F的内存中
MOV R3,#12;定义接收手机号码的数据长度
MOV R0,#74H;数据在内存的存放位置
LCALL GPSSJ;调用接收串口数据子程序
MOV R3,#16;跳过16个数据
LCALL TGSJ;调用跳过串口数据子程序
;读出密码
AT+CPBR=2
LCALL CPBR
MOV A,#32H
LCALL FS
LCALL HC
LCALL DCSJ
JNC XRSJ1
;密码"车辆报警"存放在64H-73H的内存中
MOV R3,#16;定义接收手机号码的数据长度
MOV R0,#64H;数据在内存的存放位置
LCALL GPSSJ;调用接收串口数据子程序
MOV R3,#16;跳过16个数据
LCALL TGSJ;调用跳过串口数据子程序
RET
DCSJ:
;+CPBR: 1,"13906079959",129,""
MOV R3,#12;跳过12个数据
LCALL TGSJ;调用跳过串口数据子程序
XRSJ1:
RET
;写入授权电话号码及密码
BCDM:
;
AT+CPBW=1,"13906079959"
DDH:;写入授权电话号码
LCALL CPBW
MOV A,#31H
LCALL FS
MOV A,#2CH
LCALL FS
MOV A,#22H
LCALL FS
LCALL JSFSJ;调用写入授权电话号码13906079959
MOV A,#22H
LCALL FS
LCALL HC
LCALL PDOK
JZ DDH
;写入密码
;
AT+CPBW=2,"8F 66 8F 86 62 A5 8B 66"
XMM:
LCALL CPBW
MOV A,#32H
LCALL FS
MOV A,#2CH
LCALL FS
MOV A,#22H
LCALL FS
;写入"车辆报警"4个汉字 从内存64H-73H一共16个内存
MOV R3,#16;定义发送的数据总长度为16个
MOV R0,#64H;数据从内存的64H开始
LCALL HZSZ;调用发送内存数据的子程序
MOV A,#22H
LCALL FS
LCALL HC
LCALL PDOK
JZ XMM
RET
JCDYH:
CLR RI;清除有串口数据标志
LCALL PDRI;2秒内检测串口是否有数据返回?
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#0DH,WD;判断串口数据
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#0AH,WD;判断串口数据
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#3EH,WD;判断串口数据
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#20H,WD;判断串口数据
CLR RI;软件清除串口中断标记
;判断手机是不是回答>代码? 0D 0A 3E 20
MOV A,#0FFH;检测到>,对A置1
RET
WD:CLR A;没有检测到>,对A清零
CLR RI;清除有串口数据标志
RET
;检测手机是否回答OK?
PDOK:
LCALL PDDA
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#4FH,SB;判断串口数据
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#4BH,SB;判断串口数据
LCALL PDDA
;判断是不是手机回答的OK代码? 0D 0A 4F 4B 0D 0A
MOV A,#0FFH;检测到OK,对A置1
RET
;检测手机是否回答0D/0A?
PDDA:
CLR RI;清除有串口数据标志
LCALL PDRI;2秒内检测串口是否有数据返回?
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#0DH,SB;判断串口数据
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#0AH,SB;判断串口数据
CLR RI;软件清除串口中断标记
RET
SB:CLR A;没有检测到OK,对A清零
CLR RI;清除有串口数据标志
RET
;发送
AT+CLCC,来电显示
;00 43 00 4C 00 43 00 43
CLCC:
LCALL
ATC
MOV A,#4CH
LCALL FS
MOV A,#43H
LCALL FS
MOV A,#43H
LCALL FS
LCALL HC;回车!
RET
;发送
AT+CPAS查询手机状态子程序
CPAS:
LCALL
ATC
MOV A,#50H
LCALL FS
MOV A,#41H
LCALL FS
MOV A,#53H
LCALL FS
LCALL HC;回车!
;手机状态子程序
;跳过9个内存
MOV R3,#9;定义接收数据的总长度
LCALL TGSJ;调用接收串口数据子程序
MOV R0,#25H;数据在内存的存放位置
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
MOV @R0,A
INC R0;内存单元地址
;跳过8个内存
MOV R3,#8;定义接收数据的总长度
LCALL TGSJ;调用接收串口数据子程序
RET
;发送
AT+CMGS=150,发送短信
;00 43 00 4D 00 47 00 53 00 3D
CMGS:
LCALL
ATC
MOV A,#4DH
LCALL FS
MOV A,#47H
LCALL FS
MOV A,#53H
LCALL FS
MOV A,#3DH
LCALL FS
MOV A,#31H
LCALL FS
MOV A,#35H
LCALL FS
MOV A,#30H
LCALL FS
LCALL HC;回车!
LCALL JCDYH;调用等待手机回答“>”的子程序
JNC CSJ;检测到>,转入CSJ
MOV DPTR,#2000;延时2秒
LCALL DelayXmS
AJMP CMGS
CSJ:
LCALL DXZT;调用发固定的短信字头089168子程序
LCALL HMCS;调用发送短信中心号码子程序13800597500
LCALL DZZB;调用短信中部固定数据11000B81
LCALL JSFSJ;调用发送短信接收方手机号码子程序13906079959
LCALL DYZXSJ;调用下部固定数据0008A9
RET
;发送短信固定字头089168子程序
DXZT:
MOV A,#30H
LCALL FS
MOV A,#38H
LCALL FS
MOV A,#39H
LCALL FS
MOV A,#31H
LCALL FS
MOV A,#36H
LCALL FS
MOV A,#38H
LCALL FS
RET
;发送短信中心号码子程序
;短信中心的号码存放在58H-63H的内存中
HMCS:
MOV A,58H
LCALL FS
MOV A,59H
LCALL FS
MOV A,5AH
LCALL FS
MOV A,5BH
LCALL FS
MOV A,5CH
LCALL FS
MOV A,5DH
LCALL FS
MOV A,5EH
LCALL FS
MOV A,5FH
LCALL FS
MOV A,60H
LCALL FS
MOV A,61H
LCALL FS
MOV A,62H
LCALL FS
MOV A,63H
LCALL FS
RET
;发送短信中间固定数据11000B81子程序
DZZB:
MOV A,#31H
LCALL FS
MOV A,#31H
LCALL FS
MOV A,#30H
LCALL FS
MOV A,#30H
LCALL FS
MOV A,#30H
LCALL FS
MOV A,#42H
LCALL FS
MOV A,#38H
LCALL FS
MOV A,#31H
LCALL FS
RET
;发送短信息接收方手机号码子程序
;手机号码存放在74H-7F的内存中
JSFSJ:
MOV A,74H
LCALL FS
MOV A,75H
LCALL FS
MOV A,76H
LCALL FS
MOV A,77H
LCALL FS
MOV A,78H
LCALL FS
MOV A,79H
LCALL FS
MOV A,7AH
LCALL FS
MOV A,7BH
LCALL FS
MOV A,7CH
LCALL FS
MOV A,7DH
LCALL FS
MOV A,7EH
LCALL FS
MOV A,7FH
LCALL FS
RET
;发送短信中间固定数据0008A9子程序
DYZXSJ:
MOV A,#30H
LCALL FS
MOV A,#30H
LCALL FS
MOV A,#30H
LCALL FS
MOV A,#38H
LCALL FS
MOV A,#41H
LCALL FS
MOV A,#39H
LCALL FS
RET
;短信发送检测,+CMGS: 138
FSCG:CLR RI;清除有串口数据标志
LCALL PDDXRI;5秒内检测串口是否有数据返回?
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#0DH,SBB;判断串口数据
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#0AH,SBB;判断串口数据
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#2BH,SBB;判断串口数据+
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#43H,SBB;判断串口数据C
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#4DH,SBB;判断串口数据M
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#47H,SBB;判断串口数据G
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,#53H,SBB;判断串口数据S
CLR RI;软件清除串口中断标记
;检测到"CMGS"的ASCII码--------
;跳过5个内存(: 116)
MOV R3,#5;定义接收数据的总长度
LCALL TGSJ;调用接收串口数据子程序
AJMP FSCG1
SBB:LCALL SB
FSCG1:
RET
;发送
ATD,拨打电话13906079959
ATD:
LCALL
AT MOV A,#44H
LCALL FS
MOV A,75H
LCALL FS
MOV A,74H
LCALL FS
MOV A,77H
LCALL FS
MOV A,76H
LCALL FS
MOV A,79H
LCALL FS
MOV A,78H
LCALL FS
MOV A,7BH
LCALL FS
MOV A,7AH
LCALL FS
MOV A,7DH
LCALL FS
MOV A,7CH
LCALL FS
MOV A,7FH
LCALL FS
MOV A,#3BH
LCALL FS
LCALL HC;回车!
RET
;发送"恭喜您!您已经获得车辆报警系统的控制权限!"短消息的子程序
FDX:
MOV DPTR,#500
LCALL DELAYXMS
LCALL CMGS;发送
AT+CMGS=150短信长度子程序
;发送汉字的字数(24+4个汉字)
MOV A,#33H
LCALL FS
MOV A,#38H
LCALL FS
;准备发送"恭喜您!您已经获得车辆报警系统的控制权限!密码:"汉字
MOV DPTR,#TAB1
MOV R1,#96;发送24个汉字
LCALL FSS;调用发送汉字的子程序
;发送"车辆报警"4个汉字 从内存64H-73H一共16个内存
MOV R3,#16;定义发送的数据总长度为16个
MOV R0,#64H;数据从内存的64H开始
LCALL HZSZ;调用发送内存数据的子程序
MOV A,#1AH;发送16进制的1A结束字符
LCALL FS
LCALL FSCG;调用短信发送检测子程序
RET
;发送"有人动您的车,请察看!"短消息的子程序
FBJDX:
LCALL CMGS;发送
AT+CMGS=150短信长度子程序
;发送汉字的字数(11个汉字)
MOV A,#31H
LCALL FS
MOV A,#36H
LCALL FS
;准备发送"有人动您的车,请察看!"
MOV DPTR,#TAB2
MOV R1,#44;发送11个汉字
LCALL FSS;调用发送汉字的子程序
MOV A,#1AH;发送16进制的1A结束字符
LCALL FS
RET
;发送"车辆电源异常,请检查!"短消息的子程序
FDYBJ:
LCALL CMGS;发送
AT+CMGS=150短信长度子程序
;发送汉字的字数(11个汉字)
MOV A,#31H
LCALL FS
MOV A,#36H
LCALL FS
;准备发送"车辆电源异常,请检查!"
MOV DPTR,#TAB3
MOV R1,#44;发送11个汉字
LCALL FSS;调用发送汉字的子程序
MOV A,#1AH;发送16进制的1A结束字符
LCALL FS
LCALL FSCG;调用短信发送检测子程序
JNZ FDYBJ1
MOV DPTR,#500
LCALL DELAYXMS
AJMP FDYBJ
FDYBJ1:
RET
;发送"车门已被打开,请检查!"短消息的子程序
FCMBJ:
LCALL CMGS;发送
AT+CMGS=150短信长度子程序
;发送汉字的字数(11个汉字)
MOV A,#31H
LCALL FS
MOV A,#36H
LCALL FS
;准备发送"车门已被打开,请检查!"
MOV DPTR,#TAB4
MOV R1,#44;发送11个汉字
LCALL FSS;调用发送汉字的子程序
MOV A,#1AH;发送16进制的1A结束字符
LCALL FS
LCALL FSCG;调用短信发送检测子程序
JNZ FCMBJ1
MOV DPTR,#500
LCALL DELAYXMS
AJMP FCMBJ
FCMBJ1:
RET
;发送"行李厢异常,请检查!"短消息的子程序
FXLBJ:
LCALL CMGS;发送
AT+CMGS=150短信长度子程序
;发送汉字的字数(10个汉字)
MOV A,#31H
LCALL FS
MOV A,#34H
LCALL FS
;准备发送"行李厢异常,请检查!"
MOV DPTR,#TAB5
MOV R1,#40;发送10个汉字
LCALL FSS;调用发送汉字的子程序
MOV A,#1AH;发送16进制的1A结束字符
LCALL FS
LCALL FSCG;调用短信发送检测子程序
JNZ FXLBJ1
MOV DPTR,#500
LCALL DELAYXMS
AJMP FXLBJ
FXLBJ1:
RET
;发送"车辆被劫,请速与110联系!!"短消息的子程序
FJJBJ:
LCALL CMGS;发送
AT+CMGS=150短信长度子程序
;发送汉字的字数(15个汉字)
MOV A,#31H
LCALL FS
MOV A,#45H
LCALL FS
;准备发送"车辆被劫,请速与110联系!!"
MOV DPTR,#TAB6
MOV R1,#60;发送15个汉字
LCALL FSS;调用发送汉字的子程序
MOV A,#1AH;发送16进制的1A结束字符
LCALL FS
LCALL FSCG;调用短信发送检测子程序
JNZ FJJBJ1
MOV DPTR,#500
LCALL DELAYXMS
AJMP FJJBJ
FJJBJ1:
RET
;发送"解防"短消息的子程序
FAJF:
LCALL CMGS;发送
AT+CMGS=150短信长度子程序
;发送汉字的字数(2个汉字)
MOV A,#30H
LCALL FS
MOV A,#34H
LCALL FS
;准备发送"解防!"
MOV DPTR,#TAB7
MOV R1,#8;发送2个汉字
LCALL FSS;调用发送汉字的子程序
MOV A,#1AH;发送16进制的1A结束字符
LCALL FS
LCALL FSCG;调用短信发送检测子程序
JNZ FAJF1
MOV DPTR,#500
LCALL DELAYXMS
AJMP FAJF
FAJF1:
RET
;发送"设防"短消息的子程序
FASF: MOV DPTR,#500
LCALL DELAYXMS
LCALL CMGS;发送
AT+CMGS=150短信长度子程序
;发送汉字的字数(2个汉字)
MOV A,#30H
LCALL FS
MOV A,#34H
LCALL FS
;准备发送"设防!"
MOV DPTR,#TAB8
MOV R1,#8;发送2个汉字
LCALL FSS;调用发送汉字的子程序
MOV A,#1AH;发送16进制的1A结束字符
LCALL FS
LCALL FSCG;调用短信发送检测子程序
JNZ FASF1
MOV DPTR,#500
LCALL DELAYXMS
AJMP FASF
FASF1:
RET
;清除接收方手机号码子程序
YUSJ:
MOV 74H,#30H
MOV 75H,#30H
MOV 76H,#30H
MOV 77H,#30H
MOV 78H,#30H
MOV 79H,#30H
MOV 7AH,#30H
MOV 7BH,#30H
MOV 7CH,#30H
MOV 7DH,#30H
MOV 7EH,#30H
MOV 7FH,#30H
;初始化"车辆报警"的内码
MOV 64H,#38H
MOV 65H,#46H
MOV 66H,#36H
MOV 67H,#36H
MOV 68H,#38H
MOV 69H,#46H
MOV 6AH,#38H
MOV 6BH,#36H
MOV 6CH,#36H
MOV 6DH,#32H
MOV 6EH,#41H
MOV 6FH,#35H
MOV 70H,#38H
MOV 71H,#42H
MOV 72H,#36H
MOV 73H,#36H
RET
;检测13906079959,PDU码--3109069759F9
;手机号码存放在74H-7F的内存中
DXJC:
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,74H,DXJC1;判断串口数据3
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,75H,DXJC1;判断串口数据1
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,76H,DXJC1;判断串口数据0
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,77H,DXJC1;判断串口数据9
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,78H,DXJC1;判断串口数据0
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,79H,DXJC1;判断串口数据6
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,7AH,DXJC1;判断串口数据9
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,7BH,DXJC1;判断串口数据7
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,7CH,DXJC1;判断串口数据5
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,7DH,DXJC1;判断串口数据9
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,7EH,DXJC1;判断串口数据F
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,7FH,DXJC1;判断串口数据9
CLR RI;软件清除串口中断标记
AJMP DXJC2
DXJC1:LCALL SB
DXJC2:
RET
NOP
NOP
;检测13906079959
DHHM:
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,75H,DHHM1;判断串口数据1
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,74H,DHHM1;判断串口数据3
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,77H,DHHM1;判断串口数据9
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,76H,DHHM1;判断串口数据0
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,79H,DHHM1;判断串口数据6
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,78H,DHHM1;判断串口数据0
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,7BH,DHHM1;判断串口数据7
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,7AH,DHHM1;判断串口数据9
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,7DH,DHHM1;判断串口数据9
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,7CH,DHHM1;判断串口数据5
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
CJNE A,7FH,DHHM1;判断串口数据9
CLR RI;软件清除串口中断标记
AJMP DHHM2
DHHM1:LCALL SB
DHHM2:
RET
;删除SIM卡中所有短信的子程序
SCQBDX:
LCALL CMGL
LCALL PDOK
JNZ DXSCT
JNB RI,$
MOV DPTR,#100
LCALL DELAYXMS
MOV R2,#1
DXSC:
LCALL DXSZ;调用将R2转化成两位ASCII数值子程序
;十位为20H,个位为21H
LCALL SCDD;调用删除短信程序,同一条短信删除1次
INC R2
CJNE R2,#26,DXSC;删除超过25条也退出循环
DXSCT:
RET
SCDD:
LCALL SCDX;调用删除第X条短信指令子程序
MOV A,20H
LCALL FS
MOV A,21H
LCALL FS
LCALL HC
MOV DPTR,#1200
LCALL DELAYXMS
RET
RET
;删除短信的子程序
SCJSDX:
MOV R2,#1
DXSC1:
LCALL DXSZ;调用将R2转化成两位ASCII数值子程序
;十位为20H,个位为21H
LCALL SCDD1;调用删除短信程序,同一条短信删除1次
INC R2
CJNE R2,#5,DXSC1;删除超过25条也退出循环
RET
;取出删除短信条数的十位/个位
DXSZ:
MOV A,R2
MOV B,#10 ;取出十位和个位
DIV AB
ORL A,#00110000B;调整为ASCII码
MOV 20H,A ;十位在a
MOV 21H,B ;个位在b
MOV A,21H
ORL A,#00110000B;调整为ASCII码
MOV 21H,A
RET
SCDD1:
LCALL SCDX;调用删除第X条短信指令子程序
MOV A,20H
LCALL FS
MOV A,21H
LCALL FS
LCALL HC
MOV DPTR,#1000
LCALL DELAYXMS
RET
;判断串口数据时候发送成功?超时退出
PDTI:;占用R4/R5/R1
MOV R1,#200;5毫秒超时退出!
PSZ:
MOV R4,#5
DT2: MOV R5,#5
DT1:JB TI,KQ
DJNZ R5,DT1
JB TI,KQ
DJNZ R4,DT2;25毫秒检测一次
DJNZ R1,PSZ;超时退出
KQ:
RET
;判断串口数据是否接收成功?超时退出
PDRI:;占用R4/R5/R1
MOV R1,#60;300毫秒超时退出!
PBZ: MOV R4,#200
DY2: MOV R5,#25
DY1:JB RI,KKQ;检测到RI变1就退出
DJNZ R5,DY1;25微秒检测一次
JB RI,KKQ;检测到RI变1就退出
SETB C;程序正常时C=1
DJNZ R4,DY2;内循环50毫秒
DJNZ R1,PBZ;超时退出
CLR C;对串口接收超时退出C=0
CLR RI;清除有串口数据标志
KKQ:RET
;判断短信是否发送成功?超时退出
PDDXRI:;占用R4/R5/R1
MOV R1,#1000;5秒超时退出!
PBZ1: MOV R4,#200
DY22: MOV R5,#25
DY33:JB RI,KKQ1;检测到RI变1就退出
DJNZ R5,DY33;延时25微秒检测一次
JB RI,KKQ1;检测到RI变1就退出
SETB C;程序正常时C=1
DJNZ R4,DY22;内循环50毫秒
DJNZ R1,PBZ1;超时退出
CLR C;对串口接收超时退出C=0
CLR RI;清除有串口数据标志
KKQ1:RET
;跳过接收数据的子程序(专门针对PDU码数据)
TGSJ:
SETB C
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
JNC XPAS;如果检测到发生超时退出,就跳出这段程序
DJNZ R3,TGSJ;判断是否已经收全部数据?
XPAS:
RET
;接收短信授权后的手机号码子程序
GPSSJ:
CLR RI;软件清除串口中断标记
LCALL PDRI;等待下一个串口数据
MOV A,SBUF;将串口寄存器中接收到的数据给A
MOV @R0,A
INC R0;内存单元地址
DJNZ R3,GPSSJ;判断是否已经收全部数据?
RET
FS:
CLR TI;先对TI进行软件复位
MOV SBUF,A
LCALL PDTI;调用检测TI变为高电平的子程序
RET
;发送汉字的子程序(DPTR存放汉字内码、R1存放汉字的字数X2)
FSS:
MOV R3,#0
CF2:CLR TI;对TI软件复位
MOV A,R3
MOV C A,@A+DPTR;查表汉字的内码
MOV SBUF,A
JNB TI,$;如果TI为0说明发送没有完成,程序等待
INC R3
MOV A,R3
DJNZ R1,CF2
RET
;这是发送内存数据的子程序
HZSZ:
CLR TI;先对TI进行软件复位
MOV A,@R0
MOV SBUF,A
LCALL PDTI;调用检测TI变为高电平的子程序
INC R0
DJNZ R3,HZSZ
RET
;鸣叫一声子程序
MJCS:
CLR FOK
MOV DPTR,#2500
LCALL DELAYXMS
SETB FOK
RET
;***************************************************
;***************************************************
;入口参数:DPTR=MS(毫秒1-65535mS)
DELAYXMS:
MOV A,DPH
MOV R7,#01
JZ DF1
MOV R7,DPH
DF1:
MOV A,DPl
MOV R6,#1
JZ DEL1
MOV R6,DPl
DEL1:
MOV B,#0
DJNZ B,$
DJNZ B,$
DJNZ R6,DEL1
DJNZ R7,DF1
RET
NOP
NOP
;恭喜您!您已经获得车辆报警系统的控制权限!密码:
TAB1:DB 36H,30H,36H,44H,35H,35H,39H,43H; 606D559C
DB 36H,30H,41H,38H,30H,30H,32H,31H; 60A80021
DB 36H,30H,41H,38H,35H,44H,46H,32H; 60A85DF2
DB 37H,45H,43H,46H,38H,33H,42H,37H; 7ECF83B7
DB 35H,46H,39H,37H,38H,46H,36H,36H; 5F978F66
DB 38H,46H,38H,36H,36H,32H,41H,35H; 8F8662A5
DB 38H,42H,36H,36H,37H,43H,46H,42H; 8B667CFB
DB 37H,45H,44H,46H,37H,36H,38H,34H; 7EDF7684
DB 36H,33H,41H,37H,35H,32H,33H,36H; 63A75236
DB 36H,37H,34H,33H,39H,36H,35H,30H; 67439650
DB 30H,30H,32H,31H,35H,42H,43H,36H; 00215BC6
DB 37H,38H,30H,31H,30H,30H,33H,41H; 7801003A
;有人动您的车,请察看!16
TAB2:DB 36H,37H,30H,39H,34H,45H,42H,41H;67094EBA
DB 35H,32H,41H,38H,36H,30H,41H,38H;52A860A8
DB 37H,36H,38H,34H,38H,46H,36H,36H;76848F66
DB 30H,30H,32H,43H,38H,42H,46H,37H;002C8BF7
DB 35H,42H,44H,46H,37H,37H,30H,42H;5BDF770B
DB 30H,30H,32H,31H;0021
;车辆电源异常,请检查!16
TAB3:DB 38H,46H,36H,36H,38H,46H,38H,36H;8F668F86
DB 37H,35H,33H,35H,36H,45H,39H,30H;75356E90
DB 35H,46H,30H,32H,35H,45H,33H,38H;5F025E38
DB 30H,30H,32H,43H,38H,42H,46H,37H;002C8BF7
DB 36H,38H,43H,30H,36H,37H,45H,35H;68C067E5
DB 30H,30H,32H,31H;0021
;车门已被打开,请检查!16
TAB4:DB 38H,46H,36H,36H,39H,35H,45H,38H;8F6695E8
DB 35H,44H,46H,32H,38H,38H,41H,42H;5DF288AB
DB 36H,32H,35H,33H,35H,46H,30H,30H;62535F00
DB 30H,30H,32H,43H,38H,42H,46H,37H;002C8BF7
DB 36H,38H,43H,30H,36H,37H,45H,35H;68C067E5
DB 30H,30H,32H,31H;0021
;行李厢异常,请检查!14
TAB5:DB 38H,38H,34H,43H,36H,37H,34H,45H;884C674E
DB 35H,33H,41H,32H,35H,46H,30H,32H;53A25F02
DB 35H,45H,33H,38H,30H,30H,32H,43H;5E38002C
DB 38H,42H,46H,37H,36H,38H,43H,30H;8BF768C0
DB 36H,37H,45H,35H,30H,30H,32H,31H;67E50021
;车辆被劫,请速与110联系!!1E
TAB6:DB 38H,46H,36H,36H,38H,46H,38H,36H;8F668F86
DB 38H,38H,41H,42H,35H,32H,41H,42H;88AB52AB
DB 30H,30H,32H,43H,38H,42H,46H,37H;002C8BF7
DB 39H,30H,31H,46H,34H,45H,30H,45H;901F4E0E
DB 30H,30H,33H,31H,30H,30H,33H,31H;00310031
DB 30H,30H,33H,30H,38H,30H,35H,34H;00308054
DB 37H,43H,46H,42H,30H,30H,32H,31H;7CFB0021
DB 30H,30H,32H,31H;0021
;解防 04
TAB7:DB 38H,39H,45H,33H,39H,36H,33H,32H;89E39632
;设防 04
TAB8:DB 38H,42H,42H,45H,39H,36H,33H,32H;8BBE9632
END