📄 itm100.c
字号:
warnackbit=1; //中心成功回应报警标志位
stachgbit=1;
}
}
/*=========================================================*/
/*功能说明:GPRS的GPRS通讯网络注册成功 */
/*函数名: GPRS_RunInnet() */
/*子程序编号: */
/*撰写人: 撰写时间: */
/*=========================================================*/
void GPRS_RunInnet()
{
if(!GprsModbit) //更新图标
{
GprsMessbit=0;
GprsModbit=1;
}
if(CurrentTxMode!=0xbb)
{
workmodebit=1; //进行了模式的切换标志位
CurrentTxMode=0xbb;
}
}
//**********************************************************
//GPRS短信通讯功能模块区:
//**********************************************************
/*=========================================================*/
/*功能说明:GPRS短信发送模块:采用PUD短信格式 */
/*函数名: _GPRSSendMess() */
/*子程序编号: */
/*撰写人: 梁 辉 撰写时间:2003-8-11 */
/*=========================================================*/
code unsigned char *GPRSMessHead1="AT+CMGS=";
xdata unsigned char GPRSCenterID[11]="00000000000";//中心电话号码
xdata unsigned char GPRSLocalSIM[11]="00000000000";//本机号
xdata unsigned char NCtlCenterID[11]="00000000000";//临时中心控制号码
xdata unsigned char RevGSMMark=0xff; //接收到短信指令的标示位
void GPRSTxSMSHead()
{
unsigned char headii;
for(headii=0;headii<8;headii++)
Uart1TxBUFF[headii]=GPRSMessHead1[headii];//AT+CMGS="13012345678"+0D
Uart1TxBUFF[8]='"';
for(headii=0;headii<11;headii++)
{
if(RevGSMMark==0xaa)
Uart1TxBUFF[9+headii]=NCtlCenterID[headii];//取得临时中心控制号码
else
Uart1TxBUFF[9+headii]=GPRSCenterID[headii];//取得控制总中心的号码
}
Uart1TxBUFF[20]='"';
Uart1TxBUFF[21]=0x0d;
for(headii=0;headii<22;headii++)
U1Txbyte(Uart1TxBUFF[headii]);
}
//发送数据包;
//-------------------------------------------------------------------------------
void _GPRSSendMess(unsigned char GPRSCOM,unsigned char datatype)
{
unsigned char GPRSSendii;
// delaynop(500);
GPRSTxSMSHead(); //AT+CMGS="中心手机号码[11]";
delaynop(1000); //延时一定时间
_GPRSPakMessData(); //更新数据帧;
if(datatype==1)
{
for(GPRSSendii=0;GPRSSendii<27;GPRSSendii++)
{
Uart1TxBUFF[4+2*GPRSSendii] =Cut_Word(GPRSPakBag[GPRSSendii],0);
Uart1TxBUFF[4+2*GPRSSendii+1] =Cut_Word(GPRSPakBag[GPRSSendii],1);
}
Uart1TxBUFF[0]='9';
Uart1TxBUFF[1]='0';
Uart1TxBUFF[2]=Cut_Word(GPRSCOM,0);
Uart1TxBUFF[3]=Cut_Word(GPRSCOM,1);
for(GPRSSendii=0;GPRSSendii<58;GPRSSendii++)
U1Txbyte(Uart1TxBUFF[GPRSSendii]);
U1Txbyte(0x1a);
delaynop(300);
}
else if(datatype==2)
{
for(GPRSSendii=0;GPRSSendii<27;GPRSSendii++)
{
Uart1TxBUFF[4+2*GPRSSendii] =Cut_Word(GPRSPakBag[GPRSSendii],0);
Uart1TxBUFF[4+2*GPRSSendii+1] =Cut_Word(GPRSPakBag[GPRSSendii],1);
}
for(GPRSSendii=0;GPRSSendii<12;GPRSSendii++)
{
Uart1TxBUFF[4+54+2*GPRSSendii] =Cut_Word(GPRSPakBag[GPRSSendii],0);
Uart1TxBUFF[4+54+2*GPRSSendii+1]=Cut_Word(GPRSPakBag[GPRSSendii],1);
}
// Uart1TxBUFF[4+27*2+2*12]=0x0d;
Uart1TxBUFF[4+27*2+2*12]=0x1a; //2003-10-13:Ctl-Z
Uart1TxBUFF[0]='9';
Uart1TxBUFF[1]='0';
Uart1TxBUFF[2]=Cut_Word(GPRSCOM,0);
Uart1TxBUFF[3]=Cut_Word(GPRSCOM,1);
for(GPRSSendii=0;GPRSSendii<83;GPRSSendii++)
U1Txbyte(Uart1TxBUFF[GPRSSendii]);
//--------------------------------------------------------------------
}
delaynop(500);
}
/*=========================================================*/
/*功能说明:发送读取短信模块 */
/*函数名: TxGPRSMessCom() */
/*子程序编号: */
/*撰写人: 梁 辉 撰写时间: 2003-8-11 */
/*=========================================================*/
unsigned int xdata GprsMessPn=1; //读取短信的指针
unsigned int xdata GprsMessCnt=0; //当前保存的短信的条数
code unsigned char *RdGPRSMessCom="AT+CMGR="; //读取一条短信的指令
code unsigned char *DeGPRSMessCom="AT+CMGD="; //删除一条短信的指令
void TxGPRSMessCom(unsigned char TxMessCom)
{
unsigned char readsmsii;
switch(TxMessCom)
{
case 'R':
if(GprsMessPn>=16) GprsMessPn=1;
if(GprsMessPn<=9&&GprsMessPn>=1)
{
Uart1TxBUFF[0]=0x30+GprsMessPn;
for(readsmsii=0;readsmsii<8;readsmsii++)
U1Txbyte(RdGPRSMessCom[readsmsii]);
U1Txbyte(Uart1TxBUFF[0]);
U1Txbyte(0x0d);
}
else
{
Uart1TxBUFF[0]=_Hexto2Asc(GprsMessPn,0);
Uart1TxBUFF[1]=_Hexto2Asc(GprsMessPn,1);
for(readsmsii=0;readsmsii<8;readsmsii++)
U1Txbyte(RdGPRSMessCom[readsmsii]);
U1Txbyte(Uart1TxBUFF[0]);
U1Txbyte(Uart1TxBUFF[1]);
U1Txbyte(0x0d);
}
GprsMessPn++;//指向下一条短信内容
break;
case 'E':
GprsMessPn--;//指向上一条短信内容
if(GprsMessPn<=9&&GprsMessPn>=1)
{
Uart1TxBUFF[0]=0x30+GprsMessPn;
for(readsmsii=0;readsmsii<8;readsmsii++)
U1Txbyte(DeGPRSMessCom[readsmsii]);
U1Txbyte(Uart1TxBUFF[0]);
U1Txbyte(0x0d);
}
else
{
Uart1TxBUFF[0]=_Hexto2Asc(GprsMessPn,0);
Uart1TxBUFF[1]=_Hexto2Asc(GprsMessPn,1);
for(readsmsii=0;readsmsii<8;readsmsii++)
U1Txbyte(DeGPRSMessCom[readsmsii]);
U1Txbyte(Uart1TxBUFF[0]);
U1Txbyte(Uart1TxBUFF[1]);
U1Txbyte(0x0d);
}
GprsMessPn++;//指向下一条短信内容
break;
default:
break;
}
}
/*=========================================================*/
/*功能说明:GPRS短信接收模块 */
/*函数名: _GPRSRevMess() */
/*子程序编号: */
/*撰写人: 梁辉 撰写时间:2003-8-11 */
/*=========================================================*/
unsigned char xdata GPRSReadCOM=0xff; //接收中心的短信指令
unsigned char xdata MessDataStart=0; //解出的短信数据的位置
void _GPRSRevMess()
{
unsigned char GPRSRevMessii;
unsigned char Tracktemp[4];
// TxGPRSMessCom('E'); //删除当前的短信内容
// delaynop(4000);
MessDataStart=MessDataStart+1; //指向‘8’
if(Uart1RxBUFF[MessDataStart]==0x38)
{
GPRSReadCOM=Unite_Word(Uart1RxBUFF[MessDataStart+2],Uart1RxBUFF[MessDataStart+3]);
switch(GPRSReadCOM)
{
case 0x18: //接收到中心定位指令 "80"+"18"+"FF"ASCII 2字节
Taxistatus=Taxistatusbc;
statusValue=0x7f;
_GPRSSendMess(0x81,1); //回应中心指令
if(warnbit==1)
{
warnbit=0;
warntxnum=100;
warnackbit=1;
stachgbit=1;
}
break;
case 0x19: //接收到中心跟踪指令 "80"+"19"+"XXXX,XXXX"
for(GPRSRevMessii=0;GPRSRevMessii<4;GPRSRevMessii++)
Tracktemp[GPRSRevMessii]=Uart1RxBUFF[MessDataStart+4+GPRSRevMessii];
TrackTime[0]=Unite_Word(Tracktemp[0],Tracktemp[1]);
TrackTime[1]=Unite_Word(Tracktemp[2],Tracktemp[3]);
for(GPRSRevMessii=0;GPRSRevMessii<2;GPRSRevMessii++)
TrackTimebc[GPRSRevMessii]=TrackTime[GPRSRevMessii]; //备份时间间隔
for(GPRSRevMessii=0;GPRSRevMessii<4;GPRSRevMessii++)
Tracktemp[GPRSRevMessii]=Uart1RxBUFF[MessDataStart+8+GPRSRevMessii];
TrackNum[0]=Unite_Word(Tracktemp[0],Tracktemp[1]);
TrackNum[1]=Unite_Word(Tracktemp[2],Tracktemp[3]);
if(NoLTtrackbit) NoLTtrackbit=0; //首先清除不限时跟踪的标志位
trackbit=1;
if((TrackNum[0]==0x00)&&(TrackNum[1]==0x00))//如果是不限时跟踪[2004-01-09]
{
i2c_xmit_buf[0]=0xaa; //使能不限时跟踪的指令
i2c_xmit_buf[1]=TrackTime[0]; //赋值不定时跟踪的时间间隔
i2c_xmit_buf[2]=TrackTime[1];
upsd_i2c_xmit(0xa2,0x00,0xa0,3); //保存不限时跟踪的相关参数
NoLTtrackbit=1; //使能不定时跟踪的标志位
trackbit=0;
}
if(GprsModbit) CurrentTxMode=0xbb;
if(GprsMessbit)CurrentTxMode=0xcc;
Taxistatus=Taxistatusbc;
statusValue=0x7f;
_GPRSSendMess(0x91,1);
break;
case 0xf9: //停止跟踪
//---------------------------------2004-01-09
i2c_xmit_buf[0]=0xbb; //关闭不限时跟踪的指令
i2c_xmit_buf[1]=0x00; //清除不定时跟踪的时间间隔
i2c_xmit_buf[2]=0x00;
upsd_i2c_xmit(0xa2,0x00,0xa0,3); //保存电子围栏数据
NoLTtrackbit=0; //使能不定时跟踪的标志位
//---------------------------------
Taxistatus=Taxistatusbc;
statusValue=0x7f;
_GPRSSendMess(0x9f,1);
trackbit=0;
break;
case 0x1e: //接收到中心短信息指令
_GPRS_SMSMess(); //接收到短信的数据
break;
case 0x2e: //修改中心IP地址指令:"80"+"2e"+"255234112020"+""FF" 255.234.112.020
for(GPRSRevMessii=0;GPRSRevMessii<3;GPRSRevMessii++)
RemoteIP[GPRSRevMessii]=Uart1RxBUFF[MessDataStart+4+GPRSRevMessii];
RemoteIP[3]='.';
for(GPRSRevMessii=0;GPRSRevMessii<3;GPRSRevMessii++)
RemoteIP[GPRSRevMessii+4]=Uart1RxBUFF[MessDataStart+7+GPRSRevMessii];
RemoteIP[7]='.';
for(GPRSRevMessii=0;GPRSRevMessii<3;GPRSRevMessii++)
RemoteIP[GPRSRevMessii+8]=Uart1RxBUFF[MessDataStart+10+GPRSRevMessii];
RemoteIP[11]='.';
for(GPRSRevMessii=0;GPRSRevMessii<3;GPRSRevMessii++)
RemoteIP[GPRSRevMessii+12]=Uart1RxBUFF[MessDataStart+13+GPRSRevMessii];
for(GPRSRevMessii=0;GPRSRevMessii<15;GPRSRevMessii++)
i2c_xmit_buf[GPRSRevMessii]=RemoteIP[GPRSRevMessii];
upsd_i2c_xmit(0xa2,0x00,0x30,15); //写入IP在EPPROM
//------------------------------------
Taxistatus=Taxistatusbc;//短信回应中心
statusValue=0x7f;
_GPRSSendMess(0xe2,1); //
GPRSChgModebit=1; //定时GPRS上线操作
ScanGPRSTime=5;
if(startloginbit) startloginbit=0;
break;
default:
break;
}
}
delaynop(1000);
if(RevGSMMark==0xaa) RevGSMMark=0xff;
TxGPRSMessCom('E'); //删除当前的短信内容
delaynop(5000);
}
//===========================================================
//拔号功能模块区:
//===========================================================
/*=========================================================*/
/*功能说明:GPRS拔号功能模块 */
/*函数名: _PhoneCall() */
/*子程序编号: */
/*撰写人: 撰写时间: */
/*=========================================================*/
unsigned char xdata DisFrame[20];
unsigned char xdata CallMark=0xff;
/*void _PhoneCall(unsigned char PhCallnum)
{
unsigned char Phonecodeii;
U1Txbyte('A');
U1Txbyte('T');
U1Txbyte('D');
for(Phonecodeii=0;Phonecodeii<PhCallnum;Phonecodeii++)
{
U1Txbyte(DisFrame[Phonecodeii]);
}
U1Txbyte(';');
U1Txbyte(0x0d);
CallMark=0xee; //已经拔号标志位
}*/
/***************************************************************************/
/*程序文件名:GprsOnline */
/*功能说明:本程序模块主要用于GPRS的上线与掉线:相关的返回信息 */
/*撰写时间: */
/*撰写人: */
/*主要说明: */
/*相关技术: */
/***************************************************************************/
code unsigned char *ComeCall="来电呼叫.. ";
bit RegMessModebit=0; //可以注册短信的标志位
extern bit RunFcAuTxbit;
//-------------------------------------------------------------------------
extern bit ReadIDbit;
extern unsigned char xdata uart1datalen;
//-------------------------------------------------------------------------
unsigned char xdata GpstDownCnt=1; //GPRS下线的计数器
extern unsigned char xdata regnum; //GPRS网络注册次数
void GprsOnline()
{
unsigned char gprsonii,strpos;
if(strstr(Uart1RxBUFF,"CIPSEND")!=0) goto ExitGprsOnline;
else if((Uart1RxBUFF[6]=='R')&&(Uart1RxBUFF[7]!=':')) goto ExitGprsOnline;
else if(strstr(Uart1RxBUFF,"CONNECT OK")!=0) //GPRS网络上线
{
GprsRegbit=1;
regnum=2;
GprsModbit=1;
GprsMessbit=0;
GPRSChgModebit=0; //清除模式切换定时
ReadMessbit=0; //停止定时读短信
if(startloginbit)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -