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

📄 gprs.c

📁 51单片机控制wavecom24系列模块的GPRS传输的C源程序
💻 C
字号:
#include "gprs_funcdef.h"
#include "gprs_vardef.h"
#include "myfunclib.h"
#include "string.h"

bit Init_Flag=0; 
//--------测试用ip地址和端口号-----------------------------
extern BYTE xdata IP_ADDRESS1;  
extern BYTE xdata IP_ADDRESS2;  
extern BYTE xdata IP_ADDRESS3;  
extern BYTE xdata IP_ADDRESS4;  

extern BYTE xdata PORT1; 
extern BYTE xdata PORT2;  
extern WORD xdata Send_timer;
//----------------------------------------------------------

BYTE xdata WAVE_Receive_Num = 0;   //GPRS串口接收到的数据记数
BYTE xdata RECEIVEBUFFER[100];

void load_ip_port()
{
	// 装入IP地址
    IP_Head[16]=IP_ADDRESS1;
    IP_Head[17]=IP_ADDRESS2;
	IP_Head[18]=IP_ADDRESS3;
	IP_Head[19]=IP_ADDRESS4;
				
	
	//装入端口号
     UDP_Head[2]=PORT1;
     UDP_Head[3]=PORT2;
}


//***************************************************
//WAVECOM 数据接收子程序:串口0中断服务程序
//**************************************************
void  Serial0_WAVECOM(void) interrupt 4
{   
	if(exitData || enterPhone)
	{
		if (RI)	
		{
			RI = 0;
			URAT0Revbuffer[URAT0writeBuffer++] = SBUF;
		}
		if(TI)
		{
			TI = 0;
			if(URAT0SWriteBuffer != URAT0SWreadBuffer)
			{
				SBUF = URAT0SendBuffer[URAT0SWreadBuffer++];
			}
			else
			{
				URAT0SWriteBuffer = URAT0SWreadBuffer = 0;
				sendOver = 1;
			}
		}
	}//GPRS mode.
	else
	{
		if (RI)	
		{	 
			RI=0;		
			if(RECEIVE_FLAG==0)
			{
				if(SBUF==0x7E)
				{
					RECEIVE_FLAG=1;
					RECEIVEBUFFERPOINT=RECEIVEBUFFER;
					WAVE_Receive_Num = 0;
				}
	        }
			else
			{
				if(SBUF==0x7E)
				{ 
					RECEIVE_FLAG=0;											
				  	if(RECEIVEBUFFERPOINT!=RECEIVEBUFFER)     //排除连续收到两个7E,数据长度为0的错误情况
					{	
						PPP_Rec_Complete = 1;
				    }
				}
				else 
				{
					if(PADDING_Flag==1)
		  			{
		  				*RECEIVEBUFFERPOINT=SBUF;
						if((*RECEIVEBUFFERPOINT) == 0x5E)
						{
							*RECEIVEBUFFERPOINT = 0x7E;
						}
						else if((*RECEIVEBUFFERPOINT) == 0x5D)
						{
							*RECEIVEBUFFERPOINT = 0x7D;
						}
						else
						{
							*RECEIVEBUFFERPOINT^=0x20;
						}	  	        	
		  	        	PADDING_Flag=0;
		  	        	RECEIVEBUFFERPOINT++;
						WAVE_Receive_Num++;
		    		}
		    		else
		    		{
		    			if(SBUF==0x7D)
		    				PADDING_Flag=1;
		    			else
		    			{
		    				*RECEIVEBUFFERPOINT=SBUF;
		  	           		RECEIVEBUFFERPOINT++;
							WAVE_Receive_Num++;
		  	        	}
		  	        }
				}
			}
	   	}
	}	 
}

/////////////////////////////////////////////////////////////
//timer 0 interrupt
////////////////////////////////////////////////////////////
void ISR_Timer0(void) interrupt 1  
{  	
    TH0=0;
	TL0=0;
	if(Timer0_Counter<10){		//256			//Wait  1000us	 20*50us
		Timer0_Counter++;
	}
	else{  
		Timer0_Counter = 0;
		if(waitTimer)
			waitTimer--;

        if(Link_Timer)				//if Link_Timer==0 but net not ok,connect again		
		{
	   	      Link_Timer--;             
        } 
        if(Send_timer)
        {
              Send_timer--;
        }
    }
}

////////////////////////////////////////////////////////////////////
//联网从此函数开始
//该函数执行的条件,是没有联网和联网超时
////////////////////////////////////////////////////////////////////
void InitAndConnect(void)
{
  unsigned char xdata csq;

	if(!GPRS_OK  && Link_Timer == 0)   //如果没有联网而且联网时间已超时,则开始重新联网
	{	
		ES=1;
		csq = 99;
		while(csq > 31)                      //读取信号强度
		{
			csq = GetCSQ();			
		}
		if(csq != 00)
		{	
			exitData = 0;
			TestAndConnect();                //拨号去联网
		}			
	}
}
void TestAndConnect()
{
	UINT i;

	ES=1;          			//允许串

⌨️ 快捷键说明

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