📄 家庭无线报警系统.asm
字号:
LCALL FSCG;调用短信发送检测子程序
JNZ FHWBJ1
MOV DPTR,#500
LCALL DELAYXMS
LJMP FHWBJ
FHWBJ1:
RET
;发送"外电源异常,转为电池供电!"短消息的子程序
FDYBJ:
MOV R7,#34H;短信长度26+15=41
MOV R6,#31H
MOV R5,#00H
LCALL CMGS;发送AT+CMGS=41短信长度子程序
;发送汉字的字数(13个汉字)26---1AH
MOV A,#31H
LCALL FS
MOV A,#41H
LCALL FS
;准备发送"外电源异常,转为电池供电!"
MOV DPTR,#TAB4
MOV R1,#52;发送13个汉字13*4=52
LCALL FSS;调用发送汉字的子程序
MOV A,#1AH;发送16进制的1A结束字符
LCALL FS
LCALL FSCG;调用短信发送检测子程序
JNZ FDYBJ1
MOV DPTR,#500
LCALL DELAYXMS
AJMP FDYBJ
FDYBJ1:
RET
/*;发送"车辆被劫,请速与110联系!!"短消息的子程序
FJJBJ:
MOV R7,#34H;短信长度30+15=45
MOV R6,#35H
MOV R5,#00H
LCALL CMGS;发送AT+CMGS=45短信长度子程序
;发送汉字的字数(15个汉字)30---1EH
MOV A,#31H
LCALL FS
MOV A,#45H
LCALL FS
;准备发送"车辆被劫,请速与110联系!!"
MOV DPTR,#TAB5
MOV R1,#60;发送15个汉字15*4=60
LCALL FSS;调用发送汉字的子程序
MOV A,#1AH;发送16进制的1A结束字符
LCALL FS
LCALL FSCG;调用短信发送检测子程序
JNZ FJJBJ1
MOV DPTR,#500
LCALL DELAYXMS
AJMP FJJBJ
FJJBJ1:
RET*/
;发送"系统已设防"短消息的子程序
FASF:
MOV R7,#32H;短信长度10+15=25
MOV R6,#35H
MOV R5,#00H
LCALL CMGS;发送AT+CMGS=25短信长度子程序
;发送汉字的字数(5个汉字)10--0AH
MOV A,#30H
LCALL FS
MOV A,#41H
LCALL FS
;准备发送"系统已设防!"
MOV DPTR,#TAB6
MOV R1,#20;发送5个汉字5*4=20
LCALL FSS;调用发送汉字的子程序
MOV A,#1AH;发送16进制的1A结束字符
LCALL FS
LCALL FSCG;调用短信发送检测子程序
JNZ FASF1
MOV DPTR,#500
LCALL DELAYXMS
AJMP FASF
FASF1:
RET
;发送"系统已解防"短消息的子程序
FAJF:
MOV R7,#32H;短信长度10+15=25
MOV R6,#35H
MOV R5,#00H
LCALL CMGS;发送AT+CMGS=19短信长度子程序
;发送汉字的字数(2个汉字)10--0AH
MOV A,#30H
LCALL FS
MOV A,#41H
LCALL FS
;准备发送"系统已解防!"
MOV DPTR,#TAB7
MOV R1,#20;发送5个汉字5*4=20
LCALL FSS;调用发送汉字的子程序
MOV A,#1AH;发送16进制的1A结束字符
LCALL FS
LCALL FSCG;调用短信发送检测子程序
JNZ FAJF1
MOV DPTR,#500
LCALL DELAYXMS
AJMP FAJF
FAJF1:
RET
;清除接收方手机号码子程序3115706045F5
YUSJ:
MOV 74H,#"3"
MOV 75H,#"1"
MOV 76H,#"1"
MOV 77H,#"5"
MOV 78H,#"7"
MOV 79H,#"0"
MOV 7AH,#"6"
MOV 7BH,#"0"
MOV 7CH,#"4"
MOV 7DH,#"5"
MOV 7EH,#"F"
MOV 7FH,#"5"
;初始化"家庭报警系统"的内码"5BB65EAD62A58B667CFB7EDF"
MMCCH:
MOV DPTR,#TAB10
MOV R1,#24
MOV R0,#5CH
MOV R3,#00H
ZSR:
MOV A,R3
MOVC A,@A+DPTR
MOV @R0,A
INC R0
INC R3
DJNZ R1,ZSR
RET
;检测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;CLR A
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
;删除短信的子程序
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,#255;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
CJNE A,#22H,SSJ;检测到 " 来电号码的最后就退出
MOV @R0,#" "
RET
SSJ:
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:
SETB FOK
MOV DPTR,#2500
LCALL DELAYXMS
CLR 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
;恭喜您!您已经获得家庭报警系统的控制权限!密码: 38
TAB1:
DB "606D559C60A8002160A85DF27ECF83B75F975BB65EAD62A58B667CFB7EDF768463A752366743965000215BC67801003A"
;大门已被打开,请检查!16H
TAB2:
DB "592795E85DF288AB62535F00002C8BF768C067E50021"
;家里有人走动,请注意!16H
TAB3:
DB "5BB691CC67094EBA8D7052A8FF0C8BF76CE8610F0021"
;外电源异常,转由电池供电!1AH
TAB4:
DB "591675356E905F025E38002C8F6C753175356C604F9B75350021"
;车辆被劫,请速与110联系!!1EH
TAB5:
DB "8F668F8688AB52AB002C8BF7901F4E0E00310031003080547CFB00210021"
;系统已设防 0AH
TAB6:
DB "7CFB7EDF5DF28BBE9632"
;系统已解防 0AH
TAB7:
DB "7CFB7EDF5DF289E39632"
;LCD 第一行显示信息
TAB8:
DB "GSM BAO JING "
;LCD 第二行显示信息
TAB9:
DB "VER:1.0 "
;密码内容
TAB10:
; DB "5BB65EAD62A58B667CFB7EDF"
DB "003600360036003600360036"
;固定短信息头
TAB11:
DB "0011000D9168"
;密码
MM:
DB "5BC67801"
;查询
CX:
DB "67E58BE2"
;初始化
CCH:
DB "21D59CB5316"
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -