📄 gprs.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 + -