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

📄 uart.c

📁 基于AVR的一种程序,智能控制器,可用于低压无功补偿部分,
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "public.h"
#include "p_main.H"

/* LF2407.H 的外部变量 */
/*SCI串行口状态寄存器*/
extern  unsigned int  *SCICTL2;
/*SCI串行输出缓冲寄存器*/
extern unsigned int  *SCITXBUF;

extern unsigned int  *PEDATDIR;
extern unsigned int  *PFDATDIR;
/********************************************/
/**函数功能:排列读设置参数的返回桢***/
/********************************************/
void Send_Set(void)           /*排列设置参数*/
{
	uint i;	
	send_data[0]=0x68;
	send_data[1]=up3_data.set_shuju[1]&0x0ff;
	send_data[2]=up3_data.set_shuju[1]&0x0ff00;
	send_data[2]>>=8;
	send_data[3]=0x68;
	send_data[4]=0x91;
	send_data[5]=0x01;
	send_data[6]=0x2e;
	send_data[7]=0x00;
	for(i=0;i<19;i++)
	{
		send_data[2*i+8]=up3_data.set_shuju[i]&0x0ff;
		send_data[2*i+9]=up3_data.set_shuju[i]&0x0ff00;
		send_data[2*i+9]>>=8;
	}	
	send_data[46]=0x01;                      /*控制型号 6Y + 6J*/
	for(i=0;i<6;i++)
	send_data[47+i]=0x00;
	send_data[53]=0x30;
}
/********************************************/
/**函数功能:排列写比例系数数据的返回桢***/
/********************************************/
void Send_Blset(void)
{		
	uint i;
	send_data[0]=0x68;
	send_data[1]=up3_data.set_shuju[1]&0x0ff;
	send_data[2]=up3_data.set_shuju[1]&0x0ff00;
	send_data[2]>>=8;
	send_data[3]=0x68;
	send_data[4]=0x89;
	send_data[5]=0x01;
	send_data[6]=0x00;
	send_data[7]=0x00;	
	for(i=0;i<6;i++)
	bl_xishu[i]=receive_temp[2*i]+receive_temp[2*i+1]*256;	
	Write_Flash(3,0,receive_temp,12);
}

/********************************************/
/**函数功能:排列写初始化数据的返回桢***/
/********************************************/
void Send_ChuSH(void)
{		
	uint i;
	send_data[0]=0x68;
	send_data[1]=up3_data.set_shuju[1]&0x0ff;
	send_data[2]=up3_data.set_shuju[1]&0x0ff00;
	send_data[2]>>=8;
	send_data[3]=0x68;
	send_data[4]=0x9E;
	send_data[5]=0x01;
	send_data[6]=0x02;
	send_data[7]=0x00;		
	send_data[8]=0x00;
	send_data[9]=0x00;		
}

/********************************************/
/**函数功能:排列写电量表底数据的返回桢***/
/********************************************/
void Send_Power(void)
{		
	uint i;
	send_data[0]=0x68;
	send_data[1]=up3_data.set_shuju[1]&0x0ff;
	send_data[2]=up3_data.set_shuju[1]&0x0ff00;
	send_data[2]>>=8;
	send_data[3]=0x68;
	send_data[4]=0x98;
	send_data[5]=0x01;
	send_data[6]=0x02;
	send_data[7]=0x00;		
	send_data[8]=0x00;
	send_data[9]=0x00;	
}

/********************************************/
/**函数功能:排列写设置参数的返回桢***/
/********************************************/
void Send_WriteSet(void)
{		
	send_data[0]=0x68;
	send_data[1]=up3_data.set_shuju[1]&0x0ff;
	send_data[2]=up3_data.set_shuju[1]&0x0ff00;
	send_data[2]>>=8;
	send_data[3]=0x68;
	send_data[4]=0x92;
	send_data[5]=0x02;
	send_data[6]=0x02;
	send_data[7]=0x00;	
	send_data[8]=0x00;	
	send_data[9]=0x00;	
}

void Save_Pcset(void)
{
	uint i,temp_h,temp_l;
	for(i=0;i<19;i++)
	{
		temp_l=receive_temp[2*i]&0x0ff;
		temp_h=receive_temp[2*i+1]&0x0ff;
		up3_data.set_shuju[i]=temp_l+temp_h*256;
	}
	set_mm[0]=up3_data.set_shuju[0]%10;
	set_mm[1]=up3_data.set_shuju[0]/10%10;
	set_mm[2]=up3_data.set_shuju[0]/100%10;
	set_mm[3]=up3_data.set_shuju[0]/1000%10;
	set_id[0]=up3_data.set_shuju[1]%10;
  set_id[1]=up3_data.set_shuju[1]/10%10;		
	set_id[2]=up3_data.set_shuju[1]/100%10;
	set_id[3]=up3_data.set_shuju[1]/1000%10;
	Save_Set();		
}

/********************************************/
/**函数功能:排列写控制投切的返回桢***/
/********************************************/
void Send_Control(void)
{
	uint temp_l,temp_h;
	send_data[0]=0x68;
	send_data[1]=up3_data.set_shuju[1]&0x0ff;
	send_data[2]=up3_data.set_shuju[1]&0x0ff00;
	send_data[2]>>=8;
	send_data[3]=0x68;
	send_data[4]=0x93;
	send_data[5]=0x01;
	send_data[6]=0x02;
	send_data[7]=0x00;
	send_data[8]=receive_temp[0]&0x0ff;
	send_data[9]=receive_temp[1]&0x0ff;
	temp_l=receive_temp[0]&0x0ff;
	temp_h=receive_temp[1]&0x0f;
	up1_data.c_status=temp_l+temp_h*256;
	*PEDATDIR=*PEDATDIR|temp_l;    /*出口*/
	*PFDATDIR=*PFDATDIR|temp_h;	
}

/********************************************/
/**函数功能:排列读实时数据的返回桢***/
/********************************************/
void Send_Ss(void)
{
	uint i,j;	
	send_data[0]=0x68;
	send_data[1]=up3_data.set_shuju[1]&0x0ff;
	send_data[2]=up3_data.set_shuju[1]&0x0ff00;
	send_data[2]>>=8;
	send_data[3]=0x68;
	send_data[4]=0x94;
	send_data[5]=0x01;
	send_data[6]=0x60;
	send_data[7]=0x00;
	send_data[8]=p_year;
	send_data[9]=p_month;
	send_data[10]=p_day;
	send_data[11]=p_hour;
	send_data[12]=p_minute;
	send_data[13]=p_second;
	for(i=0;i<19;i++)
	{
		send_data[2*i+14]=*(&up1_data.avr_u[0]+i)&0x0ff;
		send_data[2*i+15]=*(&up1_data.avr_u[0]+i)&0x0ff00;
		send_data[2*i+15]>>=8;
	}	
	
	for(i=0;i<4;i++)send_data[52+i]=set_yg[i];      /*有功*/
	for(i=0;i<4;i++)send_data[56+i]=set_wg[i];      /*无功*/
	
	send_data[60]=err_state&0x0ff;                  /*故障状态*/
	i=err_state>>8;
	send_data[61]=i&0x0ff;
		
	for(j=0;j<6;j++)
	{
		for(i=0;i<6;i++)
			{
				send_data[i+6*j+62]=up2_data.avr_xb[j][2*i+1]&0x0ff;		
			}		
	}
		
	for(i=0;i<6;i++)
	send_data[98+i]=up2_data.avr_zxb[i];	
	
}

/********************************************/
/**函数功能:排列读整点数据的返回桢***/
/********************************************/
void Send_Zd(void)
{	
	uint i,temp,record;
	record=p_month%2;
	if(record==1)temp=(rece_con[1]+31)*25+1;
		else temp=rece_con[1]*25+1;
	
	send_data[0]=0x68;
	send_data[1]=up3_data.set_shuju[1]&0x0ff;
	send_data[2]=up3_data.set_shuju[1]&0x0ff00;
	send_data[2]>>=8;
	send_data[3]=0x68;
	send_data[4]=0x95;
	send_data[5]=rece_con[1];
	send_data[6]=0x0d3;
	send_data[7]=0x02;
	
	Read_Flash((temp+i),0,&send_data[8],33);
	
	for(i=0;i<23;i++)
		Read_Flash((temp+i+1),0,&send_data[41+i*30],30);	
		
}

/********************************************/
/**函数功能:排列读统计数据的返回桢***/
/********************************************/
void Send_Tj(void)
{
	uint temp,record;
	record=p_month%2;
	if(record==1)temp=(rece_con[1]+31)*25;
		else temp=rece_con[1]*25;
	
	send_data[0]=0x68;
	send_data[1]=up3_data.set_shuju[1]&0x0ff;
	send_data[2]=up3_data.set_shuju[1]&0x0ff00;
	send_data[2]>>=8;
	send_data[3]=0x68;
	send_data[4]=0x96;
	send_data[5]=rece_con[1];
	send_data[6]=0x9b;
	send_data[7]=0x00;	
	Read_Flash(temp,0,&send_data[8],155);
	
}

/********************************************/
/**函数功能:排列读停电数据的返回桢***/
/********************************************/
void Send_Td(void)
{
	uint i;		
	send_data[0]=0x68;
	send_data[1]=up3_data.set_shuju[1]&0x0ff;
	send_data[2]=up3_data.set_shuju[1]&0x0ff00;
	send_data[2]>>=8;
	send_data[3]=0x68;
	send_data[4]=0x97;
	send_data[5]=0x01;
	send_data[6]=0x04;
	send_data[7]=0x01;	
	for(i=0;i<20;i++)
	Read_Flash((4+i),0,&send_data[8+13*i],13);
	
}

void Uart_Send(uint *addr,uint num)
{   
	uint i,cs=0;
	for(i=0;i<num;i++)
	{						
			while(*SCICTL2&0x0080==0);
			cs+=*SCITXBUF=*(addr+i);	
			Delay(5000);			
	}	
	while(*SCICTL2&0x0080==0);
	*SCITXBUF=cs;	
	Delay(5000);			

⌨️ 快捷键说明

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