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

📄 gprs_program.c

📁 simcom100 GPRS 模块源程序
💻 C
📖 第 1 页 / 共 3 页
字号:
			return 0x55;   //接收失败
		}
	}
	bg_GprsRec = 0;        //收到一帧命令回复信息,清接收标志
	
	//result commpare ,confirm if connet success
	// send ok
	cl_Match = RamCodeCmp(&cg_GprsRecBuff[1],&CIPSEND_OK[0]);

	if(cl_Match == 0)
	{
		bg_GprsRxComm = 0;
		return 0x00;       //connet success
	}
	else
	{
		bg_GprsRxComm = 0;
		return 0x55;
	}
		
	return 0;
}

/*
**********************************************************************
*  函数功能:    connet to serivers
                                                                     
*  输入参数:	 *IpAddr   serivers ip addr
				 Port                         
*  输出参数:    返回值 == 0x00 ,连接已oK
				        == 0x55 ,未连上                                                   
**********************************************************************
*/
#if(0)
uchar GprsConnectStep(void)
{
	uchar err;
	uchar cl_Match;
	uchar i;
	
	void *GprsRecMsg;
	i = 0;
	do
	{
		
		//copy command
		cg_GprsTraBuff[0] = CodeRam(CSTT,&cg_GprsTraBuff[1]);
		
		cg_GprsTraBuff[0] ++;
		cg_GprsTraBuff[cg_GprsTraBuff[0]] = 0x0d;
		cg_GprsTraBuff[0] ++;
		cg_GprsTraBuff[cg_GprsTraBuff[0]] = 0x0a;
		
		//star connet 
		TI0 = 0;
		SBUF0 = cg_GprsTraBuff[1];
		cg_GprsTraCount = 1;
		bg_GprsTraFinish = 1;
		while(bg_GprsTraFinish);
		GprsRecMsg = OSMboxPend(GprsRec,0,&err);
		if(err == OS_NO_ERR)
		{
			if((*(uchar *)GprsRecMsg) == REC_COMM)
			{
				//result commpare ,confirm if connet success
				cl_Match = RamCodeCmp(&cg_GprsRecBuff[1],OK);
			
			}
		}
	} while((i<10) && (cl_Match != 0));


	//
	i = 0;
	do
	{
 		cg_GprsTraBuff[0] = CodeRam(CIICR,&cg_GprsTraBuff[1]);
	
		cg_GprsTraBuff[0] ++;
		cg_GprsTraBuff[cg_GprsTraBuff[0]] = 0x0d;
		cg_GprsTraBuff[0] ++;
		cg_GprsTraBuff[cg_GprsTraBuff[0]] = 0x0a;
	

		//star connet 
		TI0 = 0;
		SBUF0 = cg_GprsTraBuff[1];
		cg_GprsTraCount = 1;
		bg_GprsTraFinish = 1;
		while(bg_GprsTraFinish);
		GprsRecMsg = OSMboxPend(GprsRec,0,&err);
		if(err == OS_NO_ERR)
		{
			if((*(uchar *)GprsRecMsg) == REC_COMM)
			{
				//result commpare ,confirm if connet success
				cl_Match = RamCodeCmp(&cg_GprsRecBuff[1],OK);
			
			}
		}
	} while((i<10) && (cl_Match != 0));	



	///
	i = 0;
	do
	{
		cg_GprsTraBuff[0] = CodeRam(CIFSR,&cg_GprsTraBuff[1]);
		
		cg_GprsTraBuff[0] ++;
		cg_GprsTraBuff[cg_GprsTraBuff[0]] = 0x0d;
		cg_GprsTraBuff[0] ++;
		cg_GprsTraBuff[cg_GprsTraBuff[0]] = 0x0a;
	

		//star connet 
		TI0 = 0;
		SBUF0 = cg_GprsTraBuff[1];
		cg_GprsTraCount = 1;
		bg_GprsTraFinish = 1;
		while(bg_GprsTraFinish);
		GprsRecMsg = OSMboxPend(GprsRec,0,&err);
		if(err == OS_NO_ERR)
		{
			if((*(uchar *)GprsRecMsg) == REC_COMM)
			{
				//result commpare ,confirm if connet success
				cl_Match = RamCodeCmp(&cg_GprsRecBuff[1],IP0);
			
			}
		}
	} while((i<10) && (cl_Match == 0));
	
	return 0;
}

#endif

//////
#if(0)
void GprsStatus(void)
{
 	cg_GprsTraBuff[0] = CodeRam(CSQ,&cg_GprsTraBuff[1]);

	cg_GprsTraBuff[0] ++;
	cg_GprsTraBuff[cg_GprsTraBuff[0]] = 0x0d;
	cg_GprsTraBuff[0] ++;
	cg_GprsTraBuff[cg_GprsTraBuff[0]] = 0x0a;


	//star connet 
	TI = 0;
	SBUF = cg_GprsTraBuff[1];
	cg_GprsTraCount = 1;
	bg_GprsTraFinish = 1;
	bg_GprsRec = 0;
	while(bg_GprsTraFinish);
	
	TimeCount = 0;         //请时间计数器
	while(!bg_GprsRec)
	{
		if(TimeCount > 100)
		{
			return ;      //接收失败
		}
	}
	bg_GprsRec = 0;        //收到一帧命令回复信息,清接收标志
	
}
#endif
/*
**********************************************************************
*  函数功能:    close echo
                                                                     
*  输入参数:	 
				                          
*  输出参数:    返回值 == 0x00 ,
				        == 0x55 ,                                                   
**********************************************************************
*/
uchar GprsEcho(void)
{
//	uchar err;
	uchar cl_Match;
//	void *GprsRecMsg; 

	cg_GprsTraBuff[0] = CodeRam(ATE,&cg_GprsTraBuff[1]);

	cg_GprsTraBuff[0] ++;
	cg_GprsTraBuff[cg_GprsTraBuff[0]] = 0x0d;
	cg_GprsTraBuff[0] ++;
	cg_GprsTraBuff[cg_GprsTraBuff[0]] = 0x0a;


	//star connet 
	TI = 0;
	SBUF = cg_GprsTraBuff[1];
	cg_GprsTraCount = 1;
	bg_GprsTraFinish = 1;
	bg_GprsRec = 0;
	bg_GprsRxComm = 1;
	while(bg_GprsTraFinish);
	
	TimeCount = 0;         //请时间计数器
	while(!bg_GprsRec)
	{
		if(TimeCount > 200)
		{
			bg_GprsRxComm = 0;
			return 0x55;  //接收失败
		}
	}
	bg_GprsRec = 0;        //收到一帧命令回复信息,清接收标志
	//result commpare ,confirm if connet success
	cl_Match = RamCodeCmp(&cg_GprsRecBuff[1],OK);
		
	bg_GprsRxComm = 0;	
	if(cl_Match == 0)
	{
		return 0x00;       //connet success
	}
	else
	{
		return 0x55;	   //connet fail
	}
	
}

/*
**********************************************************************
*  函数功能:    modify bps
                                                                     
*  输入参数:	 
				                          
*  输出参数:    返回值 == 0x00 ,
				        == 0x55 ,                                                   
**********************************************************************
*/
#if(0)
uchar GprsBps(void)
{
	uchar err;
	uchar cl_Match;
	void *GprsRecMsg; 

	cg_GprsTraBuff[0] = CodeRam(IPR,&cg_GprsTraBuff[1]);

	cg_GprsTraBuff[0] ++;
	cg_GprsTraBuff[cg_GprsTraBuff[0]] = 0x0d;
	cg_GprsTraBuff[0] ++;
	cg_GprsTraBuff[cg_GprsTraBuff[0]] = 0x0a;


	//star connet 
	TI0 = 0;
	SBUF0 = cg_GprsTraBuff[1];
	cg_GprsTraCount = 1;
	bg_GprsTraFinish = 1;
	while(bg_GprsTraFinish);
	GprsRecMsg = OSMboxPend(GprsRec,0,&err);
	if(err == OS_NO_ERR)
	{
		if((*(uchar *)GprsRecMsg) == REC_COMM)
		{
			//result commpare ,confirm if connet success
			cl_Match = RamCodeCmp(&cg_GprsRecBuff[1],OK);
		
		}
		if(cl_Match == 0)
		{
			return 0x00;       //connet success
		}
		else
		{
			return 0x55;	   //connet fail
		}
	}
}
#endif

