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

📄 89c2051.txt

📁 TC35I 和 89S51发送短信监控.
💻 TXT
📖 第 1 页 / 共 4 页
字号:
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

⌨️ 快捷键说明

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