📄 uart.c
字号:
#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 + -