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

📄 itm100.c

📁 一个单片机控制的SIMCOM的C语言处理程序
💻 C
📖 第 1 页 / 共 4 页
字号:
/*=========================================================*/
/*                     程序说明                            */
/*                 GPRS数据通信模块[SIMCOM-ITM100]         */
/*    该程序模块主要是用GPRS数据通讯模块程序功能           */
/*    短信采用PDU短信格式/GPRS的TCP/UDP通讯功能            */
/*撰写人: 梁辉               撰写时间:2003-7-10          */
/*=========================================================*/
#include "string.h"
#include "UPSDHAD.h"
#include  "absacc.h"
#include "PortDefine.h"
#include "upsd_i2c.h"
#include "string.h"
//=========================================================
extern unsigned char xdata dgpsTime[6];//时间 YYMMDDhhmmss
extern unsigned char xdata dgpsLat[4];//纬度
extern unsigned char xdata dgpsLon[4];//经度
extern unsigned char xdata dgpsSpd[2];//速度
extern unsigned char xdata dgpsDeg[2];//方向
extern unsigned char xdata dgpsHgh[4];//高度
extern unsigned char xdata Taxistatus;//控制器当前状态7F,7D,7B//车载机状态分二级;第一级为电台状态,第二级的显示器状态;
extern unsigned char xdata Taxistatusbc;//记忆电台状态
extern unsigned char xdata People_Count;
extern unsigned char xdata ICstatus;
extern unsigned char xdata statusValue;
extern unsigned char xdata Uart1RxBUFF[128];
extern unsigned char xdata Uart1TxBUFF[128];
extern unsigned char xdata gpsTimeD[6];

extern unsigned char xdata CurrentTxMode;
extern xdata unsigned char i2c_xmit_buf[256];					    // message xmit buffer
extern xdata unsigned char i2c_rcv_buf[256];
//-------------------------------------
extern bit stachgbit;
extern bit GprsModbit;
extern bit ReadMessbit;
//--------------------------------------
//集群模式:
//车载机本地身份码:b23	b22	b21b20   b19--b16       b15--b8          b7-----b0 
//通信方式	   0	0	群码4bit       组码8bit	        身份码8bit
unsigned char xdata Local_ID[3]={0x01,0x01,0x64};
unsigned char xdata CenterID=0x00;
//====================================================
//------------------------------------------2003-09-17
extern unsigned char xdata TaxiData[12];//车辆数据;
//------------------------------------------2003-12-3
extern unsigned char xdata GPRSOnLineTime;  //上线定时
//------------------------------------------
extern bit setgprsIPbit;
extern bit startloginbit;		//检查是否上线代码 
extern bit GprsMessbit;
extern bit workmodebit;
bit GprsRegbit=0;    //发送GPRS注册信号的标志位
extern bit GPRSChgModebit;
extern unsigned char xdata ScanGPRSTime;
unsigned char xdata ScanInnetCnt=2;//GPRS网络通信定时
unsigned char xdata ChkSocketTime=6;
/*=========================================================*/
/*功能说明:使SDR模块从GPRS透明模式切换到一般AT的MODEM模式 */
/*函数名:  SetChgATMode()                                 */
/*子程序编号:                                              */
/*撰写人:   梁辉              撰写时间: 2003-9-1         */
/*=========================================================*/
code unsigned char *MessDisset="AT+CNMI=3,1,0,0,0";

code const unsigned char *connectIPstart	="AT+CIPSTART=\"TCP\",\"\",\"\"";	//连接服务器
code const unsigned char *connectIPsend		="AT+CIPSEND";		//发送数据
code const unsigned char *connectIPclose	="AT+CIPCLOSE";        //关闭UDP/TCP
code const unsigned char *connectIPshut		="AT+CIPSHUT";         //关闭移动场景
//------------------------------------------------------------
unsigned char xdata RemoteIP[15]="061.144.145.230";     //设定的远端IP地址"198.220.250.030";
unsigned char xdata RemotePortID[4]="8960";
unsigned char xdata LocalPortID[4]="8960";
void TCPconnectStart()			//设定GPRS上线工作
{
	unsigned char TCPStartii;
	for(TCPStartii=0;TCPStartii<19;TCPStartii++)
	Uart1TxBUFF[TCPStartii]=connectIPstart[TCPStartii];
	for(TCPStartii=0;TCPStartii<15;TCPStartii++)
	Uart1TxBUFF[TCPStartii+19]=RemoteIP[TCPStartii];
	Uart1TxBUFF[34]='"';
	Uart1TxBUFF[35]=',';
	Uart1TxBUFF[36]='"';
	for(TCPStartii=0;TCPStartii<4;TCPStartii++)
	Uart1TxBUFF[TCPStartii+37]=RemotePortID[TCPStartii];
	Uart1TxBUFF[41]='"';
	Uart1TxBUFF[42]=0x0d;
	for(TCPStartii=0;TCPStartii<43;TCPStartii++)
	U1Txbyte(Uart1TxBUFF[TCPStartii]);	
}
//-------------------------------------------------------
void TCPDownLine()
{
	unsigned char TCPDownii;
	for(TCPDownii=0;TCPDownii<11;TCPDownii++)
	Uart1TxBUFF[TCPDownii]=connectIPclose[TCPDownii];
	Uart1TxBUFF[11]=0x0d;
	for(TCPDownii=0;TCPDownii<12;TCPDownii++)
	U1Txbyte(Uart1TxBUFF[TCPDownii]);	
	delaynop(2000);
	
	for(TCPDownii=0;TCPDownii<10;TCPDownii++)
	Uart1TxBUFF[TCPDownii]=connectIPshut[TCPDownii];
	Uart1TxBUFF[10]=0x0d;
	for(TCPDownii=0;TCPDownii<11;TCPDownii++)
	U1Txbyte(Uart1TxBUFF[TCPDownii]);
        
        DownGprsToMess();
}
/*=========================================================*/
/*功能说明:设定SMS短信中心号码                            */
/*函数名:  SetSMSCterID()                                 */
/*子程序编号:                                              */
/*撰写人:   梁辉              撰写时间: 2003-9-1         */
/*=========================================================*/
unsigned char xdata SMSCenterID[11]="13800200500";   //SMS 中心号码
code unsigned char *setsmscode="AT+CSCA=\"+86\"";    //设定中心号码指令
code unsigned char *setbsmsMode="AT+CMGF=1&W";       //设定短信为文本格式
//code unsigned char *setBPS="AT+IPR=57600";          //设定波特率
void SetSMSCterID()
{
 	unsigned char Setii;
	for(Setii=0;Setii<11;Setii++)
	Uart1TxBUFF[Setii]=setbsmsMode[Setii];
	Uart1TxBUFF[11]=0x0d;
	for(Setii=0;Setii<12;Setii++)
	U1Txbyte(Uart1TxBUFF[Setii]);
	//------------------------- //设定来短信提示
	delaynop(1000);		
	for(Setii=0;Setii<17;Setii++)
	Uart1TxBUFF[Setii]=MessDisset[Setii];
	Uart1TxBUFF[17]=0x0d;
	for(Setii=0;Setii<18;Setii++)
	U1Txbyte(Uart1TxBUFF[Setii]);
	delaynop(1000);
	//-------------------------设定短信中心号码
	for(Setii=0;Setii<12;Setii++)
	Uart1TxBUFF[Setii]=setsmscode[Setii];
	for(Setii=0;Setii<11;Setii++)
	Uart1TxBUFF[Setii+12]=SMSCenterID[Setii];
	Uart1TxBUFF[23]='"';
	Uart1TxBUFF[24]=0x0d;
	
	for(Setii=0;Setii<25;Setii++)
	U1Txbyte(Uart1TxBUFF[Setii]);
	//-------------------------	
}	
/*=========================================================*/
/*功能说明:GPRS初始化模块                                 */
/*函数名: _GPRSLogon()                                    */
/*子程序编号:                                              */
/*撰写人:   梁辉              撰写时间: 2003-12-2        */
/*=========================================================*/
void _GPRSLogon()
{
	unsigned char i=100;
	SetSMSCterID();               //设定短信中心号
	delaynop(1000);
	GPRSChgModebit=1;            //定时GPRS上线操作
	ScanGPRSTime=5;
	//---------------	
}
//=========================================================
//GPRS的TCP通讯模块区:
//=========================================================
/*=========================================================*/
/*功能说明:GPRS通信打包模块                               */
/*函数名: _GPRSPakData()                                  */
/*子程序编号:                                              */
/*撰写人:    梁辉             撰写时间:2003-7-25         */
/*=========================================================*/
//状态<1>+经度<4>+纬度<4>+速度<2>+方位角<2>+海拔高度[4]+日<1>
//+月<1>+年<1>+时<1>+分<1>+秒<1>+人数<1>+显示器状态2+样验和<1>+FF(H)(+0D(H)+0A(H))------26个字节
unsigned char GPRSPakBag[27];
extern unsigned char xdata Add_Key[10];
extern unsigned char xdata Int_Key;
void _GPRSPakMessData()
{
	unsigned int gprspakii;
 	unsigned int gprsnum,gprsnum1,gprsnum2,gprsecode1,gprsecode2,gprsfceCode;
 	unsigned int gprskeymark;       //2003-8-21-9:08
	delaynop(2);         		//上线延时
 	gprsfceCode=Add_Key[Int_Key];
 	Int_Key++;
 	gprskeymark=Int_Key;            //2003-8-21-9:08
	if(gprskeymark>10) gprskeymark=0;
 	if(Int_Key>9) Int_Key=0;
 	gprsnum=gprsfceCode&0xf0;	//取得基数高字节
  	gprsnum1=dgpsTime[4]&0xf0;	//取得分钟高字节
  	gprsnum2=gprsnum1>>4;
  	gprsecode1=gprsnum|gprsnum2;
  	gprsnum=gprsfceCode&0x0f;	//取得基数低字节
  	gprsnum1=dgpsTime[4]&0x0f;	//取得分钟低字节
  	gprsnum2=gprsnum<<4;
  	gprsecode2=gprsnum2|gprsnum1;
  	GPRSPakBag[0]=Taxistatus^gprsfceCode;
  	for(gprspakii=0;gprspakii<4;gprspakii++)
   	{			
    		GPRSPakBag[gprspakii+1]=dgpsLat[gprspakii]^gprsecode1;//经度
    		GPRSPakBag[gprspakii+5]=dgpsLon[gprspakii]^gprsecode2;//纬度
    		GPRSPakBag[gprspakii+13]=dgpsHgh[gprspakii]^gprsecode2;//高度
   	}
	delaynop(2);
  	for(gprspakii=0;gprspakii<2;gprspakii++)
   	{
    		GPRSPakBag[gprspakii+9]=dgpsSpd[gprspakii]^gprsfceCode;
    		GPRSPakBag[gprspakii+11]=dgpsDeg[gprspakii]^gprsfceCode;
   	} 
  	for(gprspakii=0;gprspakii<2;gprspakii++) GPRSPakBag[gprspakii+17]=dgpsTime[gprspakii]^0x47^gprsfceCode;//DD/MM/YY/HH/MM/SS
  	for(gprspakii=0;gprspakii<3;gprspakii++) GPRSPakBag[gprspakii+19]=dgpsTime[gprspakii+3]^0x47^gprsfceCode;
  	GPRSPakBag[22]=People_Count;//人数;	
//  	GPRSPakBag[23]=gprskeymark^0x55^0x36; //加密基数标识加密;  	
  	GPRSPakBag[23]=gprsfceCode^0x55^0x36; //加密基数加密	
  	GPRSPakBag[24]=gprsfceCode^ICstatus;  //显示器值;
  	GPRSPakBag[25]=gprsfceCode^statusValue;//显示器状态值;
  	GPRSPakBag[26]=0x25^dgpsLat[0]^dgpsLat[1]^dgpsLat[2]^dgpsLat[3]^dgpsLon[0]^dgpsLon[1]^dgpsLon[2]^dgpsLon[3];
}
/*=========================================================*/
/*功能说明:GPRS的UDP/TCP模式发送数据                      */
/*函数名: GPRSnetTxdata()                                 */
/*子程序编号:                                              */
/*撰写人:     梁辉            撰写时间:  2003-8-5        */
/*=========================================================*/
code unsigned char  gprstxendbuf[3]={0xff,0x0d,0x0a};
//0x90+命令字[1]+身份码[3]+GPS数据帧+0xff+0x0d+0x0a;
void GPRSnetTxdata(unsigned char gprsccom,unsigned char datatype)
{
	unsigned char gprsheadtemp[9];
	unsigned char gprstxii;
	//------------------------------------------发送数据启动[2003-12-01]
	for(gprstxii=0;gprstxii<10;gprstxii++)
	U1Txbyte(connectIPsend[gprstxii]);
	U1Txbyte(0x0d);
	delaynop(1000);
	//-------------------------------------------
	gprsheadtemp[0]=0x90; 
	gprsheadtemp[1]=gprsccom;
	for(gprstxii=0;gprstxii<3;gprstxii++)
	gprsheadtemp[2+gprstxii]=Local_ID[gprstxii];  //本机的车载身份码
	
	if(datatype==1||datatype==2) _GPRSPakMessData();
	for(gprstxii=0;gprstxii<5;gprstxii++)
	U1Txbyte(gprsheadtemp[gprstxii]);               //0x90+'命令字'[1]+'本机车载ID号'[5]
	if(datatype==1)
	{
		for(gprstxii=0;gprstxii<27;gprstxii++)
		U1Txbyte(GPRSPakBag[gprstxii]);        //发送车辆GPS数据
	}
	//-------------------------------------------2003-9-17
	else if(datatype==2)
	{
		for(gprstxii=0;gprstxii<27;gprstxii++)
		U1Txbyte(GPRSPakBag[gprstxii]);        //发送车辆GPS数据
		
		for(gprstxii=0;gprstxii<12;gprstxii++)
		U1Txbyte(TaxiData[gprstxii]);          //发送车辆数据
	}
	//-------------------------------------------
	for(gprstxii=0;gprstxii<3;gprstxii++)
	U1Txbyte(gprstxendbuf[gprstxii]);              //发送帧尾
	//-------------------------------------------2003-12-01
	U1Txbyte(0x1a);
	//-------------------------------------------2003-12-01[CTL-Z]
	ScanInnetCnt=2;
}
/*=========================================================*/
/*功能说明:GPRS的UDP/TCP模式接收数据                      */
/*函数名: GPRSnetRxdata()                                 */
/*子程序编号:                                              */
/*撰写人:    梁辉             撰写时间:2003-8-5          */
/*=========================================================*/
unsigned char xdata gprsRxCom=0xff;
unsigned char xdata RxCallMark=0xff;
//---------------------------------
bit unloadbit=0;
void GPRSnetRxdata()
{ 
	if(Uart1RxBUFF[0]==0x80)        //GPRS网络接收
	{
	    	if(!GprsRegbit)
	    	{	    
	    		if(CurrentTxMode!=0xaa)
	    		CurrentTxMode=0xbb;
	   		GprsModbit=1;
	   		GprsMessbit=0;
	    	}
	    	//---------------------------------------
	    	ChkSocketTime=6;                    //重新初始化GPRS下行指令值
	    	//---------------------------------------
	    	gprsRxCom=0xff;             //初始化命令字
	    	gprsRxCom=Uart1RxBUFF[1];
		switch(gprsRxCom)
		{
			case 'L':		    //定位
			        GPRS_RunPos();
				break;
			case 'T':                   //跟踪
			        GPRS_RunTrack();
			        break;
			case 'S':                   //停止跟踪
			        GPRS_RunSTrack();
			        break;
			case 'M':                   //短信
			        GPRS_RunMess();
			        break;
			case 'H':                   //电子围栏
			        GPRS_RunInPlace();  
			        break;
			case 'K':	            //锁车
			        GPRS_RunLock();
			        break;
			case 'U':       	    //解锁
			        GPRS_RunUnlock();
			        break;
//			case 'A':       	    //监听
//			        GPRS_RunMonitor();
//			        break;
//			case 'V':                   //区域调度
//			        GPRS_RunAtt();
//			        break;
//			case 'B':                   //枪毙;  
//			        GPRS_RunKill();
//			        break;
//			case 'D':                   //复话     
//			        GPRS_RunRelive();
//			        break;
//			case 'O':                   //调度短信成功
//			        GPRS_RunAttMess();
//			        break;
			case 'I':
			        GprsRegbit=0;      //清除定时发送注册信息的标志位x
				delaynop(1);
			        GPRS_RunInnet();
				break;
			case 'i':
			        GprsRegbit=1;      //启动定时发送注册信息的标志位
			        break;

⌨️ 快捷键说明

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