📄 main.c
字号:
{
//while(1)
//{
//UART0_SendString((uint8 *)"执行命令错误\r\n");
//DelayNS(10);
//}
RecPointer=ReadPointer=0;
return 1;
}
sprintf(tempch,"AT#TCPSERV=2,\"%d.%d.%d.%d\"\r",ServerIP2[0],ServerIP2[1],ServerIP2[2],ServerIP2[3]);
RecPointer=ReadPointer=0; //清除接受缓存区
status=ModemCommand(tempch);
if(status!=MODEM_CONNECT)
{
//while(1)
//{
//UART0_SendString((uint8 *)"执行命令错误\r\n");
//DelayNS(10);
//}
RecPointer=ReadPointer=0;
return 1;
}
sprintf(tempch,"AT#TCPPORT=2,\"%d\"\r",Port2);
RecPointer=ReadPointer=0; //清除接受缓存区
status=ModemCommand(tempch);
if(status!=MODEM_CONNECT)
{
//while(1)
//{
//UART0_SendString((uint8 *)"执行命令错误\r\n");
//DelayNS(10);
//}
RecPointer=ReadPointer=0;
return 1;
}
RecPointer=ReadPointer=0;
return 0;
}
uint8 Register_Service(uint8 mode)
{
uint8 status;
uint8 count=0;
char tempch[20];
sprintf(tempch,"AT#OTCP=%d\r",mode);
OTCP:
RecPointer=ReadPointer=0; //清除接受缓存区
status=ModemWrite(tempch,strlen(tempch));
if(status!=MODEM_CONNECT)
{
//while(1)
//{
//UART0_SendString((uint8 *)"执行命令错误\r\n");
//DelayNS(10);
//}
RecPointer=ReadPointer=0;
return 1;
}
OTCP_WAIT:
DelayNS(10);
while(ReadPointer<RecPointer)
{
if(RecBuff[ReadPointer]!='1')
{
ReadPointer++;
continue;
}
if(ReadPointer+3>=RecPointer)
{
if(count>12)
{
RecPointer=ReadPointer=0;
return 1;
}
count++;
if(count%4!=0)
{
goto OTCP_WAIT;
}
else
{
goto OTCP;
}
}
if(RecBuff[ReadPointer+1]!='0'||RecBuff[ReadPointer+2]!='2'||RecBuff[ReadPointer+3]!='8')
{
ReadPointer++;
continue;
}
if(ReadPointer+5>=RecPointer)
{
if(count>12)
{
RecPointer=ReadPointer=0;
return 1;
}
count++;
if(count%4!=0)
{
goto OTCP_WAIT;
}
else
{
goto OTCP;
}
}
if(RecBuff[ReadPointer+4]!=0x0D||RecBuff[ReadPointer+4]!=0x0A)
{
ReadPointer++;
continue;
}
RecPointer=ReadPointer=0;
return 0;
}
if(RecPointer==0)
{
if(count>12)
{
RecPointer=ReadPointer=0;
return 1;
}
count++;
if(count%4!=0)
{
goto OTCP_WAIT;
}
else
{
goto OTCP;
}
}
else
{
RecPointer=ReadPointer=0;
return 0;
}
RecPointer=ReadPointer=0;
return 0;
}
uint8 GPRS_Send(uint8 *buf,uint16 length)
{
uint8 status;
status=ModemWrite((char*)buf,length);
if(status!=MODEM_CONNECT)
{
//RecPointer=ReadPointer=0;
return 1;
}
//RecPointer=ReadPointer=0;
return 0;
}
uint16 GPRS_Recive(uint8 *buf,uint16 length)
{
uint8 count=0;
uint16 templength;
while(1)
{
if(RecPointer<length)
{
if(count>=3)
{
if(RecPointer==0)
return 0;
memcpy(buf,RecBuff,RecPointer);
templength=RecPointer;
RecPointer=0;
return templength;
}
DelayNS(10);
count++;
}
else
{
memcpy(buf,RecBuff,RecPointer);
templength=RecPointer;
RecPointer=0;
return templength;
}
}
}
uint8 Hold_Active(void)
{
uint8 status;
status=ModemWrite((char*)Hold_String,strlen(Hold_String));
if(status!=MODEM_CONNECT)
{
//RecPointer=ReadPointer=0;
return 1;
}
//RecPointer=ReadPointer=0;
return 0;
}
uint8 AT_Comminute(void)
{
uint8 status;
RecPointer=ReadPointer=0; //清除接受缓存区
status=ModemCommand("ATO");
if(status!=MODEM_CONNECT)
{
//while(1)
//{
//UART0_SendString((uint8 *)"执行命令错误\r\n");
//DelayNS(10);
//}
RecPointer=ReadPointer=0;
return 1;
}
RecPointer=ReadPointer=0;
return 0;
}
uint8 Comminute_AT(void)
{
uint8 status;
RecPointer=ReadPointer=0; //清除接受缓存区
status=ModemCommand("+++");
if(status!=MODEM_CONNECT)
{
//while(1)
//{
//UART0_SendString((uint8 *)"执行命令错误\r\n");
//DelayNS(10);
//}
RecPointer=ReadPointer=0;
return 1;
}
RecPointer=ReadPointer=0;
return 0;
}
int main(void)
{
int8 status;
uint8 buf[512];
uint16 length;
uint16 r_length;
UART0_Init();
START_GPRS:
status=Start_GPRS();
if(status!=0)
{
//while(1)
//{
//UART0_SendString((uint8 *)"启动GPRS失败\r\n");
//DelayNS(10);
//}
Reset_GPRS();
goto START_GPRS;
}
status=Check_SIMCard();
if(status!=0)
{
while(1)
{
UART0_SendString((uint8 *)"请插入SIM卡\r\n");
DelayNS(10);
}
}
status=Check_CSQ();
if(status!=0)
{
while(1)
{
UART0_SendString((uint8 *)"信号太弱,无法和服务器通讯\r\n");
DelayNS(10);
}
}
status=Config_GPRS();
if(status!=0)
{
while(1)
{
UART0_SendString((uint8 *)"GPRS配置失败\r\n");
DelayNS(10);
}
}
status=Start_TCP();
if(status!=0)
{
while(1)
{
UART0_SendString((uint8 *)"TCP配置失败\r\n");
DelayNS(10);
}
}
status=Register_Service(1);
if(status!=0)
{
while(1)
{
UART0_SendString((uint8 *)"登录服务器失败\r\n");
DelayNS(10);
}
}
do{
status=GPRS_Send(buf,length);
if(status!=0)
{
while(1)
{
UART0_SendString((uint8 *)"GPRS发送数据失败\r\n");
DelayNS(10);
}
}
r_length=GPRS_Recive(buf,length);
if(r_length!=0)
{
//while(1)
//{
UART0_SendDataLen(buf,r_length);
DelayNS(10);
//}
}
}while(1);
return(0);
}
uint8 Q2403A(void)
{
uint8 status;
RecPointer=ReadPointer=0; //清除接受缓存区
status=ModemCommand("AT\r");
if(status!=MODEM_CONNECT)
{
while(1)
{
UART0_SendString((uint8 *)"执行命令错误\r\n");
DelayNS(10);
}
}
RecPointer=ReadPointer=0; //清除接受缓存区
status=ModemCommand("AT+CMEE=1\r"); //设置出错后得到错误代码号
if(status!=MODEM_CONNECT)
{
while(1)
{
UART0_SendString((uint8 *)"执行命令错误\r\n");
DelayNS(10);
}
}
RecPointer=ReadPointer=0; //清除接受缓存区
status=ModemWrite("AT+CCID\r",8); //检测是否装有SIM 卡
if(status!=MODEM_CONNECT)
{
while(1)
{
UART0_SendString((uint8 *)"执行命令错误\r\n");
DelayNS(10);
}
}
DelayNS(1);
if(ReadPointer<RecPointer)
{
//测试没插入SIM卡的返回值、插入SIM卡返回卡ID号
if((RecBuff[RecPointer-1]==13)&&(RecBuff[RecPointer-2]=='0'))
{
//打印SIM_ID
UART0_SendDataLen(&RecBuff[8],RecPointer-13);
}
else
{
while(1)
{
UART0_SendString((uint8 *)"执行命令错误\r\n");
DelayNS(10);
}
}
}
else
{
while(1)
{
UART0_SendString((uint8 *)"GPRS无应答或设备不存在\r\n");
DelayNS(10);
}
}
RecPointer=ReadPointer=0; //清除接受缓存区
status=ModemCommand("AT+CGCLASS=\"B\"\r"); //设置移动终端的类别为B类,即具有GPRS上网和GSM语音功能,但二者不能同时使用,可自动切换
if(status!=MODEM_CONNECT)
{
while(1)
{
UART0_SendString((uint8 *)"执行命令错误\r\n");
DelayNS(10);
}
}
RecPointer=ReadPointer=0; //清除接受缓存区
//超级终端测试、返回值处理
status=ModemCommand("AT+CGDCONT=1,\"IP\",\"CMNET\"\r"); //设置 1:表示使用第一种配置方案、IP:表示协议、CMNET:APN;GSM7.07标准
if(status!=MODEM_CONNECT)
{
while(1)
{
UART0_SendString((uint8 *)"执行命令错误\r\n");
DelayNS(10);
}
}
CSQ:
RecPointer=ReadPointer=0; //清除接受缓存区
status=ModemWrite("AT+CSQ\r",7);
if(status!=MODEM_CONNECT)
{
while(1)
{
UART0_SendString((uint8 *)"执行命令错误\r\n");
DelayNS(10);
}
}
DelayNS(1);
while(ReadPointer<RecPointer)
{
//返回10-31、0继续,如返回99,99;则信号太差、使用“A/”命令不停的搜寻网络
//返回的第一个表示信号强度:最大应为30,一般为28左右、第二个表示:误码率为0
//正确返回的长度应该是13,+CSQ:XX,0\r\n0\r
if(!(RecBuff[RecPointer-1]==13&&RecBuff[RecPointer-2]=='0'))
{
UART0_SendString((uint8 *)"无信号\r\n");
//ReadPointer=RecPointer=0;
//ModemCommand("A\\");
DelayNS(10);
//continue;
goto CSQ;
}
if(RecBuff[7]==',')
{
UART0_SendString((uint8 *)"信号太弱\r\n");
//ReadPointer=RecPointer=0;
//ModemCommand("A\\");
DelayNS(10);
//continue;
goto CSQ;
}
else
{
if(RecBuff[6]=='9'&&RecBuff[7]=='9')
{
UART0_SendString((uint8 *)"无信号\r\n");
//ReadPointer=RecPointer=0;
//ModemCommand("A\\");
DelayNS(10);
//continue;
goto CSQ;
}
}
break;
}
if(RecPointer==0)
{
//信号检测失败
goto CSQ;
}
else
{
//信号检测成功
RecPointer=ReadPointer=0;
}
RecPointer=ReadPointer=0; //清除接受缓存区
//超级终端测试、返回值处理
status=ModemCommand("AT+CGACT=1,1\r"); //激活GPRS功能、如果SIM卡开通GPRS功能则返回OK,否则返回ERROR
if(status!=MODEM_CONNECT)
{
while(1)
{
UART0_SendString((uint8 *)"SIM卡尚未开通GPRS功能\r\n");
DelayNS(100);
}
}
REG:
RecPointer=ReadPointer=0; //清除接受缓存区
status=ModemWrite("AT+CGREG?\r",10); //检测是否登陆上GPRS 网络
if(status!=MODEM_CONNECT)
{
while(1)
{
UART0_SendString((uint8 *)"执行命令错误\r\n");
DelayNS(100);
}
}
DelayNS(1);
while(RecPointer>0)
{
//返回+CGREG: 0, 1、5成功登陆、返回+CGREG: 0, 0 登陆失败,则不停的发送“A/”命令重新登入
if(!(RecBuff[RecPointer-1]==13&&RecBuff[RecPointer-2]=='0'))
{
UART0_SendString((uint8 *)"登陆失败\r\n");
//ReadPointer=RecPointer=0;
//ModemCommand("A\\");
DelayNS(10);
//continue;
goto REG;
}
if((RecBuff[9]!=',')||(RecBuff[8]!=0x30)||(RecBuff[10]!=0x31&&RecBuff[10]!=0x35))
{
UART0_SendString((uint8 *)"登陆失败\r\n");
//ReadPointer=RecPointer=0;
//ModemCommand("A\\");
DelayNS(10);
//continue;
goto REG;
}
break;
}
if(RecPointer==0)
{
//注册失败
goto REG;
}
else
{
//注册成功
RecPointer=ReadPointer=0;
}
//拨号、使用PPP协议
status=ModemWrite("ATD*99***1#\r",12);
if(status!=MODEM_CONNECT)
{
while(1)
{
UART0_SendString((uint8 *)"拨号失败\r\n");
DelayNS(100);
}
}
//PPP协议约定
status=PPP_Process();
return 0;
}
uint8 PPP_Process(void)
{
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -