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

📄 lna3.c.bak

📁 GSM低噪声放大器模块监控处理程序
💻 BAK
📖 第 1 页 / 共 4 页
字号:
			}
			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 + -