德国西门子工业GSM模块TC35i

 

     TC35i新版西门子工业GSM模块是一个支持中文短信息的工业级GSM模块,工作在EGSM900和GSM1800双频段,电源范围为直流3.3~4.8V ,电流消耗——休眠状态为3.5mA,空闲状态为25mA,发射状态为300mA(平均),2.5A峰值;可传输语音和数据信号, 功耗在EGSM900(4类)和GSM1800(1类)分别为2W和1W ,通过接口连接器和天线连接器分别连接SIM卡读卡器和天线。SIM电压为3V/1.8V,TC35i的数据接口(CMOS电平)通过AT命令可双向传输指令和数据,可选波特率为300b/s~115kb/s , 自动波特率为1.2kb/s~115kb/s。它支持Text和PDU格式的SMS(Short Message Service,短消息),可通过AT命令或关断信号实现重启和故障恢复,中文资料如下:

    TC35i由供电模块(ASIC)、闪存、ZIF连接器、天线接口等6部分组成。作为TC35i的核心基带处理器主要处理GSM终端内的语音和数据信号,并涵盖了蜂窝射频设备中的所有模拟和数字功能。

TC35i硬件设计:

     TC35i模块有40个引脚,通过一个ZIF(Zero Insertion Force,零阻力插座)连接器引出。这40个引脚可以划分为5类,即电源、数据输入/输出、SIM卡、音频接口和控制。

    TC35i的第1~5引脚是正电源输入脚通常推荐值4.2V,第6~10引脚是电源地。11、12为充电引脚,可以外接锂电池,13为对外输出电压(共外电路使用),14为ACCU-TEMP接负温度系数的热敏电阻,用于锂电池充电保护控制。

    15脚是启动脚IGT,系统加电后为使TC35i进入工作状态,必须给IGT加一个大于100ms的低脉冲,电平下降持续时间不可超过1ms。

    16~23为数据输入/输出,分别为DSR0、RING0、RxD0、TxD0、CTS0、RTS0、DTR0 和DCD0。tc35i模块的数据输入/输出接口实际上是一个串行异步收发器,符合ITU-T RS232接口标准。它有固定的参数:8位数据位和1位停止位,无校验位,波特率在300bps~115kbps之间可选,默认9600。硬件握手信号用RTS0/CTS0,软件流量控制用XON/XOFF,CMOS电平,支持标准的AT命令集。

    其中18脚RXD、19脚TXD为TTL的串口通讯脚,需要和单片机或者PC通讯。

     TC35i使用外接式SIM卡, 24~29为SIM卡引脚,SIM卡同TC35i是这样连接的:SIM上的CCRST、CCIO、CCCL、CCVCC和CCGND通过SIM卡阅读器与TC35i的同名端直接相连,ZIF连接座的CCIN引脚用来检测SIM卡是否插好,如果连接正确,则CCIN引脚输出高电平,否则为低电平。

   TC35i的第32脚SYNC引脚有两种工作模式,一种是指示发射状态时的功率增长情况,另一种是指示TC35i的工作状态,可用AT命令AT+SYNC进行切换,本模块使用的是后一种。当LED熄灭时,表明TC35i处于关闭或睡眠状态;当LED为600 ms亮/600ms熄时,表明SIM卡没有插入或TC35i正在进行网络登录;当LED为75 ms亮/3s熄时,表明TC35i已登录进网络,处于待机状态。

    30、31、32脚为控制脚,其中30为RTC backup,31为Power down,32 为SYNC。

    35~38为语音接口,35、36接扬声器放音。37、38可以直接接驻极体话筒来采集声音(37是话筒正端,39是话筒负端)

TC35I开发技巧:

    模块的供电电压如果低于3.3V会自动关机。同时模块在在发射时,电流峰值可高达2A。同时在此电流峰值时,电源电压(送入模块的电压)下降值不能超过0.4V。所以该模块对电源的要求较高,电源的内阻+FFC联接线的电阻必需小于200mΩ。

    单片机通过两根I/O口控制TC35的开关机、复位等,通过串口与TC35进行数据通信,通信速率为9600Kbps,采用8位异步通讯方式,1位起始位,8位数据位,1位停止位。

    TC35模块输入输出的TTL正电平逻辑不是+5V,而是+2.9V,因此必要时加端口保护。

新版德国西门子工业级GSM模块TC35i套装 每套277元 每套的清单如下:

1、TC35i模块一个
2、普通SIM卡座一个

3、GSM天线转接线一根
4、GSM小天线一根
5、40芯专用排线及接插件一个

TC35i模块的详细英文PDF资料

GSM配件详细报价
价格(元)
TC35I
249
40芯扁平排线
2
排线专用接插卡座
2
TC35I专用天线转接线(SMA接口)
10
GSM小L形天线(SMA接口)
10
普通SIM卡座
4
高档抽屉式SIM卡座
18
TC35I专用固定螺丝螺母垫片3套
5

TC35I西门子工业GSM模块 249元一个

40芯0.5mm间距扁平排线3厘米长 2元一个 40PIN 间距0.5mm 翻盖式专用排线卡座 2元一个 主要用于连接TC35I与目标板的连接。

TC35I专用天线转接线 10元一根 村田头转成SMA接口,主要用于TC35I模块和GSM天线的连接。是每个西门子模块必备的产品.

GSM小天线(SMA接口) 10元一个

3米长贴片GSM天线(SMA接口) 15元一个

    这种天线增益高、频带宽、信号强度稳定、适应环境性能好、安装方便、经济耐用、天线背后自带3M不干胶,可以牢固贴在其他物品上,经各厂家使用,是内置天线的首选天线。F:820-960/1710-1990 G:3.0 SWR:1:1.5 I:50 规格:115*21*3毫米

