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

📄 itm100.c

📁 一个单片机控制的SIMCOM的C语言处理程序
💻 C
📖 第 1 页 / 共 4 页
字号:
		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 + -