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

📄 itm100.c

📁 一个单片机控制的SIMCOM的C语言处理程序
💻 C
📖 第 1 页 / 共 4 页
字号:
		  	startloginbit=0;
		  	GPRSOnLineTime=20;
		  }
		  GpstDownCnt=1;
		  //----------------------------------------------2004-01-06
		  ChkSocketTime=6;                    //重新初始化GPRS下行指令值;
		  if(CurrentTxMode==0xcc) CurrentTxMode=0xbb;
		  //----------------------------------------------
	}
	else if	(strstr(Uart1RxBUFF,"+CMGR:")!=0)          //读写短信内容
	{
	        delaynop(20);
		strpos=0xff;
		for(gprsonii=0;gprsonii<uart1datalen;gprsonii++)
		{
			if(Uart1RxBUFF[gprsonii]=='D')
			{
				strpos=gprsonii;
				break;
			}
		}
		if(strpos!=0xff)  //取得对方的手机号码
		{
			for(gprsonii=0;gprsonii<11;gprsonii++)
			NCtlCenterID[gprsonii]=Uart1RxBUFF[strpos+7+gprsonii];
			RevGSMMark=0xaa;
		}
		MessDataStart=0xff;		
		for(gprsonii=0;gprsonii<128;gprsonii++)
		{
			if(Uart1RxBUFF[30+gprsonii]==0x0a)
			{
				MessDataStart=30+gprsonii;
				break;
			}
		}		
		if(MessDataStart!=0xff)
	 	_GPRSRevMess();	 	
	}
	else if	(strstr(Uart1RxBUFF,"+CMTI:")!=0)         //接收到最新短信;[在短信模式下]
	{		
		delaynop(20);
		if(Uart1RxBUFF[15]==0x0d)
		{
			GprsMessPn=Uart1RxBUFF[14]-48;
		}
		else if(Uart1RxBUFF[15]!=0x0d&&Uart1RxBUFF[16]==0x0d)
		{
			GprsMessPn=Unite_Word(Uart1RxBUFF[14],Uart1RxBUFF[15]);
		}		
		if(GPRSChgModebit) ScanGPRSTime=20;
		if(startloginbit)		   //如果接收“CONNECT FAIL|
		{
		  	startloginbit=0;
		  	GPRSOnLineTime=20;
		}
		TxGPRSMessCom('R');                 //定时读GPRS短信		
	}
	else if(strstr(Uart1RxBUFF,"CLOSED")!=0)    //连接失败
	{
		if(GprsModbit)
		{					
			TCPDownLine();	           	
			delaynop(2);		
			workmodebit=1;
			RegMessModebit=1;
			if(CurrentTxMode==0xbb) 
			CurrentTxMode=0xcc;
		}
		GprsMessbit=1;
		GprsModbit=0;
		
		GPRSChgModebit=1;                  //清除模式切换定时
		ScanGPRSTime=20;
	}	
	else if(strstr(Uart1RxBUFF,"CONNECT FAIL")!=0)    //连接失败
	{
		if(GpstDownCnt<4) GpstDownCnt++;   //如果小于3次,重新注册
		else GpstDownCnt=1;
		GPRSChgModebit=1;                  //清除模式切换定时
		ScanGPRSTime=20*GpstDownCnt;
		if(startloginbit)		   //如果接收“CONNECT FAIL|
		{
		  	startloginbit=0;
		  	GPRSOnLineTime=20;
		}	
		if(GprsModbit)
		{					
			TCPDownLine();	           	
			delaynop(2);		
			workmodebit=1;
			RegMessModebit=1;
			if(CurrentTxMode==0xbb) 			
			CurrentTxMode=0xcc;
			GprsMessbit=1;
			GprsModbit=0;			
		}
		else 
		{
			GprsMessbit=1;
			GprsModbit=0;
			if(CurrentTxMode==0xbb) 			
			CurrentTxMode=0xcc;
			delaynop(100);
			DealMessPro();
		}		
	}
	else if(strstr(Uart1RxBUFF,"RING")!=0)
	{	
		RxCallMark=0xee;	
	}
	else if(strstr(Uart1RxBUFF,"NO CARRIER")!=0)
	{
		delaynop(20);
		if(RxCallMark==0xee||CallMark==0xee)              //拔打电话
		{
			U1Txbyte('A');
			U1Txbyte('T');
			U1Txbyte('H');
			U1Txbyte(0x0d);
			if(CallMark==0xee)
			CallMark=0xff;
			if(RxCallMark==0xee)
			RxCallMark=0xff;
			delaynop(2000);
		}
	}	
	else if(strstr(Uart1RxBUFF,"RDY")!=0)         //接收到最新短信;
	{
		GprsMessbit=1;                      //短信图标显示
        	GprsModbit=0;                       //屏蔽GPRS图标显示;
	}
	else if(strstr(Uart1RxBUFF,"SEND OK")!=0)
	{		
		ScanInnetCnt=2;                    //定时扫描GPRS网络与远程网络服务器联接
//		if(GprsRegbit) 
//		{GprsRegbit=0;delaynop(1);GPRS_RunInnet();goto ExitGprsOnline;}
		strpos=0xff;
		if(uart1datalen<12) goto ExitGprsOnline;  //len[send ok]=11
		for(gprsonii=0;gprsonii<uart1datalen;gprsonii++)
		{
			if(Uart1RxBUFF[gprsonii]==0x80)
			{
				delaynop(10);
				strpos=gprsonii;
				break;
			}
		}	
		if(strpos!=0xff)
		{
			for(gprsonii=0;gprsonii<uart1datalen;gprsonii++)
			{
				if(Uart1RxBUFF[strpos+gprsonii]!=0x0d)
				Uart1RxBUFF[gprsonii]=Uart1RxBUFF[strpos+gprsonii];
				else
				{
					Uart1RxBUFF[gprsonii]=0x0d;
					break;
				}
			}
//			GPRSnetRxdata();
		}
	}
	else if	(strstr(Uart1RxBUFF,"+CPMS:")!=0)
	{
		strpos=0xff;
		for(gprsonii=0;gprsonii<uart1datalen;gprsonii++)
		{
			if(Uart1RxBUFF[gprsonii]==':')
			{
				delaynop(10);
				strpos=gprsonii;
				break;
			}
		}
		if(strpos!=0xff)
		{
			if(Uart1RxBUFF[strpos+8]==',')
			GprsMessCnt=Uart1RxBUFF[strpos+7]-0x30;
			else if((Uart1RxBUFF[strpos+8]>=0x30)&&(Uart1RxBUFF[strpos+8]<=0x93))
			GprsMessCnt=Unite_Word(Uart1RxBUFF[strpos+7],Uart1RxBUFF[strpos+8]);	
			else
			GprsMessCnt=0; 
			
		}
		if(GprsMessCnt==0) ReadMessbit=0;       //停止定时读短信1 
		else ReadMessbit=1;                     //定时处理完短信操作           
	}
	ExitGprsOnline:;	
}
/*=========================================================*/
/*功能说明:GPRS数传模式到短信模式的切换         	   */
/*函数名:  DownGprsToMess()	              		   */
/*子程序编号:                                              */
/*撰写人: 梁  辉              撰写时间: 2003-8-18        */
/*=========================================================*/
void  DownGprsToMess()
{
	if(GprsModbit)
	{					           	
		delaynop(2);		
		workmodebit=1;
		RegMessModebit=1;
		if(CurrentTxMode==0xbb) 
		CurrentTxMode=0xcc;
		//-----------------------
		GprsMessbit=1;
		GprsModbit=0;
		//------------------------
	}
	if(!GprsMessbit) GprsMessbit=1;
	GPRSChgModebit=1;                  //清除模式切换定时
	ScanGPRSTime=20;		
}
/*=========================================================*/
/*功能说明:查寻短信的条数         	   		   */
/*函数名:  DealMessPro()	              		   */
/*子程序编号:                                              */
/*撰写人: 梁  辉              撰写时间: 2003-12-06       */
/*=========================================================*/
code unsigned char *ConsultMess="AT+CPMS?";//查寻短信功能。
void DealMessPro()
{
	unsigned char dealmessii;
	for(dealmessii=0;dealmessii<8;dealmessii++)
	Uart1TxBUFF[dealmessii]=ConsultMess[dealmessii];
	Uart1TxBUFF[8]=0x0d;
	for(dealmessii=0;dealmessii<9;dealmessii++)
	U1Txbyte(Uart1TxBUFF[dealmessii]);
}
/*=========================================================*/
/*功能说明:主和备用IP的切换和选择     	   		   */
/*函数名:  ChgGprsIPSet()	              		   */
/*子程序编号:                                              */
/*撰写人: 梁  辉              撰写时间: 2003-12-08       */
/*=========================================================*/
/*unsigned char xdata GpRsIPKind=0xbb;
void ChgGprsIPSet()
{
	unsigned char ChgIPii;
	if(GprsIPKind==0xbb)   //加载次IP地址
	{
		GprsIPKind=0xaa;//下次加载主IP地址
		upsd_i2c_rcv(0xa2,0x00,0x90,15);
		for(ChgIPii=0;ChgIPii<15;ChgIPii++)
		RemoteIP[ChgIPii]=i2c_rcv_buf[ChgIPii]; //控制中心的IP地址
		GPRSChgModebit=1;            //定时GPRS上线操作
		ScanGPRSTime=5;	
	}
	else                   //加载主IP地址
	{		
		GprsIPKind=0xbb;//下次加载次IP地址
		upsd_i2c_rcv(0xa2,0x00,0x30,15);
		for(ChgIPii=0;ChgIPii<15;ChgIPii++)
		RemoteIP[ChgIPii]=i2c_rcv_buf[ChgIPii]; //控制中心的IP地址
		GPRSChgModebit=1;            //定时GPRS上线操作
		ScanGPRSTime=5;
	}
}*/
/*=========================================================*/
/*功能说明:定时扫描GPRS网络联接功能                       */
/*函数名:  void ScanInNetSocket()	                   */
/*子程序编号:                                              */
/*撰写人: 梁  辉              撰写时间: 2003-12-13       */
/*=========================================================*/
void ScanInnetSocket()
{
	if(ScanInnetCnt!=0)  ScanInnetCnt--;
	else
	{
		ScanInnetCnt=2;
		GPRSnetTxdata('L',1);
        }
}
/*=========================================================*/
/*功能说明:定时6分钟检测下行指令                          */
/*函数名:  void ChkInNetSocket()	                   */
/*子程序编号:                                              */
/*撰写人: 梁  辉              撰写时间: 2004-01-06       */
/*=========================================================*/
void ChkInnetSocket()
{
	if(ChkSocketTime!=0)  ChkSocketTime--;
	else
	{
		ChkSocketTime=6;
		TCPDownLine();            //使能下线信号
		delaynop(1500);            
		TCPconnectStart();     	  //使能上线
		startloginbit=1;          //定时20秒;确认能否上线:不能则下线
		GPRSOnLineTime=20;
        }
}							
/***************************************************************************/
/*程序文件名:_GPRS_SMSMess                                                 */
/*功能说明:本程序模块主要用于SDR的短信通讯方式下的短信数据的接收           */
/*撰写时间:                                                                */
/*撰写人:                                                                  */
/*主要说明:                                                                */
/*相关技术:                                                                */
/***************************************************************************/
void _GPRS_SMSMess()          //"80"+"1E"+"长度[2]"+"短信内容"+"FF"
{
	unsigned char messii;
	unsigned char smstemp;
	smstemp=Uart1RxBUFF[MessDataStart+4]&0x0f;
	MessLon=smstemp*10;
	smstemp=Uart1RxBUFF[MessDataStart+5]&0x0f;
	MessLon=MessLon+smstemp;	
	
	MessLon=MessLon/2;                      //短信数据有效长度
	for(messii=0;messii<MessLon;messii++)   //接收短信数据
	MessBUFF[13+messii]=Unite_Word(Uart1RxBUFF[MessDataStart+6+2*messii],Uart1RxBUFF[MessDataStart+7+2*messii]);
	
	//---------------------------------------------------------------------------	
	for(messii=0;messii<2;messii++) MessBUFF[messii]=gpsTimeD[messii+2];
	MessBUFF[2]='/';
	for(messii=0;messii<2;messii++) MessBUFF[3+messii]=gpsTimeD[messii];
	MessBUFF[5]=0x00;
	for(messii=0;messii<2;messii++) MessBUFF[6+messii]=gpsTimeD[6+messii];
	MessBUFF[8]=':';
	for(messii=0;messii<2;messii++) MessBUFF[9+messii]=gpsTimeD[8+messii];
	MessBUFF[11]='/';
	MessBUFF[12]='M';	
	for(messii=0;messii<2;messii++)
	MessBUFF[13+MessLon+messii]=0x20;
	MessLen=MessLon+15;
    	NewMessbit=1;      //短信标志位
    	//-------------------------------------
    	Taxistatus=Taxistatusbc;
	statusValue=0x7f;
	_GPRSSendMess(0xe1,1); 		
}
       		 		       		       		       		       		   	       	
		

⌨️ 快捷键说明

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