基于GSM的库房安全报警系统设计-总程序_第1页
基于GSM的库房安全报警系统设计-总程序_第2页
基于GSM的库房安全报警系统设计-总程序_第3页
基于GSM的库房安全报警系统设计-总程序_第4页
基于GSM的库房安全报警系统设计-总程序_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

;采用 AT89C2051 单片机,晶振 11.0592MHZ,通讯速率 19200,采用 TTL 串口通讯;手机号码缓存在 28H-33H 的内存中;短信内容缓存在 48H-57H 的内存中;发送的字数在 44H-46H 内存中;车载人员检测:实载:40H41H 中,定员:42H ,43H。;短信中心的号码存放在 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;AAAAAAAAAAAAAAAAAAAAAAAAAORG 0000HAJMP MAIN;转入主程序ORG 0003H ;外部中断 P3.2 脚 INT0 入口地址LJMP EXTJIAORG 000BH;中断陷阱LJMP T0INTORG 0013H;中断陷阱LJMP EXTJDAORG 001BH;中断陷阱NOPNOPNOPNOPNOPNOPRETIORG 0023HNOPNOPNOPNOPRETIBJOUT0 EQU P2.3BJOUT1 EQU P2.2BJOUT2 EQU P2.1BJOUT3 EQU P2.0FOK EQU P2.3;定义为串口接收模块数据 OKKGJ EQU P0.1;定义手机开关机控制端SX EQU P2.7;定义手机模块上线状态JSF EQU P2.6;定义解防/设防控制端(解防 0 设防 1)TC EQU P1.4;定义JCHB EQU P2.5JCHA EQU P2.4ZK EQU P1.5;定义中控控制端;EQU P1.6;定义KK EQU P1.7;定义BJ EQU P3.7;定义报警触发控制端;DY EQU P3.3;定义电源断线控制端CM EQU P3.4;定义车门控制端XL EQU P3.5;定义行李厢JJ EQU P3.6;定义紧急CHY EQU P3.7;定义超员;DD EQU P3.7;定义低电压报告EEEE EQU 3EHDLYSJ EQU 3FHDINGYS EQU 42HDINGYG EQU 43HSHIZAIS EQU 40HSHIZAIG EQU 41HMAIN:;以下为主程序进行 CPU 中断方式设置SETB IT0 ;设定 INT0 的触发方式为脉冲负边沿触发MOV SCON,#50H;设置成串口 1 方式MOV TMOD,#21H;波特率发生器 T1 工作在模式 2 上MOV TH1,#0FDH;预置初值 (按照波特率 9600BPS 预置初值)MOV TL1,#0FDH;预置初值(按照波特率 9600BPS 预置初值)MOV TH0,#3CHMOV TL0,#0B0H MOV DLYSJ,#60SETB EASETB ET0SETB EX1SETB EX0SETB IT0SETB IT1SETB TR1;启动定时器 T1MOV 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),短信到达 TELCALL SCQBDX;调用删除 SIM 卡中所有短信的子程序;完成和手机通信握手,和 SIM 卡删除所有短消息初始化START:LCALL XRDXZX;调用询问手机 SIM 卡中短信中心号码子程序LCALL XRSJ;读出授权电话号码及密码,写入内存中MOV 7FH, #46HLCALL MJCSLCALL MJCSSETB TR0CLR SX;模块上线MOV 40H,#35HMOV 41H,#30HMOV 42H,#35HMOV 43H,#30H;*KKS:JNB JSF, KSK0JNB BJ,BAOJINJNB CM,CMBJJNB XL,XLBJ JNB JJ,JJBJ;JNB DY,DYBJ;JNB CHY,CYBJKSK0: JB RI,UARTI;检测到 RI 变 1 就退出JNB JSF,QXBJAJMP KKSQXBJ: SETB BJOUT1SETB BJOUT2SETB BJOUT3SETB BJOUT0AJMP KKS;*DYBJ:LCALL FDYBJJNB JSF, DCXB0CLR FOKDCXB0: AJMP KKSCMBJ:LCALL FCMBJJNB JSF, DCXB01CLR BJOUT2CLR BJOUT3CLR BJOUT1DCXB01: AJMP KKSXLBJ:LCALL FXLBJJNB JSF, DCXB02CLR BJOUT1DCXB02: AJMP KKSJJBJ:LCALL FJJBJJNB JSF, DCXB03CLR BJOUT2CLR BJOUT1CLR BJOUT3DCXB03: AJMP KKSCYBJ: LCALL FDXCYJNB JSF, DCXB04CLR BJOUT0DCXB04: AJMP KKSUARTI:AJMP UARTI0;报警程序BAOJIN:LCALL CPAS;调用模块状态报告子程序MOV A,25HCJNE A,#34H,BAOJIN1;判断串口数据AJMP BAOJIN3;如果模块正在呼出或通话,就退出BAOJIN1:LCALL CPASMOV A,25HCJNE A,#34H,BAOJIN2AJMP BAOJIN3BAOJIN2:LCALL ATH;调用串口发送 ATH 挂机子程序LCALL PDOK;判断手机是否回答 OK?JZ BAOJIN2;如果没有检测到 OK,重复发LCALL FBJDXMOV DPTR,#5000;延时 5 秒LCALL DelayXmSLCALL ATD;调用串口发送子程序BAOJIN3:JNB JSF, DCXB05CLR BJOUT0CLR BJOUT1DCXB05: AJMP KKS;*;*;进入串口中断方式接收UARTI0:CLR RI;清楚串口中断标志LCALL PDDA;调用串口接收 0D/0A 数据子程序LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#2BH,PDRD;判断串口数据+PDRCLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#43H,EXITT1;判断串口数据 CCLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据;+CMTI: SM,7 短信到达存放位置MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#4DH,EXITT1;判断串口数据 MCLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#54H,EXITT1;判断串口数据 TCLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#49H,EXITT1;判断串口数据 ICLR RI;软件清除串口中断标记;检测到CMTI的 ASCII 码-;跳过 7 个内存(: SM,)MOV R3,#7;定义接收数据的总长度LCALL TGSJ;调用接收串口数据子程序;短信位置,存放在 26H 中MOV R0,#26H;数据在内存的存放位置CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 AMOV R0,AINC R0;内存单元地址 0;跳过 8 个内存MOV R3,#8;定义接收数据的总长度LCALL TGSJ;调用接收串口数据子程序LCALL DXNR;解析短信内容EXITT1: LJMP EXITTPDRD: LCALL RING;电话呼入提示EXITT:CLR RI;软件清除串口中断标记,退出串口中断AJMP KKS;*RING:;电话呼入提示CLR RI;清楚串口中断标志MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#52H,RING1;判断串口数据 RCLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#49H,RING1;判断串口数据 ICLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#4EH,RING1;判断串口数据 NCLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#47H,RING1;判断串口数据 GCLR RI;软件清除串口中断标记LCALL PDDA;调用串口接收 0D/0A 数据子程序MOV DPTR,#100;延时 0.1 秒LCALL DelayXmS;发送 AT+CLCCLCALL CLCC;调用来电显示指令子程序;跳过 20 个内存(: 1,1,4,0,0, )MOV R3,#20;定义接收数据的总长度LCALL TGSJ;调用接收串口数据子程序LCALL DHHM;判断来电号码JZ GJ22CLR JCHA;跳过 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,#30ZLYKK1:MOV DPTR,#500;延时 0.5 秒LCALL DelayXmSLCALL CPAS;调用模块状态报告子程序MOV A,25HCJNE A,#30H,ZL1AJMP ZLYK;如果没有检测到呼入,就进入振铃遥控GJ22: CLR JCHBAJMP GJZL1:DJNZ R2,ZLYKK1MOV R2,#15ZLYKK2:MOV DPTR,#500;延时 0.5 秒LCALL DelayXmS LCALL CPAS;调用模块状态报告子程序MOV A,25HCJNE A,#30H,ZL2AJMP RING2;如果没有检测到呼入 ,就退出ZL2:DJNZ R2,ZLYKK2;*LCALL ATA;应答RING1: AJMP RING2GJ:MOV DPTR,#500;延时 1 秒LCALL DelayXmSLCALL ATH;调用串口发送 ATH 挂机子程序AJMP RING2ZLYK:MOV DPTR,#500;延时 0.5 秒LCALL DelayXmSLCALL CPAS;调用模块状态报告子程序MOV A,25HCJNE A,#30H,ZLYKK1;如果没有检测到呼入,就退出JB JSF,ZLYK1SETB JSF;设防CLR BJOUT1MOV DPTR,#500LCALL DELAYXMSSETB BJOUT1MOV DPTR,#1000LCALL DELAYXMSCLR BJOUT1MOV DPTR,#500LCALL DELAYXMSSETB BJOUT1LCALL FASFCG;调用发送设防成功 子程序AJMP RING2ZLYK1: CLR JSF;解防 CLR BJOUT1MOV DPTR,#500LCALL DELAYXMSSETB BJOUT1LCALL FAJFCG;调用发送 解防成功子程序RING2: SETB JCHASETB JCHBRET;*;*DXNR: ;信息内容检测MOV DPTR,#2000LCALL DELAYXMSLCALL CMGR;调用读短信子程序MOV R3,#42;跳过 40 个数据LCALL TGSJ;调用跳过串口数据子程序LCALL DXJCD;检测电话号码JZ DPDSQ;如果电话号码是默认值,就检测信息内容CLR JCHA;跳过 20 个内存(含 0 4)MOV R3,#20;定义接收数据的总长度LCALL TGSJ;调用接收串口数据子程序;*PDCX: ;查询信息CLR JCHACLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#36H,PDJF;判断串口数据 6CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#37H,PDJF;判断串口数据 7CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#45H,PDJF;判断串口数据 ECLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#35H,PDJF;判断串口数据 5CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#38H,PDJF;判断串口数据 8CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#42H,PDJF;判断串口数据 BCLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#45H,PDJF;判断串口数据 ECLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#32H,PDJF;判断串口数据 2CLR RI;软件清除串口中断标记MOV R3,#8;跳过 8 个数据LCALL TGSJ;调用跳过串口数据子程序JB JSF,DFASFLCALL FAJF;调用发送解防子程序AJMP SCCDFASF: LCALL FASF;调用发送设防 子程序AJMP SCC;*DPDSQ: LCALL PDSQ;*;检测(解) 防,PDU 码-0489E39632;30 34 38 (39 45 33) 39 36 33 32PDJF:MOV DPTR,#2000;延时 1 秒LCALL DelayXmSSETB JCHALCALL CMGR;再次调用读短信子程序MOV R3,#74;跳过 72 个数据LCALL TGSJ;调用跳过串口数据子程序CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#38H,PDSQ;判断串口数据 8CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#39H,SHEFAN;判断串口数据 9CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#45H,PDSQ;判断串口数据 ECLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#33H,PDSQ;判断串口数据 3CLR RI;软件清除串口中断标记LCALL FANG;调用(防)接收串口数据子程序JZ SCCLR JSF;解防CLR BJOUT1MOV DPTR,#500LCALL DELAYXMSSETB BJOUT1LCALL FAJFCG;调用发送 解防成功子程序AJMP SCC;*;检测(设) 防,PDU 码-048BBE9632;30 34 38 (42 42 45) 39 36 33 32SHEFAN: ;(设)MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#42H,PDSQ;判断串口数据 BCLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#42H,PDSQ;判断串口数据 BCLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#45H,PDSQ;判断串口数据 ECLR RI;软件清除串口中断标记LCALL FANG;调用(防)接收串口数据子程序JZ SCSETB JSF;设防CLR BJOUT1MOV DPTR,#500LCALL DELAYXMSSETB BJOUT1MOV DPTR,#1000LCALL DELAYXMSCLR BJOUT1MOV DPTR,#500LCALL DELAYXMSSETB BJOUT1LCALL FASFCG;调用发送设防成功 子程序SC: AJMP SCC;*;*PDSQ: ;短信授权检测;如果电话号码不是默认值 ,就检测信息内容CLR JCHBMOV DPTR,#3000LCALL DelayXmSSETB JCHBLCALL CMGR;再次调用读短信子程序MOV R3,#74;跳过 72 个数据LCALL TGSJ;调用跳过串口数据子程序;校验存放在 64H-73H 的内存中密码 车辆报警CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,64H,SC;判断串口数据 8CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,65H,SC;判断串口数据 FCLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,66H,SC;判断串口数据 6CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,67H,SC;判断串口数据 6CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,68H,SC;判断串口数据 8CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,69H,SC;判断串口数据 FCLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,6AH,SC;判断串口数据 8CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,6BH,SC;判断串口数据 6CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,6CH,SCC;判断串口数据 6CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,6DH,SCC;判断串口数据 2CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,6EH,SCC;判断串口数据 ACLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,6FH,SCC;判断串口数据 5CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,70H,SCC;判断串口数据 8CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,71H,SCC;判断串口数据 BCLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,72H,SCC;判断串口数据 6CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,73H,SCC;判断串口数据 6;车辆报警检测成功!判断是否要修改密码?CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#36H,FSQR;判断串口数据CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#35H,FSQR;判断串口数据CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#33H,FSQR;判断串口数据CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE 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 JPASCC: ;删除短信LCALL SCJSDXSETB JCHASETB JCHBRETJPA:MOV DPTR,#2000LCALL DELAYXMSLCALL CMGR;再次调用读短信子程序MOV R3,#42;跳过 40 个数据LCALL TGSJ;调用跳过串口数据子程序JNC JPA;把短信授权的手机号码存储起来;手机号码存放在 74H-7F 的内存中;MOV R3,#12;定义接收手机号码的数据长度;MOV R0,#74H;数据在内存的存放位置;LCALL GPSSJ;调用接收串口数据子程序;准备接收短信号码MOV R3,#6;循环接收 5 次MOV R0,#74H;数据从 74H-7FH 内存开始存放JPTFSJ:INC R0;内存单元地址CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 AMOV R0,ADEC R0CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 AMOV R0,AINC R0;内存单元地址INC R0;内存单元地址DJNZ R3,JPTFSJ;判断是否已经接收完 10 个短信中心号码 ?;MOV A,#46H;字母 F 的固定代码;MOV R0,A;INC R0;内存单元地址;CLR RI;软件清除串口中断标记;LCALL PDRI;等待下一个串口数据;MOV A,SBUF;将串口寄存器中接收到的数据给 A;MOV R0,A;INC R0;内存单元地址;短信中心的号码已经存放在 74H-7FH 的内存中MOV DPTR,#1000LCALL DELAYXMS;校验短信授权的手机号码LCALL CMGR;再次调用读短信子程序MOV R3,#42;跳过 40 个数据LCALL TGSJ;调用跳过串口数据子程序LCALL DXJCDJZ JPALCALL FDX;发送授权成功的短信息通知客户!JNZ JPA1LCALL FDX;发送授权成功的短信息通知客户!JPA1: LCALL BCDM;保存授权电话号码及密码RET;发送 AT 指令!AT_0:MOV A,#41H;将 ASCII 码 A 发送到串口去LCALL FSMOV A,#54H;将 ASCII 码 T 发送到串口去LCALL FSRET;发送 ATH,挂机ATH:LCALL AT_0MOV A,#48HLCALL FSLCALL HC;回车!RET;发送 ATA,应答ATA:LCALL AT_0MOV A,#41HLCALL FSLCALL HC;回车!RET;发送 AT+C,应答ATC:LCALL AT_0MOV A,#2BHLCALL FSMOV A,#43HLCALL FSRET;发送 HC 回车指令!HC:MOV A,#0DHLCALL FSMOV A,#0AHLCALL FSRET;发送 AT+CMGD=删除第 X 条短消息指令!SCDX:LCALL ATCMOV A,#4DHLCALL FSMOV A,#47HLCALL FSMOV A,#44HLCALL FSMOV A,#3DHLCALL FSRET;发送 AT+CPBW=CPBW:LCALL ATCMOV A,#50HLCALL FSMOV A,#42HLCALL FSMOV A,#57HLCALL FSMOV A,#3DHLCALL FSRET;发送 AT+CPBR=CPBR:LCALL ATCMOV A,#50HLCALL FSMOV A,#42HLCALL FSMOV A,#52HLCALL FSMOV A,#3DHLCALL FSRET;发送 AT+CNMI=1,1,0,0,1,短信到达 TECNMI:LCALL ATCMOV A,#4EH;4ELCALL FSMOV A,#4DH;4DLCALL FSMOV A,#49H;49LCALL FSMOV A,#3DH;3DLCALL FSMOV A,#31H;31LCALL FSMOV A,#2CH;2CLCALL FSMOV A,#31H;31LCALL FSMOV A,#2CH;2CLCALL FSMOV A,#30H;30LCALL FSMOV A,#2CH;2CLCALL FSMOV A,#30H;30LCALL FSMOV A,#2CH;2CLCALL FSMOV A,#31H;31LCALL FSLCALL HC;回车!LCALL PDOK;判断手机是否回答 OK?JZ CNMI;如果没有检测到 OK,重复发RET;发送 AT+CMGR=26H,读短信;00 43 00 4D 00 47 00 52 00 3DCMGR:LCALL ATCMOV A,#4DHLCALL FSMOV A,#47HLCALL FSMOV A,#52HLCALL FSMOV A,#3DHLCALL FSMOV A,26HLCALL FSLCALL HC;回车!RET;发送 AT+CMGL=4 列出所有短消息指令!CMGL:LCALL ATCMOV A,#4DHLCALL FSMOV A,#47HLCALL FSMOV A,#4CHLCALL FSMOV A,#3DHLCALL FSMOV A,#34HLCALL FSLCALL HC;回车!RETFANG:CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#39H,FANG1;判断串口数据 9CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#36H,FANG1;判断串口数据 6CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#33H,FANG1;判断串口数据 3CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#32H,FANG1;判断串口数据 2CLR RI;软件清除串口中断标记;跳过 8 个内存(0D 0A 0D 0A 4F 4B 0D 0A)MOV R3,#8;定义接收数据的总长度LCALL TGSJ;调用接收串口数据子程序AJMP FANG2FANG1: LCALL SBFANG2:RET;和手机握手,单片机发 ATE 手机回答 OK 子程序ATEOK:MOV DPTR,#500LCALL DELAYXMS;发送 ATE 指令 !LCALL AT_0MOV A,#45H;将 ASCII 码 E 发送到串口去LCALL FSLCALL HC;回车!LCALL PDOK;判断手机是否回答 OK?JZ ATEOK;如果没有检测到 OK,重复发RET;发送 AT+CSCA?查询短信中心号码子程序CSCA:MOV DPTR,#500LCALL DELAYXMSLCALL ATCMOV A,#53HLCALL FSMOV A,#43HLCALL FSMOV A,#41HLCALL FSMOV A,#3FHLCALL FSLCALL HC;回车!RET;检测手机是否回答短信中心号码?XRDXZX:LCALL CSCAMOV 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;将串口寄存器中接收到的数据给 AMOV R0,ADEC R0CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 AMOV R0,AINC R0;内存单元地址INC R0;内存单元地址DJNZ R3,TFSJ;判断是否已经接收完 10 个短信中心号码?MOV A,#46H;字母 F 的固定代码MOV R0,AINC R0;内存单元地址CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 AMOV R0,AINC R0;内存单元地址;短信中心的号码已经存放在 58H-63H 的内存中MOV R3,#13;跳过 13 个数据LCALL TGSJ;调用跳过串口数据子程序LCALL CSCA;调用询问手机 SIM 卡中短信中心号码子程序MOV R3,#13;跳过 13 个数据LCALL TGSJ;调用跳过串口数据子程序LCALL JYZXHM;调用校验短信中心号码子程序JZ XRDXZXAJMP XRDXZX2XRDXZX1:LCALL XRDXZXXRDXZX2:RET;检测PDU 码-3108507905F0;短信中心的号码存放在 58H-63H 的内存中JYZXHM:CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,59H,JYZXHM1;判断串口数据 1CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,58H,JYZXHM1;判断串口数据 3CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,5BH,JYZXHM1;判断串口数据 8CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,5AH,JYZXHM1;判断串口数据 0CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,5DH,JYZXHM1;判断串口数据 0CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,5CH,JYZXHM1;判断串口数据 5CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,5FH,JYZXHM1;判断串口数据 9CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,5EH,JYZXHM1;判断串口数据 7CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,61H,JYZXHM1;判断串口数据 5CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,60H,JYZXHM1;判断串口数据 0CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,63H,JYZXHM1;判断串口数据 0CLR RI;软件清除串口中断标记MOV R3,#13;跳过 13 个数据LCALL TGSJ;调用跳过串口数据子程序AJMP JYZXHM2JYZXHM1:LCALL SBJYZXHM2:RET;读出授权电话号码及密码,写入内存中XRSJ:MOV DPTR,#2000LCALL DELAYXMSLCALL CPBR;读出授权电话 AT+CPBR=1MOV A,#31HLCALL FSLCALL HCLCALL DCSJJNC XRSJ1;手机号码存放在 74H-7F 的内存中MOV R3,#12;定义接收手机号码的数据长度MOV R0,#74H;数据在内存的存放位置LCALL GPSSJ;调用接收串口数据子程序MOV R3,#16;跳过 16 个数据LCALL TGSJ;调用跳过串口数据子程序;读出密码 AT+CPBR=2LCALL CPBRMOV A,#32HLCALL FSLCALL HCLCALL DCSJJNC XRSJ1;密码车辆报警 存放在 64H-73H 的内存中MOV R3,#16;定义接收手机号码的数据长度MOV R0,#64H;数据在内存的存放位置LCALL GPSSJ;调用接收串口数据子程序MOV R3,#16;跳过 16 个数据LCALL TGSJ;调用跳过串口数据子程序RETDCSJ:;+CPBR: 1129,MOV R3,#12;跳过 12 个数据LCALL TGSJ;调用跳过串口数据子程序XRSJ1:RET;写入授权电话号码及密码BCDM:;AT+CPBW=1DH: ;写入授权电话号码LCALL CPBWMOV A,#31HLCALL FSMOV A,#2CHLCALL FSMOV A,#22HLCALL FS;LCALL JSFSJ;调用写入授权电话号码OV A,74HLCALL FSMOV A,75HLCALL FSMOV A,76HLCALL FSMOV A,77HLCALL FSMOV A,78HLCALL FSMOV A,79HLCALL FSMOV A,7AHLCALL FSMOV A,7BHLCALL FSMOV A,7CHLCALL FSMOV A,7DHLCALL FSMOV A,7EHLCALL FSMOV A,#22HLCALL FSLCALL HCLCALL PDOKJZ DDH;写入密码;AT+CPBW=2,8F 66 8F 86 62 A5 8B 66XMM:LCALL CPBWMOV A,#32HLCALL FSMOV A,#2CHLCALL FSMOV A,#22HLCALL FS;写入车辆报警4 个汉字 从内存 64H-73H 一共 16 个内存MOV R3,#16;定义发送的数据总长度为 16 个MOV R0,#64H;数据从内存的 64H 开始LCALL HZSZ;调用发送内存数据的子程序MOV A,#22HLCALL FSLCALL HCLCALL PDOKJZ XMMRETJCDYH:CLR RI;清除有串口数据标志LCALL PDRI;2 秒内检测串口是否有数据返回?MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#0DH,WD;判断串口数据CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#0AH,WD;判断串口数据CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#3EH,WD;判断串口数据CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#20H,WD;判断串口数据CLR RI;软件清除串口中断标记;判断手机是不是回答代码 ? 0D 0A 3E 20MOV A,#0FFH;检测到,对 A 置 1RETWD:CLR A;没有检测到 ,对 A 清零CLR RI;清除有串口数据标志RET;检测手机是否回答 OK?PDOK:LCALL PDDALCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#4FH,SB;判断串口数据CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#4BH,SB;判断串口数据LCALL PDDA;判断是不是手机回答的 OK 代码? 0D 0A 4F 4B 0D 0AMOV A,#0FFH;检测到 OK,对 A 置 1RET;检测手机是否回答 0D/0A?PDDA:CLR RI;清除有串口数据标志LCALL PDRI;2 秒内检测串口是否有数据返回?MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#0DH,SB;判断串口数据CLR RI;软件清除串口中断标记LCALL PDRI;等待下一个串口数据MOV A,SBUF;将串口寄存器中接收到的数据给 ACJNE A,#0AH,SB;判断串口数据CLR RI;软件清除串口中断标记RETSB: CLR A;没有检测到 OK,对 A 清零CLR RI;清除有串口数据标志RET;发送 AT+CLCC,来电显示;00 43 00 4C 00 43 00 43CLCC:LCALL ATCMOV A,#4CHLCALL FSMOV A,#43HLCALL FSMOV A,#43HLCALL FSLCALL HC;回车!RET;发送 AT+CPAS 查询手机状态子程序CPAS:LCALL ATCMOV A,#50HLCALL FSMOV A,#41HLCALL FSMOV A,#53HLCALL FSLCALL HC;回车!;手机状态

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论