首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 单元电路介绍 > 其它电路
西门子3508手机开发的车辆报警系统源程序
来源:本站整理  作者:佚名  2011-02-05 21:45:27



下面是我们用西门子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

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:325,968.80000 毫秒