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

📄 sub_c.c

📁 车载GPS监控终端的完整代码,与监控中心的通讯采用GPRS.
💻 C
📖 第 1 页 / 共 5 页
字号:
	Clear_Exter_WatchDog();
	//++++++++++++++++++++++++++++++++++++++++++
	//将两个目标电话号码写入到Flash相应的区域中
	//1,先读出第一个扇区的数据存储在buffer2中。
	ReadOnePageToBuffer2(FLASH_INFO1_ONE_2);
	//先存储车型,类别,车组,车号
	OperateSPIEnd();
	WriteOneByteToBuffer2(VEH_TYPE_2,gType);
	WriteNextByteToBuffer2(gKind);
	WriteNextByteToBuffer2(gGroup);
	WriteNextByteToBuffer2(gGeneral_Buffer[1+12]);
	WriteNextByteToBuffer2(gGeneral_Buffer[1+13]);
	OperateSPIEnd();

	//存储目的电话号码1
	//第一个字节存储号码长度(存储在FLASH中的目标号码如果带有+号,也一样存储在FLASH中,并还要算上长度)
	if(cNum1>0)
	{
		WriteOneByteToBuffer2(TARGET_NUMBER1_F_2,cNum1);
		for(i=0;i<cNum1;i++)
		{
			WriteNextByteToBuffer2(gGeneral_Buffer[1+14+i]);
		}
		OperateSPIEnd();
	}
	//存储目的电话号码2
	if(cNum2>0)
	{
		WriteOneByteToBuffer2(TARGET_NUMBER2_F_2,cNum2);
		for(i=0;i<cNum2;i++)
		{
			WriteNextByteToBuffer2(gGeneral_Buffer[i+1+14+cNum1+1]);
		}
		OperateSPIEnd();
	}
	OperateSPIEnd();
	RFlash_Sector(FLASH_INFO1_ONE_2);
	Re430_Flash(0);
}

/********************************************************\
*	函数名:Do_Phone_Note()
	作用域:外地文件调用
*	功能:
*	参数:
*	返回值:
*	创建人:
*
\********************************************************/
void Do_Phone_Note(void)
{
	unsigned int i=0,j=0;
	unsigned char nTemp=0;
	nTemp=gGeneral_Buffer[1+10];	//帧数(范围值0,1,2,3)
	j=0;
	if( (nTemp==0)||(nTemp==1) )
	{
		OperateSPIEnd();ReadOnePageToBuffer2(FLASH_PHONE_INFO_ONE_2);OperateSPIEnd();
		Write_Phone_Buffer2(nTemp);
		//将Buffer2中的数据的内容写入相关扇区中
		P6OUT|=SPI45DB041_WP;
		WriteBuffer2ToPage(FLASH_PHONE_INFO_ONE_2);
		P6OUT&=~SPI45DB041_WP;
		j=1;
	}
	else if( (nTemp==2)||(nTemp==3) )
	{
		OperateSPIEnd();ReadOnePageToBuffer2(FLASH_PHONE_INFO_TWO_2);OperateSPIEnd();
		Write_Phone_Buffer2(nTemp-2);
		P6OUT|=SPI45DB041_WP;
		WriteBuffer2ToPage(FLASH_PHONE_INFO_TWO_2);
		P6OUT&=~SPI45DB041_WP;
		j=1;
	}
	else
	{
		return;
	}
	gTimer=0;Clear_Exter_WatchDog();
	while(gTimer<600){}
	Clear_Exter_WatchDog();
	gTimer=0;Clear_Exter_WatchDog();
	while(gTimer<600){}
	Clear_Exter_WatchDog();
}
/********************************************************\
*	函数名:Write_Phone_Buffer2();
	作用域:本地文件调用
*	功能:
*	参数:  无
*	返回值:无
*	创建人:
*	修改历史:(每条详述)

\********************************************************/
void Write_Phone_Buffer2(unsigned char Add_Flag)
{
	unsigned int i=0;
	unsigned char Num_Phone=0;
	OperateSPIEnd();
	//处理第一个帧电话扇区的数据
	if(Add_Flag==0)
	{
		WriteOneByteToBuffer2(ONE_1_FRAME_2,gGeneral_Buffer[1+12]);
	}
	//处理第二个帧电话扇区的数据
	else if(Add_Flag==1)
	{
		WriteOneByteToBuffer2(TWO_1_FRAME_2,gGeneral_Buffer[1+12]);
	}
	for(i=0;i<(5*21-1);i++)
	{
		WriteNextByteToBuffer2(gGeneral_Buffer[1+13+i]);
	}
	OperateSPIEnd();
	Num_Phone = ReadByteFromBuffer2(PHONE_NUM_2);
	OperateSPIEnd();
	//第1个帧的5个号码
	if( Add_Flag==0 )
	{
		Num_Phone = gGeneral_Buffer[1+11];
	}
	//第2个帧的5个号码
	else if( Add_Flag==1 )
	{
		Num_Phone = 5+gGeneral_Buffer[1+11];
	}
	WriteOneByteToBuffer2(PHONE_NUM_2,Num_Phone);
	OperateSPIEnd();
}

/*
void Debug_Line_Data(void)
{
	unsigned int i=0;
	unsigned char nTemp=0;
	//1,有斜率
//	unsigned char LineData[40]={ 0x18,0x73,0x4A,0x48,0x04,0xD6,0x0F,0x70,0x18,0x73,0x62,0x30,0x04,0xD6,0x27,0x58,0x18,0x73,0x85,0x58,0x04,0xD6,0x27,0x58,0x18,0x73,0xA5,0xB0,0x04,0xD6,0x73,0x48,0x18,0x73,0xB7,0xF8,0x04,0xD6,0x88,0x60};
	//2,平行
//	unsigned char LineData[40]={ 0x18,0x72,0xEA,0xA8,0x04,0xD6,0x2E,0x60,0x18,0x73,0x20,0x18,0x04,0xD6,0x2E,0x60,0x18,0x73,0x56,0xF0,0x04,0xD6,0x31,0x30,0x18,0x73,0x83,0xF0,0x04,0xD6,0x31,0x30,0x18,0x73,0xA7,0x18,0x04,0xD6,0x2E,0x60};
	//3,垂直
//	unsigned char LineData[40]={ 0x18,0x73,0x69,0x38,0x04,0xD5,0xFE,0x90,0x18,0x73,0x69,0x38,0x04,0xD6,0x20,0x50,0x18,0x73,0x67,0xD0,0x04,0xD6,0x4A,0x80,0x18,0x73,0x66,0x69,0x04,0xD6,0x74,0xB0,0x18,0x73,0x65,0x00,0x04,0xD6,0x7F,0xF0};

	unsigned char LineData[80]={0x18,0x73,0x67,0xd0,0x04,0xd6,0x57,0x28,0x18,0x73,0x67,0xd0,0x04,0xd6,0x20,0x50,
	0x18,0x73,0x90,0x98,0x04,0xd6,0x0c,0xa0,0x18,0x73,0x7e,0x50,0x04,0xd5,0xec,0x48,
	0x18,0x73,0x6c,0x08,0x04,0xd5,0x47,0xc0,0x18,0x73,0xfa,0x10,0x04,0xd5,0x36,0xe0,
	0x18,0x74,0x97,0x90,0x04,0xd5,0x34,0x10,0x18,0x75,0x6b,0xe8,0x04,0xd5,0x44,0xf0,
	0x18,0x75,0xd5,0x60,0x04,0xd5,0x82,0xd0,0x18,0x75,0xce,0x5b,0x04,0xd5,0xaf,0xd0};

	nTemp=10;
	SRAM_Init();
	SRAM_Write( SLINE_NUM_1,nTemp );
	SRAM_Write( SLINE_NUM_2,(~nTemp) );
	for(i=0;i<80;i++)
	{
		SRAM_Write( (SLINE_DATA_1+i),LineData[i] );
	}
	gLine_Num=10;
	gStatus3_Flag|=LINE_LIMIT_F_1;

	//显示线路数据相应的缓冲区中的数据是否正确
	Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
	Send_COM1_Byte('[');
	for(i=SLINE_NUM_1;i<SLINE_NUM_1+82;i++)
	{
		nTemp=SRAM_Read(i);
		Send_COM1_Byte(ASCII(nTemp/0x10));
		Send_COM1_Byte(ASCII(nTemp%0x10));
		Clear_Exter_WatchDog();
	}
	Send_COM1_Byte(']');
	Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
}
*/

void Ask_Par(void)
{
	unsigned int i=0;
	unsigned char nTemp=0;
	unsigned char nLength=0,Num=0,Num1=0,nIP=0;
	unsigned char Dis_On=0;
	unsigned int  iTCP=0,iGSM=0,iDistance=0;
	//读取扇区1,2的相关参数
	OperateSPIEnd();ReadOnePageToBuffer2(FLASH_INFO1_ONE_2);OperateSPIEnd();
	OperateSPIEnd();
	nLength=0;
	gGeneral_Buffer[0]=0;									//有效数据的长度(不包括长度本身)
	gGeneral_Buffer[1]=ReadByteFromBuffer2(VEH_TYPE_2);		//车型
	gGeneral_Buffer[2]=ReadNextFromBuffer2();				//车类
	gGeneral_Buffer[3]=ReadNextFromBuffer2();				//车组
	gGeneral_Buffer[4]=ReadNextFromBuffer2();				//车号高位
	gGeneral_Buffer[5]=ReadNextFromBuffer2();				//车号低位
	nLength=5;
	OperateSPIEnd();
	Num=ReadByteFromBuffer2(TARGET_NUMBER1_F_2);
	if(Num>16)	Num=16;
	for(i=0;i<Num;i++)
	{
		gGeneral_Buffer[6+i]=ReadNextFromBuffer2();			//目标号码1
	}
	OperateSPIEnd();
	gGeneral_Buffer[6+Num]=0x00;
	nLength=6+Num;
	OperateSPIEnd();
	nIP=ReadByteFromBuffer2(GPRS_IP_ADDRESS1_F_2);			//IP地址
	if(nIP>16)	nIP=16;
	for(i=0;i<nIP;i++)
	{
		gGeneral_Buffer[7+Num+i]=ReadNextFromBuffer2();
	}
	OperateSPIEnd();
	gGeneral_Buffer[7+Num+nIP]=0x00;
	nLength=7+Num+nIP;
	OperateSPIEnd();
	gGeneral_Buffer[8+Num+nIP]=ReadByteFromBuffer2(GPRS_SOCKET1_F_2);
	for(i=0;i<4;i++)
	{
		gGeneral_Buffer[9+Num+nIP+i]=ReadNextFromBuffer2();//SOCKET,端口号
	}
	OperateSPIEnd();
	//
	Num1=ReadByteFromBuffer2(GPRS_APN_DATA_F_2);			//APN参数
	if( (Num1>0)&&(Num1<20) )
	{
		for(i=0;i<Num1;i++)
		{
			gGeneral_Buffer[13+Num+nIP+i]=ReadNextFromBuffer2();
		}
		OperateSPIEnd();
	}
	else
	{
		OperateSPIEnd();
		Num1=sizeof(APN_DEFAULT);
		for(i=0;i<Num1;i++)
		{
			gGeneral_Buffer[13+Num+nIP+i]=APN_DEFAULT[i];
		}
	}
	gGeneral_Buffer[13+Num+nIP+Num1]=0x00;
	nLength=13+Num+nIP+Num1;
	//读扇区5,6的信息内容
	gTimer=0;Clear_Exter_WatchDog();
	while(gTimer<50){}
	Clear_Exter_WatchDog();
	OperateSPIEnd();ReadOnePageToBuffer2(FLASH_INFO2_ONE_2);OperateSPIEnd();
	OperateSPIEnd();
	nTemp=ReadByteFromBuffer2(ON_OFF_V1_2);
	/*
	if(nTemp&TCP_LAND_ON_OFF_1)			gGeneral_Buffer[14+Num+nIP+Num1]=0x30;
	else								gGeneral_Buffer[14+Num+nIP+Num1]=0x31;
	*/
	gON_OFF_Temp0 &=~ TCP_LAND_ON_OFF_1;
	gStatus2_Flag |= TCP_ON_OFF_F_1;
	gGeneral_Buffer[14+Num+nIP+Num1]=0x31;
	nLength=14+Num+nIP+Num1;
	nTemp=ReadNextFromBuffer2();
	if(nTemp&DISTANCE_TCP_ON_1)			Dis_On=0x30;
	else								Dis_On=0x31;
	OperateSPIEnd();

	//TCP的间隔参数需要发送6位的ASCII字符数据
	//GSM的间隔一样
	//按距离值一样

	iTCP = ReadByteFromBuffer2(TCP_TIMER_2);
	iTCP <<= 8;
	iTCP += ReadNextFromBuffer2();

	iGSM = ReadNextFromBuffer2();
	iGSM <<= 8;
	iGSM +=	ReadNextFromBuffer2();

	iDistance = ReadNextFromBuffer2();
	iDistance <<= 8;
	iDistance += ReadNextFromBuffer2();
	OperateSPIEnd();

	gGeneral_Buffer[14+Num+nIP+Num1+1] = ASCII(iTCP/10000);
	gGeneral_Buffer[14+Num+nIP+Num1+2] = ASCII((iTCP%10000)/1000);
	gGeneral_Buffer[14+Num+nIP+Num1+3] = ASCII((iTCP%1000)/100);
	gGeneral_Buffer[14+Num+nIP+Num1+4] = ASCII((iTCP%100)/10);
	gGeneral_Buffer[14+Num+nIP+Num1+5] = ASCII(iTCP%10);

	gGeneral_Buffer[14+Num+nIP+Num1+6] = ASCII(iGSM/10000);
	gGeneral_Buffer[14+Num+nIP+Num1+7] = ASCII((iGSM%10000)/1000);
	gGeneral_Buffer[14+Num+nIP+Num1+8] = ASCII((iGSM%1000)/100);
	gGeneral_Buffer[14+Num+nIP+Num1+9] = ASCII((iGSM%100)/10);
	gGeneral_Buffer[14+Num+nIP+Num1+10] = ASCII(iGSM%10);

	gGeneral_Buffer[14+Num+nIP+Num1+11] = ASCII(iDistance/10000);
	gGeneral_Buffer[14+Num+nIP+Num1+12] = ASCII((iDistance%10000)/1000);
	gGeneral_Buffer[14+Num+nIP+Num1+13] = ASCII((iDistance%1000)/100);
	gGeneral_Buffer[14+Num+nIP+Num1+14] = ASCII((iDistance%100)/10);
	gGeneral_Buffer[14+Num+nIP+Num1+15] = ASCII(iDistance%10);

	gGeneral_Buffer[14+Num+nIP+Num1+16]=Dis_On;								//按距离上传时的TCP的工作方式
	OperateSPIEnd();
	nLength=14+Num+nIP+Num1+16;
	gGeneral_Buffer[0]=nLength;		//不包括长度本身这个字节,数据区的长度
}

