下面是我们用西门子3508手机开发的车辆报警系统源程序,西门子3508支持AT指令,和TC35I模块完全相同,所以网友可以借鉴学习。
;采用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
[1] [2] [3] [4] [5] [6] [7] 下一页
本文关键字:源程序 报警系统 西门子 手机开发 51单片机,单片机-工控设备 - 51单片机