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

📄 main_zkf.c

📁 TD-SCDMA的工作原理,工作过程以及信号的形成
💻 C
📖 第 1 页 / 共 4 页
字号:
 //uart_rec_process(); //串口接收数据处理

	} //while
}
/******************************************************************
** 函 数 名: interrupt HI_ISR()
** 功能描述: 高优先级中断子程序----AD转换中断
******************************************************************/
void interrupt HI_ISR()
{
	unsigned char i =0;
	    
if (RC1IF==1)					//RS232接收中断
	{

		recdata=RCREG1; 			//接收数据并存储	
		    //uart_rec_data[5]=uart_rec_data[4];  //移位寄存
		    //uart_rec_data[4]=uart_rec_data[3];
       // uart_rec_data[3]=uart_rec_data[2];
       // uart_rec_data[2]=uart_rec_data[1];
		    uart_rec_data[1]=uart_rec_data[0];		    
		    uart_rec_data[0]=recdata;		
	
	
		
//		while (TX1IF== 0);        //Only for test 
// TXREG1=uart_rec_data[1];  //Only for test
//    while (TX1IF== 0);        //Only for test	
    
			RC1IF=0;					//清接收中断标志	
			RC_flag = 1;	  		    
  }//if (RC1IF==1)

else if(INT0IF==1)//外部中断0发生
	{  
		
		
		TRISD=0XFF;//设置D口为输入方式
		
	 

	 	  	UpDownFlag=(PORTD&0xf8)>>3;//读取D口状态
	 	  		 	  	UpDownFlag=(PORTD&0xf8)>>3;//读取D口状态
	 	  		 	  		 	  	UpDownFlag=(PORTD&0xf8)>>3;//读取D口状态
        Channel_Choice = UpDownFlag;  //记住当前时隙,去掉了第5位标示
        
        state = UpDownFlag;
 	        
	 
        	ADIE=1;//A/D转换中断允许
	        ADCON0=ADCON0|0x02;//启动AD转换
	       //  Att(Channel_Choice,Att_value[Channel_Choice] );
	         
	        //Compare();
        	INT0_Flag = 1;
        
	       
   
	//	Txreg1=='2';	 
	   // while (TX1IF== 0); 
		//TXREG1=Channel_Choice;  //为了串口测试使用
		// while (TX1IF== 0);	
	// dacdelay(delay_value);
	
	
/*
    	int_cnt++;
    	if(int_cnt==2)
    	  int_cnt = 0;
    	   	
			
			
			  //TXREG1=int_cnt;
			
			if(int_cnt == 1) //奇数中断
        {
        	ADIE=1;//A/D转换中断允许
	        ADCON0=ADCON0|0x02;//启动AD转换
	        //Att(Channel_Choice,Att_value[Channel_Choice] );
	        //Compare();
        	INT0_Flag = 1; 
        }
      else if(int_cnt == 0)  //偶数中断
        {        	
        	ADIE=0;//A/D转换中断禁止
        	ADCON0=ADCON0&0xfd;//禁止AD转换
        	//Att(Channel_Choice,0);        	
        	
        //	Channel_Choice_next = Channel_Choice + 1;
        //	if(Channel_Choice_next == 7 )
        //	   Channel_Choice_next = 0;
        	
          //Att(Channel_Choice,Att_value[Channel_Choice] );
          //  TXREG1=Att_value[0];        	       	
        	INT0_att = 1; 
        }	
   
*/
    

      TRISD=0X00;//设置D口为输出方式
//TXREG1=Channel_Choice; 
//SendPortD (slot_number_inform,Channel_Choice);    
//SendPortD (slot_number_inform,Channel_Choice);          
//Att(Channel_Choice ,Att_value[Channel_Choice] );        
      
		INT0IF=0; //清中断标志

		
	}
}
/******************************************************************
** 函 数 名: interrupt low_priority LOW_ISR()
** 功能描述: 低高优先级中断子程序----串口接收中断
******************************************************************/
void  interrupt low_priority LOW_ISR()
{
	//INT0IE=0;
	if(ADIF==1)    //AD转换完成
	{
		ADIF=0;    //清中断标志
		 Deal_AD();
		//send_adc12_data();

		AD_Flag=1; //置AD转换完成标志
	}
	//INT0IE=1;
//TXREG1=uart_rec_data[0];  //Only for test
//while (TX1IF== 0);        //Only for test
//TXREG1=' ';               //Only for test
//while (TX1IF== 0);		    //Only for test
//recdata=recdata<<3;
//PORTD=recdata|0x04;
}

/******************************************************************
** 函 数 名: Deal_AD(void) 功能描述: AD转换结果处理
******************************************************************/
void Deal_AD(void)
{
	//
	// ADResult=ADRESL+(ADRESH<<8);    //读取并存储AD转换结果(10位,高6位为0)
	// ADResult12[ADCounter]=ADResult;//保存AD转换结果,这里可以通过设置来达到模拟AD的目的
	//  ADCounter++;
	//  ADCON0=0x01|(ADCounter<<2);//通道选择
	//  if (ADCounter==11)
	//  {
	//  	ADCounter=0;
	//  }


	//AD_Flag=0;        //AD转换完成标志清零
	ADCON0=ADCON0&0xfd;//禁止AD转换
	   ADCON0=0x01|0x20;//8通道,使能AD
	   ADResult=ADRESL+(ADRESH<<8);    //读取并存储AD转换结果(10位,高6位为0)
	   ADResult12[8]=ADResult;//保存AD转换结果,这里可以通过设置来达到模拟AD的目的
	 

	ADCON0=ADCON0|0x02;//启动AD转换
	
		//  ADCON0= 0x20; //8通道,禁止AD
        //		 while (TX1IF== 0);        //Only for test 
        //  TXREG1=ADCounter;  //Only for test for 下行输入	
        	//	 while (TX1IF== 0);        //Only for test 
          // TXREG1=ADResult12[8];  //Only for test for 下行输chu
         //    while (TX1IF== 0);        //Only for test	
         
  //TXREG1=ADRESH;       
        	
}
/******************************************************************
** 函 数 名: adc_initial(void)** 功能描述: AD初始化
******************************************************************/
void adc_initial(void)
{
	ADCounter=0;//AD转换次数清零
	
	 ADCON0=0x01|0x20;//8通道,使能AD
	 //ADCON0=0x01;//选择0通道,打开AD转换
	ADCON1=0;//VREF+=VDD,VREF-=VSS,AN0~AN11配置为模拟输入
	ADCON2=0x89;//ADFM=1,AD结果右对齐;ACQT2:ACQT0=001,采样时间为2倍TAD;
			   //ADCS2:ADCS0=001,AD转换时钟为Fosc/8
//	ADIP=1;//设AD转换中断为高优先级中断
  ADIP=0;//设AD转换中断为低优先级中断
	ADIF=0;//清A/D中断标志
	//ADIE=0;//A/D转换中断禁止
	ADIE=1;//A/D转换中断允许  
	//ADCON0=ADCON0|0x02;//启动AD转换
	ADCON0=ADCON0&0xfd;//禁止AD转换
}


void Compare(void)
{
   
        //	 while (TX1IF== 0);        //Only for test 
        //TXREG1=ADResult12[4];  //Only for test for 下行输chu
        //    while (TX1IF== 0);        //Only for test	   
      ////////////////////////////这里是处理部分/////////////////////////

    
    
     if((INT0_Flag==1)&&(AD_Flag==1))  //这个是外部中断处理结束,并且AD转变完成
        { //int_cnt = 1;
        	        	ADCON0=ADCON0&0xfd;//禁止AD转换
        	          ADIE=0;//A/D转换中断禁止
        	INT0_Flag = 0;
          AD_Flag=0;
            TXREG1=Channel_Choice; 
           SendPortD (slot_number_inform,Channel_Choice);
          SendPortD (slot_number_inform,Channel_Choice);
         // Att(Channel_Choice ,Att_value[Channel_Choice] );

                    //ADCON0= ADCON0&0xfe; // 禁止AD
                //   while (TX1IF== 0);        //Only for test 
          //Only for test for 下行输chu         	         
         //      while (TX1IF== 0);        //Only for test  	
        	
        //		 while (TX1IF== 0);        //Only for test 
        // TXREG1=Channel_Choice;  //Only for test for 下行输chu
        //    while (TX1IF== 0);        //Only for test	 
          
          
          
          	if (Channel_Choice==1)  //上行,Ts1时隙
          	  {
          	   
          	   //Ts1_latch	= ADResult12[5]; //记住上行,Ts1时隙的输入数据
          	   Ts1_out_latch = ADResult12[6]; //记住上行,Ts1时隙的输出数据
          	   //Gain_up =  Ts1_out_latch /Ts1_latch;  //更新上行增益	   
          	       if(Ts1_out_latch < Ts1_threhold- below_threhold)
          	         {
          	         	if(Att_value[1]>0)
          	            Att_value[1]--;  //第1时隙
          	          //Att_total_up = Att_value[1]+ Att_manual_up;
          	          //if(Att_total_up > 31)
          	          //  Att_total_up = 31;
          	         // Att(1,Att_total_up); //衰减TS1
          	         }           	       
          	       else if(Ts1_out_latch > Ts1_threhold+ over_threhold)
          	         {
          	         	if(Att_value[1]<31)          	         	
          	            Att_value[1]++;  //第1时隙
          	          //Att_total_up = Att_value[1]+ Att_manual_up;
          	          //if(Att_total_up > 31)
          	          //  Att_total_up = 31;
          	         // Att(1,Att_total_up); //衰减TS1
          	         } 
        	//	 while (TX1IF== 0);        //Only for test 
          //TXREG1=Att_total_up;  //Only for test for 下行输chu
          //   while (TX1IF== 0);        //Only for test	          	         
          	              	     
          	  }	
          
          	 if (Channel_Choice==2)  //上行,Ts2时隙
          	  {
          	   
          	   //Ts2_latch	= ADResult12[5]; //记住上行,Ts2时隙的输入数据
          	   Ts2_out_latch = ADResult12[6]; //记住上行,Ts2时隙的输出数据
          	   //Gain_up =  Ts2_out_latch /Ts2_latch;  //更新上行增益
          	       if(Ts2_out_latch < Ts2_threhold- below_threhold)
          	         {
          	         	if(Att_value[2]>0)
          	            Att_value[2]--;  //第2时隙
          	          //Att_total_up = Att_value[2]+ Att_manual_up;
          	          //if(Att_total_up > 31)
          	          //  Att_total_up = 31;
          	         // Att(2,Att_total_up); //衰减TS2
          	         }           	       
          	       else if(Ts2_out_latch > Ts2_threhold+ over_threhold)
          	         {
          	         	if(Att_value[2]<31)          	         	
          	            Att_value[2]++;  //第2时隙
          	         // Att_total_up = Att_value[2]+ Att_manual_up;
          	         // if(Att_total_up > 31)
          	         //   Att_total_up = 31;
          	         // Att(2,Att_total_up); //衰减TS2
          	         }
        	//	 while (TX1IF== 0);        //Only for test 
          //TXREG1=Att_total_up;  //Only for test for 下行输chu
          //   while (TX1IF== 0);        //Only for test	          	         
          	          
          	  }					
          	 if (Channel_Choice==3)  //上行,Ts3时隙
          	  {
          	   
          	   //Ts3_latch	= ADResult12[5]; //记住上行,Ts3时隙的输入数据
          	   Ts3_out_latch = ADResult12[6]; //记住上行,Ts3时隙的输出数据
          	   //Gain_up =  Ts3_out_latch /Ts3_latch;  //更新上行增益	   
          	       if(Ts3_out_latch < Ts3_threhold- below_threhold)
          	         {
          	         	if(Att_value[3]>0)
          	            Att_value[3]--;  //第3时隙
          	          //Att_total_up = Att_value[3]+ Att_manual_up;
          	          //if(Att_total_up > 31)
          	          //  Att_total_up = 31;
          	          //Att(3,Att_total_up); //衰减TS3
          	         }           	       
          	       else if(Ts3_out_latch > Ts3_threhold+ over_threhold)
          	         {
          	         	if(Att_value[3]<31)          	         	
          	            Att_value[3]++;  //第3时隙
          	          //Att_total_up = Att_value[3]+ Att_manual_up;
          	          //if(Att_total_up > 31)
          	          //  Att_total_up = 31;
          	          //Att(3,Att_total_up); //衰减TS3
          	         } 
        	//	 while (TX1IF== 0);        //Only for test 
          //TXREG1=Att_total_up;  //Only for test for 下行输chu
          //   while (TX1IF== 0);        //Only for test	          	  
          	  
          	  }			
           if (Channel_Choice==4)  //下行,Ts4时隙
          	  {
 
          	         //  TXREG1=Att_value[4];  
          	   //Ts4_latch	= ADResult12[7]; //记住下行,Ts4时隙的输入数据     
          	   
          	   Ts4_out_latch = ADResult12[8]; //记住下行,Ts4时隙的输出数据
          	   Ts4_out_latch1 = Ts4_out_latch0;
               Ts4_out_latch2 = Ts4_out_latch1;
               Ts4_out_latch3 = Ts4_out_latch2;
          	  //Ts4_out_latch = (Ts4_out_latch0+Ts4_out_latch1+Ts4_out_latch2+Ts4_out_latch3)>>2;
          	   
          	  // Gain_dn =  Ts4_out_latch /Ts4_latch;  //更新下行增益
          	   //Gain_dn =  Ts4_out_latch /Ts4_latch;  //更新下行增益
          	   //SW_latch = Ts4_out_latch / ADResult12[5]; //更新驻波比,注意这里应该使用ADResult12[5]来表示上行输入
          	       if(Ts4_out_latch < Ts4_threhold- below_threhold)
          	         {

⌨️ 快捷键说明

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