📄 uart.c
字号:
while(*SCICTL2&0x0080==0);
*SCITXBUF=0x16;
Delay(5000);
}
/****************************************************/
/*函数功能:接收桢数据中的有用数据体*/
/****************************************************/
void Re_Copy(void)
{
uint temp,i;
temp=rece_long[1]*256+rece_long[0];
receive_temp[copy_count]=receive[serial_count];
copy_count++;
if(copy_count>=temp)
{
rece_data1_flag=0;
rece_cs_flag=1;
copy_count=0;
}
}
void Deal_serial(void)
{
uint temp;
if(rece_begain_flag==1)
{
if(receive[serial_count]==0x68)
{
rece_addr1_flag=1;
rece_begain_flag=0;
}
}
else if(rece_addr1_flag==1)
{
rece_addr[0]=receive[serial_count];
rece_addr1_flag=0;
rece_addr2_flag=1;
}
else if(rece_addr2_flag==1)
{
rece_addr[1]=receive[serial_count]; /*低字节在前,高字节在后*/
temp=rece_addr[1]*256+rece_addr[0];
if(temp==up3_data.set_shuju[1]||temp==22222)rece_addr2_flag=0;
else rece_begain_flag=1;
rece_enable_flag=1;
}
else if(rece_enable_flag==1)
{
if(receive[serial_count]==0x68)
{
rece_enable_flag=0;
rece_con1_flag=1;
}
else{ rece_begain_flag=1;rece_enable_flag=0;}
}
else if(rece_con1_flag==1)
{
rece_con[0]=receive[serial_count];
rece_con1_flag=0;
rece_con2_flag=1;
}
else if(rece_con2_flag==1)
{
rece_con[1]=receive[serial_count];
switch(rece_con[0])
{
case 0x0a1:if(rece_con[1]==0x01) /*读参数*/
{
read_set_flag=1;
rece_con2_flag=0;
rece_l1_flag=1;
}
else
{
rece_con2_flag=0;
rece_begain_flag=1; /*重新接收新数据*/
}
break;
case 0x0a2:if(rece_con[1]==0x01) /*设置参数*/
{
write_set_flag=1;
rece_con2_flag=0;
rece_l1_flag=1;
}
else
{
rece_con2_flag=0;
rece_begain_flag=1; /*重新接收新数据*/
}
break;
case 0x0a3:if(rece_con[1]==0x01) /*遥控投切*/
{
write_control_flag=1;
rece_con2_flag=0;
rece_l1_flag=1;
}
else
{
rece_con2_flag=0;
rece_begain_flag=1; /*重新接收新数据*/
}
break;
case 0x0a4:if(rece_con[1]==0x01) /*读实时数据*/
{
read_ss_flag=1;
rece_con2_flag=0;
rece_l1_flag=1;
}
else
{
rece_con2_flag=0;
rece_begain_flag=1; /*重新接收新数据*/
}
break;
case 0x99:if(rece_con[1]==0x01) /*调整比例系数*/
{
wr_bl_flag=1;
rece_con2_flag=0;
rece_l1_flag=1;
}
else
{
rece_con2_flag=0;
rece_begain_flag=1; /*重新接收新数据*/
}
break;
case 0x0af:if(rece_con[1]==0x01) /*广播校时*/
{
wr_time_flag=1;
rece_con2_flag=0;
rece_l1_flag=1;
}
else
{
rece_con2_flag=0;
rece_begain_flag=1;
}
break;
case 0x0a8:if(rece_con[1]==0x01)
{
set_power_flag=1; /*更改电量表底*/
rece_con2_flag=0;
rece_l1_flag=1;
}
else
{
rece_con2_flag=0;
rece_begain_flag=1;
}
break;
case 0x0a5:rece_l1_flag=1; /*整点数据*/
read_zd_flag=1;
rece_con2_flag=0;
break;
case 0x0a6:rece_l1_flag=1; /*统计数据*/
read_tj_flag=1;
rece_con2_flag=0;
break;
case 0x0a7:rece_l1_flag=1; /*事件记录*/
read_td_flag=1;
rece_con2_flag=0;
break;
case 0x0ae: /*初始化数据区*/
chushihua=1;
rece_l1_flag=1;
rece_con2_flag=0;
break;
default: rece_con2_flag=0; /*返回重新接收*/
rece_begain_flag=1;
break;
}
}
else if(rece_l1_flag==1)
{
rece_long[0]=receive[serial_count];
rece_l1_flag=0;
rece_l2_flag=1;
}
else if(rece_l2_flag==1)
{
rece_long[1]=receive[serial_count];
temp=rece_long[1]*256+rece_long[0];
if(temp==0)
{
rece_l2_flag=0;
rece_cs_flag=1;
}
else
{
rece_l2_flag=0;
rece_data1_flag=1;
}
}
else if(rece_data1_flag==1)
{
Re_Copy();
}
else if(rece_cs_flag==1)
{
rece_cs_flag=0;
rece_end_flag=1;
}
else if(rece_end_flag==1)
{
if(receive[serial_count]=0x16)
{
rece_fin_flag=1;
rece_end_flag=0;
}
else {rece_begain_flag=1;rece_end_flag=0;}
}
}
void uart(void)
{
uint i,record;
record=p_day%2;
if(rece_flag==1)
{
Deal_serial();
serial_count++;
if(serial_count>999)serial_count=0;
if(serial_count==rece_count)rece_flag=0;
if(rece_fin_flag==1)
{
if(read_set_flag==1){Send_Set();Uart_Send(send_data,54);read_set_flag=0;}
if(write_set_flag==1){Send_WriteSet();Uart_Send(send_data,10);Save_Pcset();write_set_flag=0;}
if(wr_bl_flag==1){Send_Blset();Uart_Send(send_data,8);wr_bl_flag=0;}
if(write_control_flag==1){Send_Control();Uart_Send(send_data,10);write_control_flag=0;}
if(read_ss_flag==1){Send_Ss();Uart_Send(send_data,104);read_ss_flag=0;}
if(wr_time_flag==1)
{
for(i=0;i<6;i++)timer[i]=receive_temp[i];
Write_Time();
wr_time_flag=0;
}
if(read_zd_flag==1)
{
Send_Zd();
Uart_Send(send_data,731);
read_zd_flag=0;
}
if(read_tj_flag==1)
{
Send_Tj();
Uart_Send(send_data,163);
read_tj_flag=0;
}
if(read_td_flag==1)
{
Send_Td();
Uart_Send(send_data,268);
read_td_flag=0;
}
if(chushihua==1)
{
chushihua=0;
Send_ChuSH();
Uart_Send(send_data,10);
for(i=0;i<200;i++)
flash_buffer[i]=0;
for(i=0;i<1600;i++)
Write_Flash((i+4),0,flash_buffer,200);
Write_Flash(1,0,flash_buffer,1);
}
if(set_power_flag==1)
{
set_power_flag=0;
for(i=0;i<4;i++)
set_yg[i]=receive_temp[i];
for(i=0;i<4;i++)
set_wg[i]=receive_temp[i+4];
Write_Ram();
Send_Power();
Uart_Send(send_data,10);
}
rece_begain_flag=1;
rece_fin_flag=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -