📄 lna3.c.bak
字号:
}
else if (receive_buf[8]==0x02)//查询所有频率值
{
buf=Query_tp(freqd,0x02);
}
else if (receive_buf[8]==0x03)//查询所有温补参数编码
{
buf=Query_csd(1,tn);
}
else if (receive_buf[8]==0x04)//查询所有频补参数编码
{
buf=Query_csd(2,pn);
}
else if (receive_buf[8]==0x05)//查询所有标称值参数编码
{
buf=Query_csd(3,zyn);
}
else if (receive_buf[8]==0x06)//查询所有温补参数表内容
{
buf=Query_cszd(tempcszd,tn);
}
else if (receive_buf[8]==0x07)//查询所有频补参数表内容
{
buf=Query_cszd(freqcszd,pn);
}
else if (receive_buf[8]==0x08)//查询所有标称值参数表内容
{
buf=Query_cszd(bczcszd,zyn);
}
send_reply_flag(0x00,buf);
goto go_return;
}
else if(receive_buf[5]==0xd2)//设置表格参数
{
if (receive_buf[8]==0x01)//设置所有温度值
{
buf=Set_tp(tempd);
}
else if (receive_buf[8]==0x02)//设置所有频率值
{
buf=Set_tp(freqd);
}
else if (receive_buf[8]==0x06)//设置所有温补参数表内容
{
buf =Set_cszd(tempcszd,tn);
}
else if (receive_buf[8]==0x07)//设置所有频补参数表内容
{
buf =Set_cszd(freqcszd,pn);
}
else if (receive_buf[8]==0x08)//设置所有标称值参数表内容
{
buf =Set_cszd(bczcszd,zyn);
}
send_reply_flag(0x00,buf);
goto go_return;
}
else
{
send_reply_flag(0x09,0x00); //命令编号错
goto go_return;
}
}
else if(receive_over == 0 && receive_time_on == 1)
{
if(receive_time_count >= 200)
{
headend_flag=0x00;
tran_flag=0x00;//转义标志,=0为没有转义,=1为转义过了
receive_time_on = 0;
receive_time_count = 0;
receive_free();
receive_cnt = 0x00;
CREN = 1;
RCIE = 1;
return;
}
else
{
receive_time_count++;
return;
}
}
// T1CON=0x31;
return;
go_return:
headend_flag=0x00;
tran_flag=0x00;//转义标志,=0为没有转义,=1为转义过了
receive_free();
receive_over = 0;
receive_cnt = 0;
CREN = 1;
RCIE = 1;
// T1CON=0x31;
return;
}
/**********************************************************
** 功能说明: 基本数据查询函数
** 输入参数: 无
** 输出参数:
** 返 回 值: 参数个数
** 引用函数:
** 创 建 人: 陈璐 创建时间:2005/12/12
*********************************************************/
uchar Query_Basic_Parameter()
{
uchar buf;
uchar i ;
uint j ;
j = 0x0700;
buf=receive_buf[8];//BUF为上位机下传的第几包数据;命令体的第1个字节为我应传给上位机第几包数据
receive_buf[8]=2;//PIC需上传总包数为2包;所以命令体的第1个字节变成了总包数.
if(buf==1)
{
receive_buf[9]=1;//表示PIC发送第1包数据
for(i=0; i<44; i++)
{
receive_buf[i+10] = basic_table[i];
}
return 46;
}
else if(buf==2)//
{
receive_buf[9]=2;//表示PIC发送第2包数据
for(i=0; i<37; i++)
{
receive_buf[i+10] = rrom(j + i);
}
return 39;
}
else
{
return 0;
}
}
/**********************************************************
** 功能说明: 基本信息参数设置函数
** 输入参数: 无
** 输出参数:
** 返 回 值: 参数个数
** 引用函数:
** 创 建 人: 陈璐 创建时间:2006/01/11
*********************************************************/
uchar Set_Basic_Parameter()
{
auto union buf_union comm;
uint i;
uchar length;
uchar buf;
uchar *P = 0;
length = receive_buf[7];
P = receive_buf+8;
erro = 0;
while(length)
{
comm.buf2[0] = *P++;
comm.buf2[1] = *P++;
length = length - 2 ;
switch(comm.buf1)
{
case 0xf000: //模块ID号
for(i=0;i<10;i++)
{
buf=*P++;
// dog();
wrom(mod_idadd+2+i,buf);
}
length=length-10;
break;
case 0xf002: Prmter1.ADDR=*P++ ;//模块地址
wrom(mod_add_add+2,Prmter1.ADDR);
length--;
break;
case 0xf019: //生产序列号
for(i=0;i<20;i++)
{
buf=*P++;
// dog();
wrom(product_add+2+i,buf);
}
length=length-20;
break;
default: receive_buf[9] = *--P;
receive_buf[8] = *--P;
erro = erro | 0x02;
length = 0;
break;//特殊处理
}
}
if(erro & 0x02)
{
length = 2;//设置参数失败
}
else
{
length = receive_buf[7];
}
return length;
}
/**********************************************************
** 功能说明: 参数地址查询函数
** 输入参数: 无
** 输出参数:
** 返 回 值: 参数个数
** 引用函数:
** 创 建 人: 陈璐 创建时间:2005/01/11
*********************************************************/
uchar Query_Address()
{
uchar i,buf;
uchar length;
buf = receive_buf[8];
switch(buf)
{
case 1: for(i=0; i<Para_Num; i++)
{
receive_buf[i+8]= Para_Num_Conf[i];
length = Para_Num;
}
break;
default: receive_buf[8] = buf;
length = 1;
break;
}
return length;
}
/**********************************************************
** 功能说明: 增益实际值补偿函数(校准值)
** 输入参数: attin 类型:uchar :标称值
attnb 类型:uchar :=1,代表第1个增益,=2,代表第2个增益等
** 输出参数:
** 返 回 值: 无
** 引用函数:
** 创 建 人: 陈璐 创建时间:2005/06/09
*********************************************************/
uchar ATTBU(char attin,uchar attnb)
{
uchar i;
uchar buf;
//buf=attin;//如果比较没有结果,则返回标称值原值
buf=0;//如果比较没有结果,则返回0
for (i=0;i<bcnumb;i++)
{
B[0]=rrom(bczcszd+zyn*i+attnb-1);//参数值首地址+偏置
if (attin==i)
{
//buf=B[0]+buf4;
buf=B[0];
break;
}
}
B[0]=0;
return buf;
}
/**********************************************************
** 功能说明: 频响实际值补偿函数(其实是增益补偿)DB/2
关于频率值计算,设信道号为X,频点宽为100K,二分频,则频率值=信道0时频率值+信道×0.025
** 输入参数: freqin 类型:uchar :信道值
freqnb 类型:uchar :代表第几个本振器件。
** 输出参数:
** 返 回 值: 频响补偿实际值 buf,如果返回值为0,则为没有补偿值
** 引用函数:
** 创 建 人: 陈璐 创建时间:2005/06/07
*********************************************************/
uchar FREQBU(uchar freqin,uchar freqnb)
{
uchar i;
uchar buf;
uchar P[2];//EEPROM中信道值1byte
buf=0;//如果比较没有结果,则返回0
for (i=0;i<fnumb;i++)//频率
{
P[0]=rrom(freqd+i);
if (i<(fnumb-1))
{
P[1]=rrom(freqd+i+1);
}
else
{
P[1]=P[0];
}
if (freqin==P[0])
{
B[0]=rrom(freqcszd+pn*i+freqnb-1);
buf=B[0];
break;
}
else if((freqin>P[0])&&(freqin<P[1]))
{
B[0]=rrom(freqcszd+pn*i+freqnb-1);
B[1]=rrom(freqcszd+pn*(i+1)+freqnb-1);
if (B[1]>B[0])
{
B[2]=B[0]+(((B[1]-B[0])*(freqin-P[0]))/(P[1]-P[0]));
}
else
{
B[2]=B[0]-(((B[0]-B[1])*(freqin-P[0]))/(P[1]-P[0]));
}
buf=B[2];
break;
}
}
return buf;
}
/**********************************************************
** 功能说明: 温度补偿函数(温补参数占1个字节,补偿电压为mV单位,增益为DB/2单位等)
** 输入参数: // buf3 类型:uchar :buf3=1,表示温补参数占1个字节;buf3=2,表示温补参数占2个字节
tempnb 类型:uchar :在温补表中是第几个参数,=1,是第1个参数;=2,第2个参数
// buf7 类型:uchar :在tn中参数是第几个字节开始的参数
// buff: 类型:uchar :=0:温度补偿函数是△值,=1:温度补偿函数是实际值
** 输出参数:
** 返 回 值: 无
** 引用函数:
** 创 建 人: 陈璐 创建时间:2005/06/09
*********************************************************/
uchar TEMP(uchar tempnb)
{
uchar i;
uchar buf;
char T[2];//EEPROM?D???è?μ
uchar buff;
uchar buf1;
uchar buf2;
uchar buf3;
buf=0;//è?1?±è????óD?á1?£??ò·μ??0
buf3=0;
for (i=0;i<tpnumb;i++)
{
dog();
T[0]=rrom(tempd+i);
if(i<tpnumb-1)
{
T[1]=rrom(tempd+i+1);
}
else
{
T[1]=T[0];
}
if (Prmter1.TEMP==T[0])
{
B[0]=rrom(tempcszd+tn*i+tempnb-1);
buf=B[0];
break;
}
if ((Prmter1.TEMP>T[0])&&(Prmter1.TEMP<T[1]))
{
buf3=1;
}
if ((Prmter1.TEMP>T[0])&&(Prmter1.TEMP>T[1])&&(T[1]<0x80)&&(T[0]>0x80))
{
buf3=1;
}
if(buf3==1)
{
B[0]=rrom(tempcszd+tn*i+tempnb-1);
B[1]=rrom(tempcszd+tn*(i+1)+tempnb-1);
buff=B[1]-B[0];
if (buff<0x80)
{
buf1=(Prmter1.TEMP-T[0]);
buf2=T[1]-T[0];
buf1=(B[1]-B[0])*buf1;
buf1=buf1/buf2;
buf1=buf1;
B[2]=B[0]+buf1;
}
else
{
buf1=(Prmter1.TEMP-T[0]);
buf2=T[1]-T[0];
buf1=(B[0]-B[1])*buf1;
buf1=buf1/buf2;
buf1=buf1;
B[2]=B[0]-buf1;
}
buf=B[2];
break;
}
}
return buf;
}
/**********************************************************
** 功能说明: 增益校准函数
** 输入参数: 无
** 输出参数:
** 返 回 值: 参数个数
** 引用函数:
** 创 建 人: 陈璐 创建时间:2005/01/11
*********************************************************/
void gcu_jz()
{
char GCU1JZ;//增益1的温补
char GCU2JZ;//增益2的温补
char GCU1ACT;//增益1的标称值补偿
char GCU2ACT;//增益2的标称值补偿
GCU1JZ=TEMP(1);//增益1的温度补偿(校准值)
GCU2JZ=TEMP(2);//增益2的温度补偿(校准值)
GCU1ACT=ATTBU(Prmter1.GCU1,1);//增益1的标称值补偿(校准值)
GCU2ACT=ATTBU(Prmter1.GCU2,2);//增益2的标称值补偿(校准值)
GCU1JZ=GCU1JZ+GCU1ACT;//增益1的温补+标称值补偿
GCU2JZ=GCU2JZ+GCU2ACT;//增益1的温补+标称值补偿
//if (GCU1JZ<0)
//{
// GCU1JZ=0;
//}
//if (GCU2JZ>=0x80)
//{
// GCU2JZ=0;
//}
sumgcu=Prmter1.GCU1+Prmter1.GCU2;
if (sumgcu<=10)
{
gcu_ctl(0x00,(sumgcu+GCU1JZ));
gcu_ctl(0x01,GCU2JZ);
}
else if ((sumgcu>10) &&(sumgcu<=20))
{
gcu_ctl(0x00,(10+GCU1JZ));
gcu_ctl(0x01,(sumgcu-10+GCU2JZ));
}
else if ((sumgcu>20) &&(sumgcu<=25 ))
{
gcu_ctl(0x00,(sumgcu-10+GCU1JZ));
gcu_ctl(0x01,(10+GCU2JZ));
}
else if(sumgcu>25)
{
gcu_ctl(0x00,(15+GCU1JZ));
gcu_ctl(0x01,(sumgcu-15+GCU2JZ));
}
}
/**********************************************************
** 功能说明: 参数设置函数
** 输入参数: 无
** 输出参数:
** 返 回 值: 参数个数
** 引用函数:
** 创 建 人: 陈璐 创建时间:2005/01/11
*********************************************************/
uchar Set_Parameter()
{
auto union buf_union comm;
uchar length;
uchar *P = 0;
// uchar buff;
uchar buf;
// erro=0;
length = receive_buf[7];
P = receive_buf+8;
while(length)
{
comm.buf2[0] = *P++;
comm.buf2[1] = *P++;
length = length - 2 ;
switch(comm.buf1)
{
case maxpwr: Prmter1.max = *P++;
wrom(maxpwradd,Prmter1.max);
buf=Prmter1.max+Prmter1.POFFSET2;
if(buf>=0x80)
{
buf=256-buf;
Prmter1.maxu =250-buf * 5;
}
else if(buf<0x80)
{
Prmter1.maxu =buf * 5+250;
}
// buff=rrom(maxpwradd);
// if(buff!=Prmter1.max)
// {
// wrom(maxpwradd,Prmter1.max);
// }
length--;
wrom(maxpuadd,Prmter1.maxu);
DAC(1,Prmter1.maxu);
break;
case maxpu: Prmter1.maxu = *P++;
wrom(maxpuadd,Prmter1.maxu);
// buff=rrom(maxpuadd);
// if(buff!=Prmter1.maxu)
// {
// wrom(maxpuadd,Prmter1.maxu);
// }
P++;
length=length-2;
DAC(1,Prmter1.maxu);
Prmter1.max =Prmter1.maxu/5-50-Prmter1.POFFSET2;
wrom(maxpwradd,Prmter1.max);
break;
case gcu1: Prmter1.GCU1 = *P++;
wrom(gcu1add,Prmter1.GCU1);
// buff=rrom(gcu1add);
// if(buff!=Prmter1.GCU1)
// {
// wrom(gcu1add,Prmter1.GCU1);
// }
length--;
gcu_jz();
break;
case gcu2: Prmter1.GCU2 = *P++;
wrom(gcu2add,Prmter1.GCU2);
// buff=rrom(gcu2add);
// if(buff!=Prmter1.GCU2)
// {
// wrom(gcu2add,Prmter1.GCU2);
// }
length--;
gcu_jz();
break;
case poffset1: Prmter1.POFFSET1=*P++ ;
wrom(poff1add,Prmter1.POFFSET1);
// buff=rrom(poff1add);
// if(buff!=Prmter1.POFFSET1)
// {
// wrom(poff1add,Prmter1.POFFSET1);
// }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -