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 + -
显示快捷键?