/*
************************************************************************************
*
*	初始化串口
*
*************************************************************************************
*/
void GprsSerialIni()
{
	T2CON = 0X34;
	RCAP2H = TH2INI;
	RCAP2L = TL2INI;
	TH2 = TH2INI;
	TL2 = TL2INI;
	
	SCON = 0x50;
	//enable interrupt
	IE |= 0x30;
}

/*
***********************************************************************************
*
*	串口0中断
*
***********************************************************************************
*/

void Serial(void) interrupt 4
{

	if(RI)
	{
		RI = 0;
		bg_GprsRxByteOver = 1;                //接收超时标志
		cg_GprsRxByteCount = 0;
	if(bg_GprsRecSE) 
		{
			if(SBUF == 0x0d)
			{
				bg_GprsCr =1;
			}
			else if(SBUF == 0x0a)
			{
				if(bg_GprsCr)
				{
					bg_GprsCr = 0;
					bg_GprsRecSE = 0;
					cg_GprsRecBuff[0] = 0;
					if( (cg_GprsRecBuff[1] == '+') && (cg_GprsRecBuff[2] == 'C') && 
						(cg_GprsRecBuff[3] == 'M') && (cg_GprsRecBuff[4] == 'S') )
					{
						bg_GprsRxSms = 1;
					}
					else
					{
						bg_GprsRec = 1;
					}
				}
			}
			else
			{
				if(cg_GprsRecBuff[0] < GPRS_REC_COMM_SIZE)
				{
					cg_GprsRecBuff[0] ++;
				}
				else
				{
					cg_GprsRecBuff[0] = 0;
				}
				cg_GprsRecBuff[cg_GprsRecBuff[0]] = SBUF;
				if( (cg_GprsRecBuff[0] == 2) && (cg_GprsRecBuff[1] == '>') &&
					(cg_GprsRecBuff[2] == 0x20))
				{
					//may send data to gprs
					bg_GprsRecSE = 0;
					bg_GprsRec = 1;
					cg_GprsRecBuff[0] = 0;
				}	
			}
		}
		else if(bg_GprsDataHead)
		{
			cg_ExtInter |= GPRS_RED_ON;
    		EXT_INTER = cg_ExtInter;
    		cg_GprsRecDataBuff[0] ++;
			cg_GprsRecDataBuff[cg_GprsRecDataBuff[0]] = SBUF;
			if(cg_GprsRecDataBuff[0] == cg_GprsRecDataBuff[1])
			{
				//收到一帧完整的数据帧
				bg_GprsRxData = 1;
				cg_ExtInter &= GPRS_RED_OFF;
    			EXT_INTER = cg_ExtInter;
    			cg_GprsRecDataBuff[0] = 0;
    			bg_GprsDataHead = 0;
			}
			else if(cg_GprsRecDataBuff[0] > cg_GprsRecDataBuff[1])
			{
				cg_GprsRecDataBuff[0] = 0;
				bg_GprsDataHead = 0;
			}
		}
		else
		{
			if(SBUF == 0x0d)
			{
				bg_GprsCr = 1;
			}
			else if(SBUF == 0x0a)
			{
				if(bg_GprsCr)
				{
					bg_GprsCr = 0;
					bg_GprsRecSE = 1;
				}
			}
			else if(SBUF == GPRS_INFO_HEADER1)
			{
				bg_GprsRxHead = 1;
			}
			else if(SBUF == GPRS_INFO_HEADER2)
			{
				if(bg_GprsRxHead)
				{
					bg_GprsRxHead = 0;
					bg_GprsDataHead = 1;
				}
			}
			else
			{
				bg_GprsRxHead = 0;
				bg_GprsCr = 0;
			}

		}
	}
	
	if(TI)
	{
		TI = 0;
		cg_ExtInter |= GPRS_GREEN_ON;
    	EXT_INTER = cg_ExtInter;

    	if(bg_Decode)
    	{
    		bg_Decode = 0;
    		SBUF = cg_Decode;
    	}
		else if(cg_GprsTraCount < cg_GprsTraBuff[0])
		{
			cg_GprsTraCount ++;
			
			if(bg_SendData)
			{
				if(cg_GprsTraBuff[cg_GprsTraCount] == '&')
				{
					SBUF = '&';
					bg_Decode = 1;

⌨️ 快捷键说明

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