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

📄 main.c

📁 集中数据采集系统中
💻 C
📖 第 1 页 / 共 5 页
字号:
U16 setclock(void)
{
	//uint data cyc_flag,info_check;						// 循环标识,信息包校验标识
	U16 cyc_flag,info_check;						// 循环标识,信息包校验标识
	write_dallas(0x80,buf_ptr->buf0[11]);write_dallas(0x82,buf_ptr->buf0[10]);
	write_dallas(0x84,buf_ptr->buf0[9]);write_dallas(0x86,buf_ptr->buf0[8]);
	write_dallas(0x88,buf_ptr->buf0[7]);write_dallas(0x8C,buf_ptr->buf0[6]);
	buf_ptr->buf0[0]=0xEA;
	buf_ptr->buf0[1]=0xEA;
	buf_ptr->buf0[2]=0x85;
	buf_ptr->buf0[3]=carr_svr_name[1];
	buf_ptr->buf0[4]=carr_svr_name[0];
	buf_ptr->buf0[5]=0x00;
	buf_ptr->buf0[6]=0x00;
	buf_ptr->buf0[7]=0x00;
	info_check=0;
	for(cyc_flag=0;cyc_flag<=7;cyc_flag++)
	{info_check+=buf_ptr->buf0[cyc_flag];}
	buf_ptr->buf0[8]=info_check%0x0100;
	buf_ptr->buf0[9]=info_check/0x0100;
	buf_ptr->buf0[10]=0xDD;
	return(10);
}

// 读取集中器运行主控版本号
//uint readversion(void)
U16 readversion(void)
{
	//uint data cyc_flag,info_check;						// 循环标识,信息包校验标识
	U16 cyc_flag,info_check;						// 循环标识,信息包校验标识
	buf_ptr->buf0[0]=0xEA;
	buf_ptr->buf0[1]=0xEA;
	buf_ptr->buf0[2]=0x89;
	buf_ptr->buf0[3]=carr_svr_name[1];
	buf_ptr->buf0[4]=carr_svr_name[0];
	buf_ptr->buf0[5]=0x07;
	buf_ptr->buf0[6]=carr_svr_ver[0];
	buf_ptr->buf0[7]=carr_svr_ver[1];
	buf_ptr->buf0[8]=carr_svr_ver[2];
	buf_ptr->buf0[9]=carr_svr_ver[3];
	buf_ptr->buf0[10]=carr_svr_ver[4];
	buf_ptr->buf0[11]=carr_svr_ver[5];
	buf_ptr->buf0[12]=carr_svr_ver[6];
	buf_ptr->buf0[13]=0x00;
	buf_ptr->buf0[14]=0x00;
	info_check=0;
	for(cyc_flag=0;cyc_flag<=12;cyc_flag++)
	{info_check+=buf_ptr->buf0[cyc_flag];}
	buf_ptr->buf0[15]=info_check%0x0100;
	buf_ptr->buf0[16]=info_check/0x0100;
	buf_ptr->buf0[17]=0xDD;
	return(17);
}

