f020.c

来自「多通道高速数据采集源程序」· C语言 代码 · 共 2,039 行 · 第 1/5 页

C
2,039
字号
/*******还原算法Xn*9.4922*11********/
/**AIN1.1 存储区域0x120000~0x13FFFF共128K*/
         last_xn=x[0x3100];//AIN1.1上次值缓存
         AMX1SL=0x01;//AIN1.1
         ADC1CN &= 0xDF;// 清除ADC转换完成标志 AD1INT = 0;
         ADC1CN |= 0x10;//  AD1BUSY = 1;
         Delay_us(5);
         while (!ADC1CN&0x20);              //等待AD1INT=1;
         current_xn=ADC1;
          Temp_AD=abs(current_xn-last_xn);
          x[0x3100]= current_xn;
		  if(Temp_AD>=A)//阀值设定
		  {
		   if(timepoint>253)
		   {
		   x[n1-2]=current_xn;
		   //n1++;
           x[n1-1]=0XFE;
           //n1++;
		   }
		   else
           {
		   x[n1]=current_xn;
		   n1++;
           x[n1]=timepoint;
           n1++;
		   }
		   if(n1>0X11FF)//注意之处
		   {
            TR0=0;
            ET0=0;
		    n1=0x1100;//AIN1.1缓存区首地址
    
            switch (first_flag11)//注意
			{
			case 0X00: Read_Data_T0_Flash (AIN11_ADDR[0],AIN11_ADDR[1],0x08,n1+8,248);
                    AIN11_ADDR[1]++;
                    //AIN11_ADDR[2]=0x00;
                    first_flag11=1;//注意
					break;
			case 0X01: Read_Data_T0_Flash (AIN11_ADDR[0],AIN11_ADDR[1],0x00,n1,256);
                    AIN11_ADDR[1]++;
                    //AIN11_ADDR[2]=0x00;
					break;
			default:break;
			}
            
            if(AIN11_ADDR[1]>255)
			  {
               AIN11_ADDR[1]=0x00;
               //AIN11_ADDR[2]=0x00;
			   AIN11_ADDR[0]++;
			   if( AIN11_ADDR[0]>=0X14)//存储区域0x120000~0x13FFFF共128K 注意
			     {
				  FLASH_SE(0x12,0x00,0x00);
                  FLASH_SE(0x13,0x00,0x00);
                 
                  first_flag11=0;
                  Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x12,0x00,0x00,0x11);//通道AIN1。0 注意
                  AIN11_ADDR[0]=0x12;
                  AIN11_ADDR[1]=0x00;
                  //AIN11_ADDR[2]=0x08;//AIN1.1 	存储区域0x120000~0x13FFFF共128K
				 }

			  }
            ET0=1;
			TR0=1;
		   }//end if n1>0x11FF
      }//end if Temp_AD>A*/
		  
 }//end if AIN==0X02*/
/**********************************END AIN=0X02**********************************/	

/***********************************START AIN=0X03*********************************************/
	    if(AIN==0X03)
		{
		  AIN_Flag=0;
/***************************AD LONG TIME NO CHANGE****************************/
       if(timepoint>253)
		   {
             TR0=0;
	         ET0=0;
             //timepoint=0X00;
             AMX0SL = 0x02;//AIN0.2					  //AIN00-AIN07->0X00-0X07        
             AD0INT = 0;               // 清除ADC转换完成标志
	         AD0BUSY = 1;
             Delay_us(5);
	         while (!AD0INT);
             current_xn = ADC0H;
             x[m2]=current_xn;
	         m2++;
             x[m2]=0xFE;
             m2++;
		
             
             AMX1SL=0x02;//AIN1.2
             ADC1CN &= 0xDF;// 清除ADC转换完成标志 AD1INT = 0;
             ADC1CN |= 0x10;//  AD1BUSY = 1;
             Delay_us(5);
             while (!ADC1CN&0x20);              //等待AD1INT=1;
             current_xn=ADC1;
             x[n2]=current_xn;
	         n2++;
             x[n2]=0xFE;
             n2++;
		     ET0=1;
             TR0=1;

		    }
           if(m2>0X02FF)
		   {
            TR0=0;
            ET0=0;
		    m2=0x0200;//AIN0.2缓存区首地址
            switch (first_flag02)
			{
	    case 0X00: Read_Data_T0_Flash (AIN02_ADDR[0],AIN02_ADDR[1],0x08,m2+8,248);
                    AIN02_ADDR[1]++;
                    //AIN02_ADDR[2]=0x00;
                    first_flag02=1;
					break;
	    case 0X01: Read_Data_T0_Flash (AIN02_ADDR[0],AIN02_ADDR[1],0x00,m2,256);
                    AIN02_ADDR[1]++;
                    //AIN02_ADDR[2]=0x00;
					break;
	   default:break;
			}
            if(AIN02_ADDR[1]>255)
			  {
                       AIN02_ADDR[1]=0x00;
                       //AIN02_ADDR[2]=0x00;
	                   AIN02_ADDR[0]++;
	                   if( AIN02_ADDR[0]>=0X06)
			     {
		              FLASH_SE(0x04,0x00,0x00);
                      FLASH_SE(0x05,0x00,0x00);
                              
                              first_flag02=0;
                              Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x04,0x00,0x00,0x02);//通道AIN0。2
                              AIN02_ADDR[0]=0x04;
                              AIN02_ADDR[1]=0x00;
                              //AIN02_ADDR[2]=0x08;//AIN0.2 	存储区域0x040000~0x05FFFF共128K
			    }

			  }
            ET0=1;
  			TR0=1;
		   }//end if m2>0x02FF
           if(n2>0X12FF)//地址注意之处
		   {
            TR0=0;
            ET0=0;
		    n2=0x1200;//AIN1.2缓存区首地址
			
            switch (first_flag12)
			{
	   case 0X00: Read_Data_T0_Flash (AIN12_ADDR[0],AIN12_ADDR[1],0x08,n2+8,248);
                    AIN12_ADDR[1]++;
                    //AIN12_ADDR[2]=0x00;
                    first_flag12=1;
					break;
	   case 0X01: Read_Data_T0_Flash (AIN12_ADDR[0],AIN12_ADDR[1],0x00,n2,256);
                    AIN12_ADDR[1]++;
                    //AIN12_ADDR[2]=0x00;
					break;
	   default:break;
			}
            
            if(AIN12_ADDR[1]>255)
			  {
                           AIN12_ADDR[1]=0x00;
                           //AIN12_ADDR[2]=0x00;
			   AIN12_ADDR[0]++;
			   if( AIN12_ADDR[0]>=0X16)//存储区域0x140000~0x15FFFF共128K
			     {
		              FLASH_SE(0x14,0x00,0x00);
                      FLASH_SE(0x15,0x00,0x00);
                 
                              first_flag12=0;
                              Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x14,0x00,0x00,0x12);//通道AIN1。2
                              AIN12_ADDR[0]=0x14;
                              AIN12_ADDR[1]=0x00;
                              //AIN12_ADDR[2]=0x08;//AIN1.2 	存储区域0x140000~0x15FFFF共128K
				 }

			  }
            ET0=1;
			TR0=1;
		   }//end if n2>0x12FF
/*****************AIN02************************************/
/***信号517-1*******/
/***射控驱动器速度给定***/
/***电压范围0~15V*****/
/*****阀值0.5V*****/
/*******还原算法Xn*9.4922*11********/
/**AIN0.2 存储区域0x040000~0x05FFFF共128K*/
	      last_xn=x[0x2200];//AIN0.2上次值缓存
          AMX0SL = 0x02;//AIN0.2					  //AIN00-AIN07->0X00-0X07        
	      AD0INT = 0;               // 清除ADC转换完成标志
	      AD0BUSY = 1;
          Delay_us(5);
	      while (!AD0INT);
          current_xn= ADC0H;
          Temp_AD=abs(current_xn-last_xn);
          x[0x2200]= current_xn;
		if(Temp_AD>=B)//阀值设定
		{
		    if(timepoint>253)
			{
			x[m2-2]=current_xn;
		    //m2++;
            x[m2-1]=0XFE;
            //m2++;
			}
			else
			{
		   x[m2]=current_xn;
		   m2++;
           x[m2]=timepoint;
           m2++;
		   }
		   if(m2>0X02FF)//地址注意之处
		   {
            TR0=0;
            ET0=0;
		    m2=0x0200;//AIN0.2缓存区首地址
            
			switch (first_flag02)
			{
			case 0X00: Read_Data_T0_Flash (AIN02_ADDR[0],AIN02_ADDR[1],0x08,m2+8,248);
                                AIN02_ADDR[1]++;
                                //AIN02_ADDR[2]=0x00;
                                first_flag02=1;
					break;
		   case 0X01: Read_Data_T0_Flash (AIN02_ADDR[0],AIN02_ADDR[1],0x00,m2,256);
                               AIN02_ADDR[1]++;
                               //AIN02_ADDR[2]=0x00;
					break;
		      default:break;
			}
            if(AIN02_ADDR[1]>255)
			  {
               AIN02_ADDR[1]=0x00;
               //AIN02_ADDR[2]=0x00;
			   AIN02_ADDR[0]++;
			   if( AIN02_ADDR[0]>=0x06)
			     {
	                      FLASH_SE(0x04,0x00,0x00);
                          FLASH_SE(0x05,0x00,0x00);
                  
                              first_flag02=0;
                              Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x04,0x00,0x00,0x02);//通道AIN0。2
                              AIN02_ADDR[0]=0x04;
                              AIN02_ADDR[1]=0x00;
                              //AIN02_ADDR[2]=0x08;//AIN0.2 	存储区域0x040000~0x05FFFF共128K
				 }

			  }
			TR0=1;
            ET0=1;
		   }//end if m2>0X02FF
         }//end if Temp_AD>B
/*****************AIN12************************************/
/***信号562-1*******/
/***火控台单发射击开关***/
/***电压范围0~15V*****/
/*****阀值1.5V*****/
/*******还原算法Xn*9.4922*11********/
/**AIN1.2 存储区域0x140000~0x15FFFF共128K*/
          last_xn=x[0x3200];//AIN1.2上次值缓存
          AMX1SL=0x02;//AIN1.2
          ADC1CN &= 0xDF;// 清除ADC转换完成标志 AD1INT = 0;
          ADC1CN |= 0x10;//  AD1BUSY = 1;
          Delay_us(5);
          while (!ADC1CN&0x20);              //等待AD1INT=1;
          current_xn=ADC1;
          Temp_AD=abs(current_xn-last_xn);
          x[0x3200]= current_xn;
		  if(Temp_AD>=A)//阀值设定
		  {
		   if(timepoint>253)
		   {
		   x[n2-2]=current_xn;
		   //n2++;
           x[n2-1]=0XFE;
           //n2++;
		   }
		   else
		   {
		   x[n2]=current_xn;
		   n2++;
           x[n2]=timepoint;
           n2++;
		   }
		   if(n2>0X12FF)//注意之处
		   {
            TR0=0;
            ET0=0;
		    n2=0x1200;//AIN1.2缓存区首地址
            
            switch (first_flag12)
			{
			case 0X00: Read_Data_T0_Flash (AIN12_ADDR[0],AIN12_ADDR[1],0x08,n2+8,248);
                                AIN12_ADDR[1]++;
                                //AIN12_ADDR[2]=0x00;
                                first_flag12=1;
					break;
			case 0X01: Read_Data_T0_Flash (AIN12_ADDR[0],AIN12_ADDR[1],0x00,n2,256);
                                AIN12_ADDR[1]++;
                                //AIN12_ADDR[2]=0x00;
					break;
			default:break;
			}
            
            if(AIN12_ADDR[1]>255)
			  {
                           AIN12_ADDR[1]=0x00;
                          // AIN12_ADDR[2]=0x00;
			   AIN12_ADDR[0]++;
			   if( AIN12_ADDR[0]>=0X16)//存储区域0x140000~0x15FFFF共128K
			     {
		              FLASH_SE(0x14,0x00,0x00);
                       FLASH_SE(0x15,0x00,0x00);
                 
                              first_flag12=0;
                              Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x14,0x00,0x00,0x12);//通道AIN1。2
                              AIN12_ADDR[0]=0x14;
                              AIN12_ADDR[1]=0x00;
                              //AIN12_ADDR[2]=0x08;//AIN1.2 	存储区域0x140000~0x15FFFF共128K
				 }

			  }
            ET0=1;
			TR0=1;
		   }//end if n2>0x12FF
      }//end if Temp_AD>A
		  
 }//end if AIN==0X03
/**********************************END AIN=0X03**********************************/	

/***********************************START AIN=0X04*********************************************/
if(AIN==0X04)
{
		  AIN_Flag=0;
/***************************AD LONG TIME NO CHANGE****************************/
  if(timepoint>253)
		   {
             TR0=0;
             ET0=0;
	         
             AMX0SL = 0x03;//AIN0.3					  //AIN00-AIN07->0X00-0X07        
             AD0INT = 0;               // 清除ADC转换完成标志
	         AD0BUSY = 1;
             Delay_us(5);
	         while (!AD0INT);
             current_xn = ADC0H;
             x[m3]=current_xn;
	         m3++;
             x[m3]=0xFE;
             m3++;
		
             
             AMX1SL=0x03;//AIN1.3
             ADC1CN &= 0xDF;// 清除ADC转换完成标志 AD1INT = 0;
             ADC1CN |= 0x10;//  AD1BUSY = 1;
             Delay_us(5);
             while (!ADC1CN&0x20);              //等待AD1INT=1;
             current_xn=ADC1;
             x[n3]=current_xn;
	         n3++;
             x[n3]=0xFE;
             n3++;
		     ET0=1;
             TR0=1;

		    }
           if(m3>0X03FF)
		   {
            TR0=0;
            ET0=0;
		    m3=0x0300;//AIN0.3缓存区首地址
            switch (first_flag03)
			{
	    case 0X00: Read_Data_T0_Flash (AIN03_ADDR[0],AIN03_ADDR[1],0x08,m3+8,248);
                    AIN03_ADDR[1]++;
                    //AIN03_ADDR[2]=0x00;
                    first_flag03=1;
					break;
	    case 0X01: Read_Data_T0_Flash (AIN03_ADDR[0],AIN03_ADDR[1],0x00,m3,256);
                    AIN03_ADDR[1]++;
                   // AIN03_ADDR[2]=0x00;
					break;
	   default:break;
			}
            if(AIN03_ADDR[1]>255)
			  {
                       AIN03_ADDR[1]=0x00;
                       //AIN03_ADDR[2]=0x00;
	                   AIN03_ADDR[0]++;
	                   if( AIN03_ADDR[0]>=0X08)
			     {
		              FLASH_SE(0x06,0x00,0x00);
                      FLASH_SE(0x07,0x00,0x00);
                              
                              first_flag03=0;
                              Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x06,0x00,0x00,0x03);//通道AIN0。3
                              AIN03_ADDR[0]=0x06;
                              AIN03_ADDR[1]=0x00;

⌨️ 快捷键说明

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