⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 家庭无线报警系统.asm

📁 家庭无线报警系统,主要功能有修改系统密码
💻 ASM
📖 第 1 页 / 共 4 页
字号:
   LCALL DelayXmS
   LCALL ATH;调用串口发送ATH挂机子程序
   AJMP RING2
 ZLYK:
   MOV DPTR,#500;延时0.5秒
   LCALL DelayXmS
   LCALL CPAS;调用模块状态报告子程序
   MOV A,25H
   CJNE A,#30H,ZLYKK1;如果没有检测到呼入,就退出
   JNB LED,ZLYK1;好果LED=0则解防反之设防
   CLR LED;设防
   AJMP RING2 */
 ZLYK1:SETB LED;解防
 RING2:
   RET
;**********************************************
;**********************************************
DXNR:;信息内容检测
   MOV DPTR,#1000
   LCALL DELAYXMS
   LCALL CMGR;调用读短信子程序
   MOV R3,#42;跳过42个数据
   LCALL TGSJ;调用跳过串口数据子程序
;检测电话号码
   MOV R0,#74H;电话号码存放地址
	MOV R2,#12;要对比的字节数
	ACALL PDDXNR;调用判断串口数据内容
   JZ DPDSQ;如果电话号码是默认值,就检测信息内容
   ;跳过20个内存(含0 4)
   MOV R3,#20;定义接收数据的总长度
   LCALL TGSJ;调用接收串口数据子程序
;**********************************************
PDCX:;判断查询信息
   MOV R2,#8;要对比的字节数2*4=8
   MOV R0,#00H;RAM内密码的起始地址00H
   MOV DPTR,#CX;查询67E58BE2
   LCALL PDDXNR;调用判断短信内容
   CJNE A,#0FFH,PDJF;如果内容不是查询则调用判断解防
   CLR RI;软件清除串口中断标记
   MOV R3,#8;跳过8个数据
   LCALL TGSJ;调用跳过串口数据子程序
   JNB LED,DFASF;如果LED=0则发"系统已设防"
   LCALL FAJF;调用发送"系统已解防"子程序
   AJMP SCC
DFASF:LCALL FASF;调用发送"系统已设防"子程序
   AJMP SCC
;**********************************************
DPDSQ:
   LCALL PDSQ;短信授权检测
;**********************************************
;检测"(解)防",PDU码--0489E39632
;30 34 38 (39 45 33) 39 36 33 32
;解防 89E39632
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转为判断是否为(设)防 8BBE9632
   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;调用(防)接收串口数据子程序 判断是否有断的PDU 9632
   JZ SC;A=0则SC(删除短信)
   SETB LED;解防
	LCALL FAJF
   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
   CLR LED;设防
	LCALL FASF
 SC:
   AJMP SCC	
;**********************************************
INTIT_MM:;密码初始化
   MOV R2,#11;要对比的字节数3*4=11
   MOV R0,#00H;RAM内密码的起始地址00H
   MOV DPTR,#CCH;密码的表首址
   LCALL PDDXNR;调用判断短信内容
   CJNE A,#0FFH,SC;如果密码不对则调用删除短信 
	LCALL MMCCH;调用密码初始化
   LCALL FDX;发送授权成功的短信息通知客户!
	LCALL XMM;写入密码
   RET
;**********************************************
PDSQ:;短信授权检测
   ;如果电话号码不是默认值,就检测信息内容
   MOV DPTR,#1000
   LCALL DelayXmS
   LCALL CMGR;再次调用读短信子程序
   MOV R3,#74;跳过74个数据
   LCALL TGSJ;调用跳过串口数据子程序
;校验"密码" "5BC67801"
   MOV R2,#8;要对比的字节数2*4=8
   MOV R0,#00H;RAM内密码的起始地址00H
   MOV DPTR,#MM;密码的表首址
   LCALL PDDXNR;调用判断短信内容
   CJNE A,#0FFH,SCC;如果密码不对则调用删除短信
;校验":" "003A"
   CLR RI;软件清除串口中断标记
   LCALL PDRI;等待下一个串口数据
   MOV A,SBUF;将串口寄存器中接收到的数据给A
   CJNE A,#"0",SCC;判断串口数据 0
   CLR RI;软件清除串口中断标记
   LCALL PDRI;等待下一个串口数据
   MOV A,SBUF;将串口寄存器中接收到的数据给A
   CJNE A,#"0",SCC;判断串口数据 0
   CLR RI;软件清除串口中断标记
   LCALL PDRI;等待下一个串口数据
   MOV A,SBUF;将串口寄存器中接收到的数据给A
   CJNE A,#"3",SCC;判断串口数据 3
   CLR RI;软件清除串口中断标记
   LCALL PDRI;等待下一个串口数据
   MOV A,SBUF;将串口寄存器中接收到的数据给A
   CJNE A,#"A",SCC;判断串口数据 A
   ;校验存放在5CH-73H的内存中密码"******"5BB65EAD62A58B667CFB7EDF
   MOV R2,#24;要对比的字节数6*4=24
   MOV R0,#5CH;RAM内密码的起始地址5CH
   LCALL PDDXNR;调用判断短信内容
   CJNE A,#0FFH,INTIT_MM;如果密码不对则调用删除短信
   CLR RI;软件清除串口中断标记
   LCALL PDRI;等待下一个串口数据
   MOV A,SBUF;将串口寄存器中接收到的数据给A
   CJNE A,#36H,FSQR;判断串口数据 6
   CLR RI;软件清除串口中断标记
   LCALL PDRI;等待下一个串口数据
   MOV A,SBUF;将串口寄存器中接收到的数据给A
   CJNE A,#35H,FSQR;判断串口数据 5
   CLR RI;软件清除串口中断标记
   LCALL PDRI;等待下一个串口数据
   MOV A,SBUF;将串口寄存器中接收到的数据给A
   CJNE A,#33H,FSQR;判断串口数据 3
   CLR RI;软件清除串口中断标记
   LCALL PDRI;等待下一个串口数据
   MOV A,SBUF;将串口寄存器中接收到的数据给A
   CJNE A,#39H,FSQR;判断串口数据 9
   ;检测到"改"的汉字内码6539
   ;密码"******"存放在5CH-73H的内存中
   ;将"改"后面的两个汉字作为密码保存到单片机5CH-73H的内存中!
   MOV R3,#24;定义接收数据的总长度为24个
   MOV R0,#5CH;数据从内存的5CH开始依次往后存放
   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;检测电话号码
   MOV R0,#74H
   MOV R2,#12
   ACALL PDDXNR
   JZ JPA
   MOV DPTR,#100
   LCALL DELAYXMS
   LCALL FDX;发送授权成功的短信息通知客户!
   JNZ JPA1
   LCALL FDX;发送授权成功的短信息通知客户!
 JPA1:LCALL BCDM;保存授权电话号码及密码
   RET
/******************************************
入口:R2 要对比的字节数
      R0 RAM数据的起始地址
		DPTR ROM内表的起始地址
		如果数据一至A = FFH;否则A = 0
******************************************/
PDDXNR:;判断短信内容
   MOV R3,#0;
 ZPD:
   CJNE R0,#00H,R_RAM;
   MOV A,R3;
   MOVC A,@A+DPTR;取要对比的对照码
   MOV B,A;把对比码存入B
   JMP SCOM
 R_RAM:
   MOV B,@R0;
   INC R0
 SCOM:
   CLR RI
   LCALL PDRI
   MOV A,SBUF;接收串口数据
   CJNE A,B,BYZ;如果不一至则A变0再反回
   INC R3
   DJNZ R2,ZPD;如果要判断的
   MOV A,#0FFH
   RET
 BYZ:CLR A
   RET
;发送AT指令!
FAT:
   MOV A,#41H;将ASCII码A发送到串口去
   LCALL FS
   MOV A,#54H;将ASCII码T发送到串口去
   LCALL FS
   RET
;发送ATH,挂机
ATH:
   LCALL FAT
   MOV A,#48H
   LCALL FS
   LCALL HC;回车!
   RET
;发送ATA,应答
ATA:
   LCALL FAT
   MOV A,#41H
   LCALL FS
   LCALL HC;回车!
   RET
;发送AT+C
ATC:
   LCALL FAT
   MOV A,#2BH;+
   LCALL FS
   MOV A,#43H;C
   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;P
   LCALL FS
   MOV A,#42H;B
   LCALL FS
   MOV A,#52H;R
   LCALL FS
   MOV A,#3DH;=
   LCALL FS
   RET
;发送AT+CNMI=1,1,0,0,1,短信到达TE 
CNMI: ;新信息指示
   LCALL ATC
   MOV A,#4EH;4E N
   LCALL FS
   MOV A,#4DH;4D M
   LCALL FS
   MOV A,#49H;49 I
   LCALL FS
   MOV A,#3DH;3D =
   LCALL FS
   MOV A,#31H;31 1
   LCALL FS
   MOV A,#2CH;2C ,
   LCALL FS
   MOV A,#31H;31 1
   LCALL FS
   MOV A,#2CH;2C ,
   LCALL FS
   MOV A,#30H;30 0
   LCALL FS
   MOV A,#2CH;2C ,
   LCALL FS
   MOV A,#30H;30 0
   LCALL FS
   MOV A,#2CH;2C ,
   LCALL FS
   MOV A,#31H;31 1
   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
;检测防的PDU 9632
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
;和手机握手,单片机发ATE0手机回答OK子程序
ATE0OK:
   MOV DPTR,#500
   LCALL DELAYXMS
   ;发送ATE0指令!
   LCALL FAT
   MOV A,#45H;将ASCII码E发送到串口去
   LCALL FS
   MOV A,#30H;将ASCII码0发送到串口去
   LCALL FS
   LCALL HC;回车!

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -