;采用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