U16 point_excerption(void)
{
	//uint data cyc_flag,info_check;						// 循环标识,信息包校验标识
	U16 cyc_flag,info_check;						// 循环标识,信息包校验标识
	//uchar xdata carr_page[34];							// 临时载波包
	uchar carr_page[34];							// 临时载波包
	carr_page[0]=0x09;
	carr_page[1]=0xAF;
	carr_page[2]=buf_ptr->buf0[11];
	carr_page[3]=buf_ptr->buf0[10];
	carr_page[4]=buf_ptr->buf0[9];
	carr_page[5]=0x01;
	carr_page[6]=0x05;
	carr_page[7]=0x1F;
	carr_page[8]=0x90;
	carr_page[9]=0xBB;
	carr_page[10]=0xBB;
	carr_page[11]=0xBB;
	carr_page[12]=0x00;
	for(cyc_flag=2;cyc_flag<=11;cyc_flag++)
	{carr_page[12]+=carr_page[cyc_flag];}
	carr_page[13]=0x03;
	// 信息包正向转换
	buf_ptr->buf0[0]=0x18;
	buf_ptr->buf0[1]=0x06;
	buf_ptr->buf0[2]=0x01;
	buf_ptr->buf0[3]=0xFF;
	buf_ptr->buf0[4]=0xFF;
	buf_ptr->buf0[5]=0xFF;
	buf_ptr->buf0[6]=0xFF;
	buf_ptr->buf0[7]=0xFF;
	buf_ptr->buf0[8]=0xFF;
	for(cyc_flag=0;cyc_flag<=13;cyc_flag++)
	{buf_ptr->buf0[9+cyc_flag]=carr_page[cyc_flag];}
	buf_ptr->buf0[23]=0x00;
	for(cyc_flag=1;cyc_flag<=22;cyc_flag++)
	{buf_ptr->buf0[23]+=buf_ptr->buf0[cyc_flag];}
	if(PLM_snd_rcv1())
	{
		for(cyc_flag=0;cyc_flag<=33;cyc_flag++)
		{carr_page[cyc_flag]=buf_ptr->buf0[cyc_flag];}
		// 信息包反向转换
		if(carr_page[1]==0x00)
		{
			buf_ptr->buf0[0]=0xEA;
			buf_ptr->buf0[1]=0xEA;
			buf_ptr->buf0[2]=0xC4;
			buf_ptr->buf0[3]=carr_svr_name[1];
			buf_ptr->buf0[4]=carr_svr_name[0];
			buf_ptr->buf0[5]=0x00;
			buf_ptr->buf0[6]=0x00;
			buf_ptr->buf0[7]=0x00;
			info_check=0;
			for(cyc_flag=0;cyc_flag<=7;cyc_flag++)
			{info_check+=buf_ptr->buf0[cyc_flag];}
			buf_ptr->buf0[8]=info_check%0x0100;
			buf_ptr->buf0[9]=info_check/0x0100;
			buf_ptr->buf0[10]=0xDD;
			return(10);	
		}
		else
		{
			buf_ptr->buf0[0]='S';
			buf_ptr->buf0[1]=0x30;
			buf_ptr->buf0[2]=0x30;
			buf_ptr->buf0[3]=0x30;
			buf_ptr->buf0[4]=0x31;    
			buf_ptr->buf0[5]=0x30;
			buf_ptr->buf0[6]=0x30;
			buf_ptr->buf0[7]=(carr_page[13]/0x10) + 0x30;
			buf_ptr->buf0[8]=(carr_page[13]%0x10) + 0x30;
			buf_ptr->buf0[9]=(carr_page[12]/0x10) + 0x30;;
			buf_ptr->buf0[10]=(carr_page[12]%0x10) + 0x30;
			buf_ptr->buf0[11]=(carr_page[11]/0x10) + 0x30;
			buf_ptr->buf0[12]=(carr_page[11]%0x10) + 0x30;
			buf_ptr->buf0[13]=carr_page[18];
			buf_ptr->buf0[14]=carr_page[17];
			buf_ptr->buf0[15]=carr_page[16];
			buf_ptr->buf0[16]=carr_page[15];
			buf_ptr->buf0[17]=carr_page[22];
			buf_ptr->buf0[18]=carr_page[21];
			buf_ptr->buf0[19]=carr_page[20];
			buf_ptr->buf0[20]=carr_page[19];
			buf_ptr->buf0[21]=carr_page[30];
			buf_ptr->buf0[22]=carr_page[29];
			buf_ptr->buf0[23]=carr_page[28];
			buf_ptr->buf0[24]=carr_page[27];
			buf_ptr->buf0[25]='E';
			return(25);
		}
	}
	else
	{
		buf_ptr->buf0[0]=0xEA;
		buf_ptr->buf0[1]=0xEA;
		buf_ptr->buf0[2]=0xC4;
		buf_ptr->buf0[3]=carr_svr_name[1];
		buf_ptr->buf0[4]=carr_svr_name[0];
		buf_ptr->buf0[5]=0x00;
		buf_ptr->buf0[6]=0x00;
		buf_ptr->buf0[7]=0x00;
		info_check=0;
		for(cyc_flag=0;cyc_flag<=7;cyc_flag++)
		{info_check+=buf_ptr->buf0[cyc_flag];}
		buf_ptr->buf0[8]=info_check%0x0100;
		buf_ptr->buf0[9]=info_check/0x0100;
		buf_ptr->buf0[10]=0xDD;
		return(10);	
	}
}

U16 downpro(void)
{
	//uint data cyc_flag,info_check;						// 循环标识,信息包校验标识
	U16 cyc_flag,info_check;						// 循环标识,信息包校验标识
	buf_ptr->buf0[0]=0xEA;
	buf_ptr->buf0[1]=0xEA;
	buf_ptr->buf0[2]=0xC6;
	buf_ptr->buf0[3]=carr_svr_name[1];
	buf_ptr->buf0[4]=carr_svr_name[0];
	buf_ptr->buf0[5]=0x00;
	buf_ptr->buf0[6]=0x00;
	buf_ptr->buf0[7]=0x00;
	info_check=0;
	for(cyc_flag=0;cyc_flag<=7;cyc_flag++)
	{info_check+=buf_ptr->buf0[cyc_flag];}
	buf_ptr->buf0[8]=info_check%0x0100;
	buf_ptr->buf0[9]=info_check/0x0100;
	buf_ptr->buf0[10]=0xDD;
	return(10);	
}

U16 ser_reposition(void)
{
	//uint data cyc_flag,info_check;						// 循环标识,信息包校验标识
	U16 cyc_flag,info_check;						// 循环标识,信息包校验标识
	buf_ptr->buf0[0]=0xEA;
	buf_ptr->buf0[1]=0xEA;
	buf_ptr->buf0[2]=0x90;
	buf_ptr->buf0[3]=carr_svr_name[1];
	buf_ptr->buf0[4]=carr_svr_name[0];
	buf_ptr->buf0[5]=0x00;
	buf_ptr->buf0[6]=0x00;
	buf_ptr->buf0[7]=0x00;
	info_check=0;
	for(cyc_flag=0;cyc_flag<=7;cyc_flag++)
	{info_check+=buf_ptr->buf0[cyc_flag];}
	buf_ptr->buf0[8]=info_check%0x0100;
	buf_ptr->buf0[9]=info_check/0x0100;
	buf_ptr->buf0[10]=0xDD;
	return(10);
}

U16 clear_data(void)
{
	//uint data cyc_flag,info_check;						// 循环标识,信息包校验标识
	U16 cyc_flag,info_check;						// 循环标识,信息包校验标识
	buf_ptr->buf0[0]=0xEA;
	buf_ptr->buf0[1]=0xEA;
	buf_ptr->buf0[2]=0xC7;
	buf_ptr->buf0[3]=carr_svr_name[1];
	buf_ptr->buf0[4]=carr_svr_name[0];
	buf_ptr->buf0[5]=0x00;
	buf_ptr->buf0[6]=0x00;
	buf_ptr->buf0[7]=0x00;
	info_check=0;
	for(cyc_flag=0;cyc_flag<=7;cyc_flag++)
	{info_check+=buf_ptr->buf0[cyc_flag];}
	buf_ptr->buf0[8]=info_check%0x0100;
	buf_ptr->buf0[9]=info_check/0x0100;
	buf_ptr->buf0[10]=0xDD;
	return(10);
}

U16 realtime(uchar char_temp)
{
	//uchar data cush_char;								// 接收信息包标识
	uchar cush_char;								// 接收信息包标识
	//uint data cyc_flag,cyc_flag_acc,num_cyc,info_check;	// 大循环标识,小循环标识,标识,信息包校验标识
	U16 cyc_flag,cyc_flag_acc,num_cyc,info_check;	// 大循环标识,小循环标识,标识,信息包校验标识
	//uint data bn;										// 包标识符
	U16 bn;										// 包标识符
	//uchar xdata temp_data[8000];						// 临时包									// 
	uchar temp_data[8000];						// 临时包									// 
	//uchar xdata *pm;									// 地址指针
	uchar *pm;									// 地址指针
	//P1=0xF4;P1=0xF1;
	//qwe
	cyc_flag_acc=0;
	temp_data[cyc_flag_acc]=0xFF;
	temp_data[++cyc_flag_acc]='T';
	temp_data[++cyc_flag_acc]=0xFF;
	rRTCCON=0x01;
	temp_data[++cyc_flag_acc]=rBCDYEAR;
	temp_data[++cyc_flag_acc]=rBCDMON;
	temp_data[++cyc_flag_acc]=rBCDDAY;
 	temp_data[++cyc_flag_acc]=rBCDHOUR;
	temp_data[++cyc_flag_acc]=rBCDMIN;
	temp_data[++cyc_flag_acc]=rBCDSEC;
	rRTCCON=0x00;
	temp_data[++cyc_flag_acc]='C';
	//jzq_ptr=(JZQ_HEAD xdata *)JZQ_ADD;
	jzq_ptr=(JZQ_HEAD *)JZQ_ADD;
	num_cyc=jzq_ptr->meter_num;
	for(cyc_flag=1;cyc_flag<=num_cyc;cyc_flag++)
	{
		//pm=(unsigned char xdata *)(JZQ_ADD+DAT_ADD*comp1(cyc_flag));
		pm=(unsigned char *)(JZQ_ADD+DAT_ADD*comp(cyc_flag));
    	//dat_ptr=(DAT_ITEM xdata *)pm;
    	dat_ptr=(DAT_ITEM *)pm;
		// 取出所需数据<<表号6字节为压缩BCD码,后12字节为4字节总、4字节峰、4字节谷>>
		temp_data[++cyc_flag_acc]=0x00;
		temp_data[++cyc_flag_acc]=0x01;
		temp_data[++cyc_flag_acc]=0x00;
		temp_data[++cyc_flag_acc]=dat_ptr->s_no[2];
		temp_data[++cyc_flag_acc]=dat_ptr->s_no[1];
		temp_data[++cyc_flag_acc]=dat_ptr->s_no[0];
		temp_data[++cyc_flag_acc]=dat_ptr->s_base[3];
		temp_data[++cyc_flag_acc]=dat_ptr->s_base[2];
		temp_data[++cyc_flag_acc]=dat_ptr->s_base[1];
		temp_data[++cyc_flag_acc]=dat_ptr->s_base[0];
		temp_data[++cyc_flag_acc]=dat_ptr->s_base2[3];
		temp_data[++cyc_flag_acc]=dat_ptr->s_base2[2];
		temp_data[++cyc_flag_acc]=dat_ptr->s_base2[1];
		temp_data[++cyc_flag_acc]=dat_ptr->s_base2[0];
		temp_data[++cyc_flag_acc]=dat_ptr->s_base4[3];
		temp_data[++cyc_flag_acc]=dat_ptr->s_base4[2];
		temp_data[++cyc_flag_acc]=dat_ptr->s_base4[1];
		temp_data[++cyc_flag_acc]=dat_ptr->s_base4[0];
		//P1=0xF4;P1=0xF1;
		//qwe
	}
	// 数据发送
	if(cyc_flag_acc%0xFF==0)
	{bn=cyc_flag_acc/0xFF;}
	else
	{bn=cyc_flag_acc/0xFF+1;}
	for(cyc_flag=0;cyc_flag<bn-1;cyc_flag++)
	{
		ledstm(0xd7);
		//P1=0xF4;P1=0xF1;
		//qwe
		txdbyte(0xEA);
		txdbyte(0xEA);
		txdbyte(char_temp + 0x20);
		txdbyte(carr_svr_name[1]);
		txdbyte(carr_svr_name[0]);
		txdbyte(0xFF);
		info_check=0x02F3 + carr_svr_name[0] + carr_svr_name[1] + char_temp;
		for(num_cyc=0;num_cyc<0xFF;num_cyc++)
		{
			//P1=0xF4;P1=0xF1;
			//qwe
			txdbyte(temp_data[255 * cyc_flag + num_cyc]);
			info_check+=temp_data[255 * cyc_flag + num_cyc];
		}
		txdbyte(bn-cyc_flag);
		info_check+=bn-cyc_flag;
		txdbyte(0x00);
		txdbyte(info_check%0x0100);
		txdbyte(info_check/0x0100);
		txdbyte(0xDD);
		ledstm(0xf7);
		//等待应答 EA EA 00 00 40 00 00 00 14 02 DD 
		//RI=0;
		ysrxd=60;cush_char=0x00;
		while(ysrxd)									// 开始接收信息包
		{
			//if(RI==1)
			if((rUTRSTAT0&0x1)==1)
			{
				//cush_char=SBUF;
				cush_char=rURXH0;
				if(cush_char==0xEA)break;
				//RI=0;
			}
			//P1=0xf4; P1=0xff;
			//qwe
		}
		if(cush_char==0xEA)
		{
			ledstm(0xe7);
			ys(0x01);
			ledstm(0xf7);
		}
		else
		{return(0);}
	}
	ledstm(0xd7);
	if(cyc_flag_acc % 0x100==0)
	{
		txdbyte(0xEA);
		txdbyte(0xEA);
		txdbyte(char_temp);
		txdbyte(carr_svr_name[1]);
		txdbyte(carr_svr_name[0]);
		txdbyte(0xFF);
		info_check=0x02D3 + carr_svr_name[0] + carr_svr_name[1]  + char_temp;
		for(num_cyc=0;num_cyc<0xFF;num_cyc++)
		{
			//P1=0xF4;P1=0xF1;
			//qwe
			txdbyte(temp_data[255 * cyc_flag + num_cyc]);
			info_check+=temp_data[255 * cyc_flag + num_cyc];
		}
		txdbyte(0x01);
		info_check+=0x01;
		txdbyte(0x00);
		txdbyte(info_check%0x0100);
		txdbyte(info_check/0x0100);
		txdbyte(0xDD);
	}
	else
	{
		txdbyte(0xEA);
		txdbyte(0xEA);
		txdbyte(char_temp);
		txdbyte(carr_svr_name[1]);
		txdbyte(carr_svr_name[0]);
		txdbyte(0xFF);
		info_check=0x02D3 + carr_svr_name[0] + carr_svr_name[1]  + char_temp;
		for(num_cyc=0;num_cyc<=(cyc_flag_acc % 0xFF);num_cyc++)
		{
			//P1=0xF4;P1=0xF1;
			//qwe
			txdbyte(temp_data[255 * cyc_flag + num_cyc]);
			info_check+=temp_data[255 * cyc_flag + num_cyc];
		}
		for(;num_cyc<0xFF;num_cyc++)
		{
			//P1=0xF4;P1=0xF1;
			//qwe
			txdbyte(0xFF);
			info_check+=0xFF;
		}
		txdbyte(0x01);
		info_check+=0x01;
		txdbyte(0x00);
		txdbyte(info_check%0x0100);
		txdbyte(info_check/0x0100);
		txdbyte(0xDD);
	}
	ledstm(0xf7);
	ysrxd=30;
	while(ysrxd)
	{//P1=0xF4;P1=0xF1;
	//qwe
	}
	return(0);
}
U16 loaddata(void)
{
//	uint data cyc_flag,info_check;						// 循环标识,信息包校验标识
//	uchar xdata *pm;									// 地址指针
//	pm=(unsigned char xdata *)(JZQ_ADD);  				// 取指针地址
	return(0);
}

void plmrxd(void)
{
	//uint data rev_falg_num,ass_flag;					// 串口接收标识位,辅助标识符
	U16 rev_falg_num,ass_flag;					// 串口接收标识位,辅助标识符
	//uint data cyc_flag,info_check,send_num;				// 循环标识,信息包校验标识,发送字节数
	U16 cyc_flag,info_check,send_num;				// 循环标识,信息包校验标识,发送字节数
	//uchar data time;									// 12秒标识符
	uchar time;									// 12秒标识符
	//uchar data cush_char,begin_rev_flag;				// 串口字符缓存,接收信息包标识
	uchar cush_char,begin_rev_flag;				// 串口字符缓存,接收信息包标识

⌨️ 快捷键说明

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