void TA_Init(void)
{
    TACTL|=TASSEL1;         //输入时钟选择MCLK
    TACTL|=TACLR;           //定时器A清除位CLR清零
    TACTL|=MC1;             //定时器A选择连续增记数模式
//    TACTL|=TAIE;          //定时器A溢出中断允许

    TAR=0;                  //定时器A的值清零
    TACCTL0|=OUT;           //TXD2 Idle as Mark
	TACCTL1|=OUT;           //TXD3 Idle as Mark
	TACCTL2|=OUT;           //TXD4 Idle as Mark
}

void Re430_Flash(unsigned char InFlag)
{
	unsigned int i=0,j=0;

	if(InFlag>1)	return;
	gGeneral_Buffer[127]=0xAA;
	OperateSPIEnd();
	gGeneral_Buffer[0]=ReadByteFromBuffer2(0);
//	gGeneral_Buffer[127]=gGeneral_Buffer[0];
	for(i=1;i<127;i++)
	{
		gGeneral_Buffer[i]=ReadNextFromBuffer2();
		//gGeneral_Buffer[127]+=gGeneral_Buffer[i];
	}
	OperateSPIEnd();
	Write_SegAB(InFlag);
	gTimer=0;
	while(gTimer<1100){Clear_Exter_WatchDog();}
}
/********************************************************\
*	函数名:Check_ParNum()
	作用域:本地文件调用
*	功能:
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/
unsigned int Check_ParNum(void)
{
	unsigned int x=0,y=0;
	unsigned int i=0;
	x=Check_Vaild(CENTER_NUM_2,CENTER_NUM_CHECK_2);			//短消息中心号码
	y=Check_Vaild(TARGET_NUMBER1_2,TARGET_NUMBER1_CHECK_2); //目标电话号码
	if(x==1)
	{
		gInternal_Flag&=~CENTER_NUM_VAILD_F_1;
		gInternal_Flag|=SET_CSCA_F_1;
		return(1);
	}
	if(y==1)
	{
		gGeneral_Buffer[CENTER_NUM_2]=SRAM_Read(CENTER_NUM_2);
		for(i=CENTER_NUM_2+1;i<=CENTER_NUM_CHECK_2;i++)
		{
			gGeneral_Buffer[i]=SRAM_Read(i);
		}
		OperateSPIEnd();
		Load_Flash_Par_Buffer1();
		return(2);
	}
	return(0);
}
/********************************************************\
*	函数名:Init_Buffer2()
	作用域:本地文件调用
*	功能:
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/
void Init_Buffer2(void)
{
	unsigned int i=0;
	OperateSPIEnd();
	WriteOneByteToBuffer2(0,0xFF);
	for(i=1;i<263;i++)
	{
		WriteNextByteToBuffer2(0xFF);
	}
	WriteNextByteToBuffer2(0xAA);
	OperateSPIEnd();
}
/********************************************************\
*	函数名:Check_Buffer2()
	作用域:本地文件调用
*	功能:
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/
unsigned char Deal_Sector(unsigned int iSector)
{
	unsigned int i=0;
	unsigned char Data=0;
	for(i=0;i<3;i++)
	{
		Data=0;
		OperateSPIEnd();ReadOnePageToBuffer2(iSector);OperateSPIEnd();
		Data=ReadByteFromBuffer2(263);OperateSPIEnd();
		if(Data==0xAA);
		else
		{
			break;
		}
	}
	if(Data==0xaa)	return(0);
	else			return(1);
}

⌨️ 快捷键说明

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