这是普通的SIM卡座 4元一个

这是高档抽屉式SIM卡座 18元一个

LM2941CS 6.2元一片 它是开关型可调高性能微波电路专用稳压芯片,上图中最左边的第一脚是电压调整端,提供1.28V的基准电压,可以通过外围两个电阻的分压比能灵活改变输出电压,第二脚是控制端,高电平时关闭电源模块,低电平时模块正常工作,第三脚是地,第四脚是电源输入端,第五脚是电压输出端,例如TC35理想工作电压是4.2V。

TC35I试验板的空PCB(已经焊接好TC35排线座)22元一片 可以缩短开发周期,快速熟悉TC35I模块

    这是我们以前开发GPS卫星定位及GSM短信遥传系统时设计的电路板,因为功能比较齐全,正好可以作为TC35I的试验开发板。

1。采用DIP40的51单片机,例如常用的AT89S51,采用1K电阻和22UF的电容组成复位电路,如果采用SST89C54RD+可以省略上电复位电路并且具有看门狗和非易失存储器等诸多功能。
2。P1.0和P1.1端口采用下拉方式驱动两路LED指示灯,可以用于指示多种GSM状态
3。P1.5采用下拉驱动的方式通过光藕驱动一路继电器,可以控制交流负载,实现短信遥控继电器开关的功能
4。板上带有麦克风,可以直接监听环境声音
5。TC35I和单片机的电源采用高性能LM2941S芯片稳压成4.2V供电。
6。TC35I的18脚RXD通过2.2K电阻隔离和单片机的TXD第11脚连接,TC35I的19脚TXD通过2.2K电阻隔离和单片机的RXD第10脚连接
7。单片机的P1.3和TC35I的启动端第15脚连接,上电后必须给一个低电平信号TC35I才会登陆GSM网络,可以在测试时人为将P1.3对地短路一下,看是否能登陆成功GSM网络
8。单片机的P1.2和TC35I的的第32脚SYNC引脚连接,便于单片机读取TC35I的状态

9。单片机的第13脚和LM2941CS的第二脚连通,原设计是用单片机控制LM2941CS的电源开启,必要时可以对TC35I断电重启,如果客户不用请直接将LM2941CS的第二脚和第三脚短路。

这是我们焊接好的TC35I带单片机的试验板 80元一个 (不含TC35I、单片机,含固定螺丝和排线)

选配件:TC35I+天线转接线+GSM天线 269元一套

选配件:12V1A开关稳压电源 10元一个

选配件:AT89S51单片机 8元一片 STC89C52单片机 8元一片

    很多客户对TC35I不太熟悉,对如何调试无从下手,我们以TC35I试验板为例来简单说一下,首先将内正外负的12V直流电源接通试验板的插座中,测量LM2941CS的第5脚是否输出4.2V的直流电压?如果没有检查2941的第2脚是否接地?然后通过排线连接TC35I,插好手机卡并接好天线转接线和GSM天线,再通电测量TC35I的第1~5脚是否有4.2V电压?将TC35I的第16脚也就是单片机的P1.3脚对地短路一下,这时TC35I就能启动,等1分钟后,用其他电话拨打手机卡号,如果不能接通重点检查排线座和SIM卡的6根线是否有接触不良?如果能接通说明TC35I正常,如果直接用单片机调试是非常困难的,可以将TC35I的串口脱离单片机通过RS232电平转换后连接电脑的串口,先用我们开发的短信息收发专用软件(点击下载) 进行测试,如果能正常工作再串口调试助手软件进行AT命令测试,如果通不过,可以参考这个网页的资料。最后用单片机调试。

    进行串口调试时,可以先发送AT,看看TC35I模块是否能回答AT OK,如果行说明串口部分硬件正常,如果不能回复,请顺着串口的两根PCB走线检查,看看4053的两根飞线是否连接正确?TC35I排线座上的两根串口线是否接触不良?如果TC35I和单片机的供电电压相同,可以去掉220欧姆的保护电阻。

    还有AT命令比较复杂,不同生产日期的TC35I模块的AT指令可能有一些区别,请客户以实践为准耐心调试,一个复杂的系统完全指望别人是不可能成功的,请务必保持一定的心理准备。

选配件:采用PL2303的USB转串口模块 每个20元

    对于电脑没有串口的客户,我们可以提供采用PL2303的USB转串口模块,用户只要连接3根线:一根串口入R连接TC35I的TXD第19脚、一根串口出T连接TC35I的RXD第18脚、一根地线-连接TC35I模块的地即可。然后在串口调试软件中选择COM6(具体按电脑实际虚拟出的串口号)波特率选择9600即可。

点击这里可以下载到详细的TC35I英文使用说明书

点击这里可以下载到简编的中文AT指令集

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

相关产品推荐:

序号
产品名称
1
GSM商业/家庭防盗报警系统
2
超级GSM彩信可视防盗报警系统
3
多功能GSM报警模块JB35
4
多功能GSM报警模块JB35G
5
西门子工业级GSM模块TC35i
6
采用TC35I的GSM MODEM
7
wavecom的串口GSM通讯猫
8
wavecom的USB口GSM通讯猫
9
爱迪生专业短消息群发软件

全部产品价格   银行帐号及邮购需知   订货流程   立即订货! 

小灵通:0513-83082087 电话/传真:0513-83342087 联系人:谢刚

办公地址:邮编226200 江苏省启东市江海中路511号水晶苑 A1

电子信箱: 点击这里给我发消息

电子制作实验室网站 www.xie-gang.com   启东刚成电子有限公司简介 /**/