📄 main_zkf.c
字号:
void Calculate(void)
{
//eeprom_write(0,1);
//eeprom_read(0);
}
//////////////////////衰减函数///////
void Att(unsigned char channel, unsigned char data)
{
if (channel==1||channel==2||channel==3)//上行
{
SendPortD (control_att_up,data);
}
else if (channel==0||channel==4||channel==5||channel==6)//下行
{
SendPortD (control_att_dn,data);
}
}
void SendPortD(unsigned char control_choice,unsigned char data) //FPGA与CPU之间的一般数据传递
{
PORTD=control_choice|(data<<3);
}
///////////////串口接收处理///////////////
void uart_rec_process (void)// 模拟发送设置数据包0x7E,0x03,0xff, 0x01, 0x04,0x44,0x00,Forward_dn,0x7E
{ // 模拟发送查询数据包0x7E,0x02,0xff, 0x01, 0x04,0x44,0x00,Forward_dn,0x7E
unsigned int n;
if(RC_flag ==1) //串口接收中断处理结束
{
RC_flag = 0;
if(package_data_count == 0)
{
if(uart_rec_data[0]==0x7E) //开始数据包
{
package_data_count = 1;
uart_send_data[8] = uart_rec_data[0];
}
else
{
package_data_count = 0;
uart_send_data[8] =0;
}
}
else if(package_data_count == 1)
{
if(uart_rec_data[0]==0x02) //即出现1xxxxxxx,对本系统的读操作,即查询
{
r_w = 1; //对本系统读标志
uart_send_data[7] =uart_rec_data[0];
package_data_count ++;
}
else if (uart_rec_data[0]==0x03) //设置
{
r_w = 0; //对本系统写标志
uart_send_data[7] =uart_rec_data[0];
package_data_count ++;
}
else
{
package_data_count = 0;
uart_send_data[7]=0;
r_w = 0xff;
}
}
else if(package_data_count == 2)
{
if((uart_rec_data[0]==0xFF)&&(r_w==0))
{
//uart_send_data[6] =0;
package_data_count ++;
}
else if((uart_rec_data[0]==0xFF)&&(r_w==1)) //上位机读取时也是FF
{
//uart_send_data[6] =0;
package_data_count ++;
}
else
{
package_data_count = 0;
uart_send_data[6] =0xaa;
}
}
else if(package_data_count == 3)
{
data_width = uart_rec_data[0];
uart_send_data[5] =uart_rec_data[0]; //记住数据字节数
if(data_width > 2)
{
uart_send_data[6] =0xaa; //操作字节数超支
data_width = 0;
}
package_data_count ++;
}
else if((package_data_count == 4)||(package_data_count == 5))
{
package_data_count++;
uart_send_data[9-package_data_count]= uart_rec_data[0];
}
/*////////////////////////////----------------((package_data_count == 6) ||(package_data_count == 7))开始-----------------///////////////////////////////////*/
else if((package_data_count == 6) ||(package_data_count == 7))
{
package_data_count++;
/*////////////////////////////----------------读开始-----------------///////////////////////////////////*/
if(r_w==1) //读
{
////////////这里是Forward_dn开始///////////////////
if((uart_send_data[4]==0x04)&&(uart_send_data[3]==0x44))
{
uart_send_data[2]= 0;
uart_send_data[1]= Forward_dn; //只有一个字节的高位为全0
address_right= 1;
}
//////////////////////这里是Forward_dn截止////////////////
////////////这里是Backward_dn开始///////////////////
else if((uart_send_data[4]==0x04)&&(uart_send_data[3]==0x45))
{
uart_send_data[2]= 0;
uart_send_data[1]= Backward_dn; //只有一个字节的高位为全0
address_right= 1;
}
//////////////////////这里是Backward_dn截止////////////////
////////////这里是控制上下行通道关闭开始///////////////////
else if((uart_send_data[4]==0x04)&&(uart_send_data[3]==0x46))
{
uart_send_data[2]= 0;
uart_send_data[1]= switch_in_shut; //只有一个字节的高位为全0
address_right= 1;
}
//////////////////////这里是控制上下行通道关闭截止////////////////
else
{
address_right= 0; //读取数据地址错误
}
}//(r_w==1) //读
/*////////////////////////////----------------读结束-----------------///////////////////////////////////*/
/*////////////////////////////----------------写开始-----------------///////////////////////////////////*/
else if(r_w==0) //写
{
uart_send_data[9-package_data_count]=uart_rec_data[0]; //只有一个字节的高位为全0
setup_data[8-package_data_count]=uart_rec_data[0];
////////////这里是Forward_dn开始///////////////////
if((uart_send_data[4]==0x04)&&(uart_send_data[3]==0x44))
{
if(package_data_count == 7)
eeprom_write(0x19,0); //写入E2PROM
else if(package_data_count==8)
{
eeprom_write(0x19,uart_rec_data[0]); //写入E2PROM
Forward_dn= eeprom_read(0x19);
if(Forward_dn == uart_rec_data[0])
{
uart_send_data[6] =0;
SendPortD (control_bias,Forward_dn);
}
else
{
uart_send_data[6] =0xaa;
}
}
address_right= 1;
}
//////////////////////这里是Forward_dn截止////////////////
////////////这里是Backward_dn开始///////////////////
else if((uart_send_data[4]==0x04)&&(uart_send_data[3]==0x45))
{
if(package_data_count == 7)
eeprom_write(0x20,0); //写入E2PROM
else if(package_data_count==8)
{
eeprom_write(0x20,uart_rec_data[0]); //写入E2PROM
Forward_dn= eeprom_read(0x20);
if(Forward_dn == uart_rec_data[0])
{
uart_send_data[6] =0;
SendPortD (control_backward_bias,Backward_dn);
}
else
{
uart_send_data[6] =0xaa;
}
}
address_right= 1;
}
//////////////////////这里是Backward_dn截止////////////////
////////////这里是控制上下行通道关闭开始///////////////////
else if((uart_send_data[4]==0x04)&&(uart_send_data[3]==0x46))
{
if(package_data_count == 7)
eeprom_write(0x21,0); //写入E2PROM
else if(package_data_count==8)
{
eeprom_write(0x20,uart_rec_data[0]); //写入E2PROM
switch_in_shut= eeprom_read(0x21);
if((switch_in_shut == uart_rec_data[0])&&((switch_in_shut == 0x00)||(switch_in_shut == 0xff)))
{
uart_send_data[6] =0;
SendPortD (control_no_detect,switch_in_shut);
}
else
{
uart_send_data[6] =0xaa;
}
}
address_right= 1;
}
//////////////////////这里是控制上下行通道关闭截止////////////////
else
{
address_right = 0; //写入数据地址错误
}
} //(r_w==0) //写
/*////////////////////////////----------------写结束-----------------///////////////////////////////////*/
} //(package_data_count == 6) ||(package_data_count == 7)
/*////////////////////////////----------------((package_data_count == 6) ||(package_data_count == 7))结束-----------------///////////////////////////////////*/
else if(package_data_count == 8)
{
if(uart_rec_data[0]==0x7E) //结束数据包
{
uart_send_data[0] = 0x7E;
}
else
{
uart_send_data[6] =0xaa;
uart_send_data[0] = 0x7E;
}
for(n=0;n<9;n++)//p[n]!=0xff;n++)
{
while (TX1IF== 0); // TXIF=0表示发送缓冲区不为空
TXREG1 = uart_send_data[8-n];
}
while (TX1IF== 0); // TXIF=0表示发送缓冲区不为空
package_data_count = 0;
}
while (TX1IF== 0); //Only for test
TXREG1=package_data_count; //Only for test
while (TX1IF== 0); //Only for test
} // if(RC1IF==0)
}
/******************************需要设置的参量**********************************************/
//同步开关前沿量(前沿提前量) Forward_dn,读写整数(1)
//同步开关后沿量 (后沿延时量)Backward_dn,读写整数(1)
//下行输出过功率门限(启控电平 下行输出) Ts0_threhold,Ts4_threhold,Ts5_threhold,Ts6_threhold,读写有符号整数(2)
//上行输出过功率门限 (启控电平 上行输出)Ts1_threhold,Ts2_threhold,Ts3_threhold,读写有符号整数(2)
//
//上行人为衰减(上行衰减)Att_manual_up,读写整数(1)
//下行人为衰减(下行衰减)Att_manual_dn,读写整数(1)
//
//启动门限量 Open_threhold_dn,浮点数 ,读写(单位伏特)
//
//末级功放偏压 A1,A2,B1,B2, 写(滑条)浮点数
//
//末级功放偏压显示 A1_latch,A2_latch,B1_latch,B2_latch, 读(数据框)浮点数
//下行输入功率电平:Ts0_latch, Ts4_latch,Ts5_latch,Ts6_latch,只读有符号整数(2)
//下行输出功率电平:Ts0_out_latch, Ts4_out_latch,Ts5_out_latch,Ts6_out_latch,只读有符号整数(2)
//上行输入功率电平:Ts1_latch, Ts2_latch,Ts3_latch,只读有符号整数(2)
//上行输出功率电平:Ts1_out_latch, Ts2_out_latch,Ts3_out_latch,只读有符号整数(2)
//
//下行实际增益 Gain_dn,只读浮点数
//下行驻波比值 SW_latch,只读浮点数
//
//电源电压 只读浮点数 (单位伏特)
//环境温度 只读浮点数
//末级温度 只读浮点数
/****************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -