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

📄 main_zkf.c

📁 TD-SCDMA的工作原理,工作过程以及信号的形成
💻 C
📖 第 1 页 / 共 4 页
字号:
          	          	if(Att_value[4]>0)
          	             Att_value[4]--;  //第4时隙
          	         // Att_total_dn = Att_value[4]+ Att_manual_dn;
          	         // if(Att_total_dn > 31)
          	         //   Att_total_dn = 31;
          	         // Att(4,Att_total_dn); //衰减TS4
          	          
          	         // Att(4,0); //衰减TS0
          	         }           	       
          	       else if(Ts4_out_latch > Ts4_threhold+ over_threhold)
          	         {
          	          	if(Att_value[4]<31)          	         	
          	             Att_value[4]++;  //第4时隙
          	         // Att_total_dn = Att_value[4]+ Att_manual_dn;
          	         // if(Att_total_dn > 31)
          	         //   Att_total_dn = 31;
          	         // Att(4,Att_total_dn); //衰减TS4
          	         
          	          //Att(4,31); //衰减TS0
          	         } 
          	         
           	   //TXREG1=Att_value[4];  //Only for test for 下行输chu  
        
          	   //Att(4,Att_value[4]); 
          	        // Att(5,Att_value[5] );
          	  } 						
           if (Channel_Choice==5)  //下行,Ts5时隙
          	  {
          	   
          	   if(Ts5_threhold- below_threhold > 0)
          	      Ts5_low_threhold = Ts5_threhold- below_threhold;
          	   else
          	      Ts5_low_threhold = 0;          	   
          	   
          	   //Ts5_latch	= ADResult12[7]; //记住下行,Ts5时隙的输入数据
          	   
           	   Ts5_out_latch = ADResult12[8]; //记住下行,Ts5时隙的输出数据
          	   Ts5_out_latch1 = Ts5_out_latch0;
               Ts5_out_latch2 = Ts5_out_latch1;
               Ts5_out_latch3 = Ts5_out_latch2;
          	  //Ts5_out_latch = (Ts5_out_latch0+Ts5_out_latch1+Ts5_out_latch2+Ts5_out_latch3)>>2;    	   
          	   
          	   
          	//   Gain_dn =  Ts5_out_latch /Ts5_latch;  //更新下行增益
          	  // SW_latch = Ts5_out_latch / ADResult12[5]; //更新驻波比,注意这里应该使用ADResult12[5]来表示上行输入
           	       if(Ts5_out_latch < Ts5_threhold- below_threhold)
          	         {
          	          	if(Att_value[5]>0)
          	             Att_value[5]--;  //第5时隙
          	         // Att_total_dn = Att_value[5]+ Att_manual_dn;
          	         // if(Att_total_dn > 31)
          	         //   Att_total_dn = 31;
          	         // Att(5,Att_total_dn); //衰减TS5
          	         
          	         // Att(5,0); //衰减TS0
          	         }           	       
          	       else if(Ts5_out_latch > Ts5_threhold+ over_threhold)
          	         {
          	         	 if(Att_value[5]<31)          	         	
          	             Att_value[5]++;  //第5时隙
          	          //Att_total_dn = Att_value[5]+ Att_manual_dn;
          	          //if(Att_total_dn > 31)
          	          //  Att_total_dn = 31;
          	          //Att(5,Att_total_dn); //衰减TS5
          	           
          	           //Att(5,31); //衰减TS0
          	         } 
          	      //TXREG1=Att_value[5];     
          	    //Att(5,Att_value[5] ); 
          	      //Att(6,Att_value[6] );
          	       
          	  }					
           if (Channel_Choice==6)  //下行,Ts6时隙
          	  {
          	  // Ts6_latch	= ADResult12[7]; //记住下行,Ts6时隙的输入数据
  
          	   
          	   
            	 Ts6_out_latch = ADResult12[8]; //记住下行,Ts6时隙的输出数据
          	   Ts6_out_latch1 = Ts6_out_latch0;
               Ts6_out_latch2 = Ts6_out_latch1;
               Ts6_out_latch3 = Ts6_out_latch2;
          	  //Ts6_out_latch = (Ts6_out_latch0+Ts6_out_latch1+Ts6_out_latch2+Ts6_out_latch3)>>2;         	   
          	   
          	//   Gain_dn =  Ts6_out_latch /Ts6_latch;  //更新下行增益
          	  // SW_latch = Ts6_out_latch / ADResult12[5]; //更新驻波比,注意这里应该使用ADResult12[5]来表示上行输入
           	        if(Ts6_out_latch < Ts6_threhold- below_threhold)
          	          {
          	          	if(Att_value[6]>0)
          	            Att_value[6]--;  //第6时隙
          	         // Att_total_dn = Att_value[6]+ Att_manual_dn;
          	         // if(Att_total_dn > 31)
          	         //   Att_total_dn = 31;
          	         // Att(6,Att_total_dn); //衰减TS6
          	        
          	        // Att(6,0); //衰减TS0
          	         }           	       
          	        else if(Ts6_out_latch > Ts6_threhold + over_threhold)
          	          {
          	          	if(Att_value[6]<31)          	         	
          	             Att_value[6]++;  //第6时隙
          	         // Att_total_dn = Att_value[6]+ Att_manual_dn;
          	         // if(Att_total_dn > 31)
          	         //   Att_total_dn = 31;
          	         // Att(6,Att_total_dn); //衰减TS6 
          	        
          	        // Att(6,31); //衰减TS0
          	         }
          	      //TXREG1=Att_value[6];   
          	       
          	    //Att(6,Att_value[6] );     
          	     // Att(0,Att_value[0] );      
          	  
          	  
          	  }					
           if (Channel_Choice==0)  //下行,Ts0时隙
          	  {
          	   
           	    //TXREG1=Att_value[0];  
          	   
          	   //dacdelay(delay_value);
          	   
          	   //Ts0_latch	= ADResult12[7]; //记住下行,Ts0时隙的输入数据
          	   
            	 Ts0_out_latch = ADResult12[8]; //记住下行,Ts0时隙的输出数据
          	   Ts0_out_latch1 = Ts0_out_latch0;
               Ts0_out_latch2 = Ts0_out_latch1;
               Ts0_out_latch3 = Ts0_out_latch2;
          	  //Ts0_out_latch = (Ts0_out_latch0+Ts0_out_latch1+Ts0_out_latch2+Ts0_out_latch3)>>2;            	   
          	   
          	   
          	  // Gain_dn =  Ts0_out_latch /Ts0_latch;  //更新下行增益
          	   //Gain_dn =  Ts0_out_latch - Ts0_latch;  //更新下行增益
          	  // SW_latch = Ts0_out_latch - ADResult12[5]; //更新驻波比,注意这里应该使用ADResult12[5]来表示上行输入
           	       if(Ts0_out_latch < Ts0_threhold- below_threhold)
          	         {
          	          if(Att_value[0]>0)
          	             Att_value[0]--;  //第0时隙
          	          //Att_total_dn = Att_value[0]+ Att_manual_dn;
          	          //if(Att_total_dn > 31)
          	          //  Att_total_dn = 31;
          	          //Att(0,Att_total_dn); //衰减TS0
          	         
          	         // Att(0,0); //衰减TS0
          	         }           	       
          	       else if(Ts0_out_latch > Ts0_threhold + over_threhold)
          	         {
          	         	 if(Att_value[0]<31)          	         	
          	             Att_value[0]++;  //第0时隙
          	          //Att_total_dn = Att_value[0]+ Att_manual_dn;
          	          //if(Att_total_dn > 31)
          	          //  Att_total_dn = 31;
          	          //Att(0,Att_total_dn); //衰减TS0
          	         
          	         // Att(0,31); //衰减TS0
          	         } 
                //while (TX1IF== 0);        //Only for test 
               // TXREG1=Att_value[0];  //Only for test for 下行输chu  
                   //TXREG1=Ts0_out_latch; 	         
                // while (TX1IF== 0);        //Only for test 
     
        //       while (TX1IF== 0);        //Only for test            	  
            //Att(0,Att_value[0] ); 
          	  }	
       //INT0_Flag = 0;	
       
        
	                  ADCON0=ADCON0|0x02;//启动AD转换
        	          ADIE=1;//A/D转换中断允许
       	 
		    } //if(INT0_Flag==1)	
		


//	if (ADResult12[5]>)//反射功率,上行输入功率
	//if (ADResult12[6]>)//上行输出功率
// 	if ((ADResult12[7]> Open_threhold_dn))//下行输入超过门限
//  	if (ADResult12[8]>)//下行输出功率应该超过一定值,否则减小衰减
	////待写////if (ADResult12[9]>)//末级温度
	////待写////if (ADResult12[10]>)//环境温度
	////待写////if (ADResult12[11]>)//电源电压
}


/******************************************************************
** 函 数 名: uart_initial(void)
** 功能描述: 232串行通讯初始化子程序,设置低优先级中断接收,使能232收和发
******************************************************************/
void uart_initial(void)
{
	TXSTA1=0x04;		//选择异步高速方式传输8位数据 BRGH=1
	RCSTA1=0x80;		//允许串行口工作使能SOEN=1,CREN=1
	TRISC=TRISC|0X80;	//PIC18F6722:将RC7(RX)设置为输入方式
	TRISC=TRISC&0Xbf;	//RC6(TX)设置为输出	
	SPBRG1=0x47;		//11.0592M晶振时波特率为9600,Baundrate=11059200/[16(X+1)]
	RC1IE=1;            //使能接收中断
	IPEN=1;    			//使能中断优先级
	INTCON=INTCON|0xc0; //GIE|PEIE;//开全局中断,开外围模块中断
	PIR1=0x00;			//清中断标志
	PIE1=PIE1|0x20;		//允许串行通讯接口接收中断使能
//	RC1IP=0;			//设置SCI接收中断为低优先级中断 
RC1IP=1;			//设置SCI接收中断为高优先级中断 
	CREN1=1;			//允许串口接收数据
	TXEN1=1;			//允许串口发送数据
}

/******************************************************************
** 函 数 名: uart_send(void)** 功能描述: RS232中断发送子程序
******************************************************************/
/*void uart_send(void)
{
	while (TXIF==0);   //TXIF=0表示发送缓冲区不为空
	TXREG=
}*/

/******************************************************************
** 函 数 名: dacdelay(unsigned char x)
** 功能描述: 延时函数
******************************************************************/
void dacdelay(unsigned int x) 
{ 
	unsigned int i; 
	for(i=0;i<x;i++)
		i=i; 
}
/******************************************************************
** 函 数 名: dacck(void)
** 功能描述: 时钟产生函数
******************************************************************/
void dacck(void)
{ 
	dacclk=1; 
	dacdelay(2); 
	dacclk=0; 
	dacdelay(2); 
}
/******************************************************************
** 函 数 名: writedac(unsigned char dat,unsigned char channel,unsigned char rng)
** 功能描述: 写DA配置参数
** 参数描述: dat          DAC数据
			 channel      通道选择0~3(A~D)
             rng          rng取值范围0~1,Vout=REF*dat*(1+rng)/256
******************************************************************/
void writedac(unsigned char dat,unsigned char channel,unsigned char rng)
{
	unsigned char i,ch;
	ch=dat;
	dacldac=0;
	dacload=1;
	/*if (channel==2||channel==3)
	{
		dacdata=1;
	}
	else
	{
		dacdata=0;
	}*/	
	dacdata=(channel&0x02)>>1;//发送通道地址的高位
	dacck();
	/*if (channel==1||channel==3)
	{
		dacdata=1;
	}
	else
	{
		dacdata=0;
	}*/	
	dacdata=channel&0x01;//发送通道地址的低位
	dacck();
	dacdata=rng;
	dacck();
	for (i=0; i<8; i++) 
	{
		if (ch&0x80)
			dacdata=1;
		else
			dacdata=0;
		ch=ch<<1;		
		dacck();
	}
	dacload=0;
	dacdelay(2);
	dacload=1;
	dacdelay(2);
}

/******************************************************************
** 函 数 名: INT0_initial(void)
** 功能描述: 外部中断0初始化函数
******************************************************************/
void INT0_initial(void)
{   //外部中断0总是处于高优先级
	INT0IE=1; //使能外部INT0中断
	INT0IF=0; //清中断标志
	INTEDG0=1;//外部中断设为上升沿中断
}

//**********************************************************************************
void data_converter(unsigned char *p,unsigned int value)            //数据变换
{
  unsigned int m,n,j=0;
  p[0]=number_table[value/1000];
  m=value%1000;
  p[1]=number_table[m/100];
  n=m%100;
  p[2]=number_table[n/10];
  j=n%10;
  p[3]=number_table[j/1];
}

//**********************************************************************************
//串行口发送数组
void send_data(unsigned char *p)
{unsigned int n; 
 
 for(n=0;n<4;n++)//p[n]!=0xff;n++)
   {
   while (TX1IF== 0);        // TXIF=0表示发送缓冲区不为空
   TXREG1 = p[n];
   }
while (TX1IF== 0);        // TXIF=0表示发送缓冲区不为空 
TXREG1=' ';
}

void send_adc12_data(void)
{
     data_converter(display_buffer,ADResult);  //数据变换
     send_data(display_buffer);            //发送数据    
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -