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

📄 gpr.c

📁 modem 原程序。用于无线模块的开发应用GPRS应用
💻 C
字号:
/*******************************************
程序名称:Module_Rst()
功能:复位西门子MC35
返回值:无
********************************************/
nodebug cofunc void cofModule_Rst(void)
{
	BitWrPortI(PDDR, &PDDRShadow, 1, 1);
	waitfor(DelayMs(100));
	BitWrPortI(PDDR, &PDDRShadow, 0, 1);		//低电平有效
	waitfor(DelayMs(300));
	BitWrPortI(PDDR, &PDDRShadow, 1, 1);
	waitfor(DelayMs(1000));
	ModemSetDTR(1);							//置DTR有效
}

/* START FUNCTION DESCRIPTION **********************************************/
/*CofModemInit_LINTON                                 							*/
/*DESCRIPTION: 	resets modem with AT, ATZ commands. Yields to other tasks*/
/*					while waiting for responses.											*/
/*RETURN VALUE:	1 - success																*/
/*				   	0 - modem not responding 											*/
/*END DESCRIPTION **********************************************************/

nodebug cofunc int CofModemInit_LINTON(unsigned long baud)		//this program is modified by LINTON based on CofModemInit().
{
	auto int i, received;
	auto int status;
	unsigned char buffer[64];
   	unsigned long tr;

	for(i = 0;i < 64;i++)   buffer[i] = 0;

	if(shut_mc35 > 3)//关闭模块电源
	  {
	  	#ifdef	DTU_DEBUG
			wfd { cof_serAputs("\r\nshut up mc35,please wait 15 seconds\r\n"); }
		#endif
	  	BitWrPortI(PEDR, &PEDRShadow, 1, 5);
	  	waitfor(DelayMs(5000));
	  	VdHitWd(wd);
	  	waitfor(DelayMs(5000));
	  	VdHitWd(wd);
	  	waitfor(DelayMs(5000));
	  	VdHitWd(wd);
	  	BitWrPortI(PEDR, &PEDRShadow, 0, 5);
	        shut_mc35 = 0;
	  }

	//wfd { cofModule_Rst(); }					//激活模块
	Module_Rst();
	//set DTR active
	ModemSetDTR(1);							//置DTR有效
	//check DSR line,DSR(PB4)connect to GND
	serCflowcontrolOff();						//流量控制打开
	waitfor(DelayMs(1000));
	VdHitWd(wd);//dog

	wfd { CofModemSend("ATZ\r"); }		// Reset
  	waitfor(DelayMs(300));
  	#ifdef DTU_DEBUG
	   wfd { cof_serAputs("\r\nATZ"); }
  	   while(serCrdUsed() > 0)
  	      {
  	          wfd { cof_serAputc(serCgetc()); }
  	      }
  	#endif
	VdHitWd(wd);//dog

	wfd { CofModemSend("ATQ0E0X0V1\r"); }		// Q0: return result code
  	waitfor(DelayMs(300));				// E0: Echo off
  	#ifdef DTU_DEBUG				// X0: retrun code 0-4,14
	   wfd { cof_serAputs("\r\nATQ0E0X0V1"); }	// V1: <CR><LF>text<CR><LF>
  	   while(serCrdUsed() > 0)
  	      {
  	          wfd { cof_serAputc(serCgetc()); }
  	      }
  	#endif
	VdHitWd(wd);//dog

	wfd { CofModemSend("AT&C1&D2&S0\r"); }
  	waitfor(DelayMs(300));
  	#ifdef DTU_DEBUG
	   wfd { cof_serAputs("\r\nAT&C1&D2&S0"); }
  	   while(serCrdUsed() > 0)
  	      {
  	          wfd { cof_serAputc(serCgetc()); }
  	      }
  	#endif
	VdHitWd(wd);//dog

	waitfor(DelayMs(200));
	serCrdFlush();
	for(i = 0;i < 3;i++)
	{
		//force command mode
		//wfd { CofModemSend("AT\r"); }				//送AT
		//wfd { status = CofModemExpect("OK", 2000); }		//等待ok返回
		//waitfor(DelayMs(50));					//等待100ms
		wfd { CofModemSend("AT^SSYNC=1\r"); }
	        wfd { status = CofModemExpect("OK", 1000); }		//等待ok返回
		waitfor(DelayMs(50));
		VdHitWd(wd);	//dog

		if(status)
		{
			wfd { cof_serAputs("\r\nAT+CSQ\r\n"); }
			wfd { CofModemSend("AT+CSQ\r"); }
			tr = MS_TIMER;
			while(1)	// 显示返回结果以确定信号强度
			{
				while((received = serCgetc()) == -1)
				{
					if(MS_TIMER - tr > 500)  break;	//timed out
				}
				if(MS_TIMER - tr > 500)  break;
				wfd { cof_serAputc(received); }		// putchar(received);
				tr = MS_TIMER;
			}
			//wfd { CofModemSend(MODEM_INIT_STRING); }	//送出初始化字符串
			//ModemSend("AT+CGDCONT=1,\"IP\",\"CMnet\"\r");
			ModemSend("AT+CGDCONT=1,\"IP\",\"");
			readUserBlock(buffer,APN_Config,sizeof(buffer));
			ModemSend(buffer);
			ModemSend("\"\r");
			VdHitWd(wd);//dog
			#ifdef DTU_DEBUG
			serAputs("AT+CGDCONT=1,\"IP\",\"");
				serAputs(buffer);
				serAputs("\r\n");
			#endif
			status = ModemExpect("OK", 2000);

			VdHitWd(wd);//dog

			if(status)
			{
				#ifdef	DTU_DEBUG
				wfd { cof_serAputs("AT+CGDCONT OK!\n\r"); }
				#endif
				return 1;
			}
		}
	}
	shut_mc35++;
	return 0;
}

/*******************************************
程序名称:Module_Rst()
功能:复位西门子MC35
返回值:无
********************************************/
nodebug void Module_Rst(void)
{
	BitWrPortI(PDDR, &PDDRShadow, 0, 1);
	msDelay(100);
	BitWrPortI(PDDR, &PDDRShadow, 1, 1);
}

⌨️ 快捷键说明

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