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

📄 f020.c

📁 多通道高速数据采集源程序
💻 C
📖 第 1 页 / 共 5 页
字号:
/*********************************************************************/
/********************************************************************/
//station 2//
//射击控制信号采集//
//M301/C	射控地GNDS//
//共14路采样//
//采样通道AIN0。0~AIN0。7//
//        AIN1。0~AIN1。5//


#include "c8051f020.h"  
#include "Delay.h"
#include "flash.h"
#include "math.h"
//#include "Const.h"
#define A 0x0E //Xn*9.4922*11  1.5V
#define B 0x05 //Xn*9.4922*11  0.5V
sbit Status_system_LED = P3^4;
sbit Status_AD_LED     =P3^5;
extern void config (void);
void UART0_SendByte(unsigned char value);
void Read_AD_Current(void);
unsigned int idata systemstate;
unsigned char xdata x[0x07fff];
unsigned char idata shijian_data[3];  //最大255
unsigned char idata AIN;//通道变量
unsigned char idata adh,adm,adl;//开机目地地址变量
unsigned char idata data_length;
bit c_flag;//C命令读标志位
bit e_flag;//E命令读标志位
bit fast_read;//D命令读标志位
bit AD_Current_flag;//K命令读标志位
bit AIN_Flag;//定时器中断,AD转换标志位
unsigned char idata timepoint;
unsigned char idata fast_adh,fast_adm,fast_adl;
unsigned long int idata end_add;

unsigned int idata AIN00_ADDR[3];
unsigned int idata AIN01_ADDR[3];
unsigned int idata AIN02_ADDR[3];
unsigned int idata AIN03_ADDR[3];
unsigned int idata AIN04_ADDR[3];
unsigned int idata AIN05_ADDR[3];
unsigned int idata AIN06_ADDR[3];
unsigned int idata AIN07_ADDR[3];
unsigned int idata AIN10_ADDR[3];
unsigned int idata AIN11_ADDR[3];
unsigned int idata AIN12_ADDR[3];
unsigned int idata AIN13_ADDR[3];
unsigned int idata AIN14_ADDR[3];
unsigned int idata AIN15_ADDR[3];
unsigned int idata AIN16_ADDR[3];
unsigned int idata AIN17_ADDR[3];
unsigned int idata m0,m1,m2,m3,m4,m5,m6,m7,n0,n1,n2,n3,n4,n5,n6,n7;//m~AIN0.0~AIN0.7缓存地址 n~AIN1.0~AIN1.7缓存地址
unsigned char first_flag00,first_flag01,first_flag02,first_flag03,first_flag04,first_flag05,first_flag06,first_flag07;
unsigned char first_flag10,first_flag11,first_flag12,first_flag13,first_flag14,first_flag15,first_flag016,first_flag17;
//*****各通道上次采样值RAM保存地址*******//
//AIN00~0X2000   //AIN10~0X3000 
//AIN01~0X2100   //AIN11~0X3100
//AIN02~0X2200   //AIN12~0X3200
//AIN03~0X2300   //AIN13~0X3300
//AIN04~0X2400   //AIN14~0X3400
//AIN05~0X2500   //AIN15~0X3500
//AIN06~0X2600   //AIN16~0X3600
//AIN07~0X2700   //AIN17~0X3700
//***********************************//




void main (void) 
{  
 unsigned int Temp_AD;
 unsigned int idata last_xn;
 unsigned int idata current_xn;

 
 //unsigned int i;
  WDTCN = 0xDE;
  WDTCN = 0xAD;   //禁止WDT
   config();
//Flash Address Initial//
   AIN00_ADDR[0]=0x00;
   AIN00_ADDR[1]=0x00;
   //AIN00_ADDR[2]=0x08;//AIN0.0 	存储区域0x000000~0x01FFFF共128K

   AIN01_ADDR[0]=0x02;
   AIN01_ADDR[1]=0x00;
   //AIN01_ADDR[2]=0x08;//AIN0.1 	存储区域0x020000~0x03FFFF共128K

   AIN02_ADDR[0]=0x04;
   AIN02_ADDR[1]=0x00;
   //AIN02_ADDR[2]=0x08;//AIN0.2 	存储区域0x040000~0x05FFFF共128K
   
   AIN03_ADDR[0]=0x06;
   AIN03_ADDR[1]=0x00;
   //AIN03_ADDR[2]=0x08;//AIN0.3 	存储区域0x060000~0x07FFFF共128K

   AIN04_ADDR[0]=0x08;
   AIN04_ADDR[1]=0x00;
   //AIN04_ADDR[2]=0x08;//AIN0.4 	存储区域0x080000~0x009FFF共128K

   AIN05_ADDR[0]=0x0A;
   AIN05_ADDR[1]=0x00;
   //AIN05_ADDR[2]=0x08;//AIN0.5 	存储区域0x0A0000~0x0BFFFF共128K

   AIN06_ADDR[0]=0x0C;
   AIN06_ADDR[1]=0x00;
   //AIN06_ADDR[2]=0x08;//AIN0.6 	存储区域0x0C0000~0x0DFFFF共128K

   AIN07_ADDR[0]=0x0E;
   AIN07_ADDR[1]=0x00;
   //AIN07_ADDR[2]=0x08;//AIN0.7 	存储区域0x0E0000~0x0FFFFF共128K
   
   AIN10_ADDR[0]=0x10;
   AIN10_ADDR[1]=0x00;
   //AIN10_ADDR[2]=0x08;//AIN1.0 	存储区域0x010000~0x11FFFF共128K
   
   AIN11_ADDR[0]=0x12;
   AIN11_ADDR[1]=0x00;
   //AIN11_ADDR[2]=0x08;//AIN1.1 	存储区域0x120000~0x13FFFF共128K
  
   AIN12_ADDR[0]=0x14;
   AIN12_ADDR[1]=0x00;
   //AIN12_ADDR[2]=0x08;//AIN1.2 	存储区域0x140000~0x15FFFF共128K

   AIN13_ADDR[0]=0x16;
   AIN13_ADDR[1]=0x00;
   //AIN13_ADDR[2]=0x08;//AIN1.3 	存储区域0x160000~0x17FFFF共128K
  
   AIN14_ADDR[0]=0x18;
   AIN14_ADDR[1]=0x00;
   //AIN14_ADDR[2]=0x08;//AIN1.4 	存储区域0x180000~0x19FFFF共128K

   AIN15_ADDR[0]=0x1A;
   AIN15_ADDR[1]=0x00;
   //AIN15_ADDR[2]=0x08;//AIN1.5 	存储区域0x1A0000~0x1BFFFF共128K
   
   AIN16_ADDR[0]=0x1C;
   AIN16_ADDR[1]=0x00;
   //AIN16_ADDR[2]=0x08;//AIN1.6 	存储区域0x1C0000~0x1DFFFF共128K

   AIN17_ADDR[0]=0x1E;
   AIN17_ADDR[1]=0x00;
   //AIN17_ADDR[2]=0x08;//AIN1.7 	存储区域0x1E0000~0x1FFFFF共128K

//RAM Address Initial//
   m0=0x0000;
   m1=0x0100;
   m2=0x0200;
   m3=0x0300;
   m4=0x0400;
   m5=0x0500;
   m6=0x0600;
   m7=0x0700;

   n0=0x1000;
   n1=0x1100;
   n2=0x1200;
   n3=0x1300;
   n4=0x1400;
   n5=0x1500;
   n6=0x1600;
   n7=0x1700;
//first_flag Initial//
   first_flag00=0;first_flag01=0;first_flag02=0;first_flag03=0;first_flag04=0;first_flag05=0;first_flag06=0;first_flag07=0;
   first_flag10=0;first_flag11=0;first_flag12=0;first_flag13=0;first_flag14=0;first_flag15=0;
   TR1=1;
   EA=1;
   TR0=0;
   systemstate=0;
   AIN=0X00;
   timepoint=0x00;
   fast_adh=0X00;fast_adm=0X00;fast_adl=0X00;end_add=0X00000000;
   AD_Current_flag=0;
   Status_system_LED=0;
   Status_AD_LED =1;
//   FLASH_SE(0x1F,0x00,0x00);
//   UART0_SendByte(0XEE);

 while(1)
  {
  if(fast_read==1)
      {
	     TR0=0;
         ET0=0;
        fast_read=0;
        Fast_Read(fast_adh,fast_adm,fast_adl,end_add);
     }
  if(e_flag==1)
      {
	    
	  TR0=0;
      ET0=0;
	   e_flag=0;
	   //FLASH_SE(0x00,0x00,0x00);
       FLASH_BE();
//Flash Address Initial//
   AIN00_ADDR[0]=0x00;
   AIN00_ADDR[1]=0x00;
   //AIN00_ADDR[2]=0x08;//AIN0.0 	存储区域0x000000~0x01FFFF共128K

   AIN01_ADDR[0]=0x02;
   AIN01_ADDR[1]=0x00;
   //AIN01_ADDR[2]=0x08;//AIN0.1 	存储区域0x020000~0x03FFFF共128K

   AIN02_ADDR[0]=0x04;
   AIN02_ADDR[1]=0x00;
   //AIN02_ADDR[2]=0x08;//AIN0.2 	存储区域0x040000~0x05FFFF共128K
   
   AIN03_ADDR[0]=0x06;
   AIN03_ADDR[1]=0x00;
   //AIN03_ADDR[2]=0x08;//AIN0.3 	存储区域0x060000~0x07FFFF共128K

   AIN04_ADDR[0]=0x08;
   AIN04_ADDR[1]=0x00;
   //AIN04_ADDR[2]=0x08;//AIN0.4 	存储区域0x080000~0x009FFF共128K

   AIN05_ADDR[0]=0x0A;
   AIN05_ADDR[1]=0x00;
   //AIN05_ADDR[2]=0x08;//AIN0.5 	存储区域0x0A0000~0x0BFFFF共128K

   AIN06_ADDR[0]=0x0C;
   AIN06_ADDR[1]=0x00;
   //AIN06_ADDR[2]=0x08;//AIN0.6 	存储区域0x0C0000~0x0DFFFF共128K

   AIN07_ADDR[0]=0x0E;
   AIN07_ADDR[1]=0x00;
   //AIN07_ADDR[2]=0x08;//AIN0.7 	存储区域0x0E0000~0x0FFFFF共128K
   
   AIN10_ADDR[0]=0x10;
   AIN10_ADDR[1]=0x00;
   //AIN10_ADDR[2]=0x08;//AIN1.0 	存储区域0x010000~0x11FFFF共128K
   
   AIN11_ADDR[0]=0x12;
   AIN11_ADDR[1]=0x00;
   //AIN11_ADDR[2]=0x08;//AIN1.1 	存储区域0x120000~0x13FFFF共128K
  
   AIN12_ADDR[0]=0x14;
   AIN12_ADDR[1]=0x00;
   //AIN12_ADDR[2]=0x08;//AIN1.2 	存储区域0x140000~0x15FFFF共128K

   AIN13_ADDR[0]=0x16;
   AIN13_ADDR[1]=0x00;
   //AIN13_ADDR[2]=0x08;//AIN1.3 	存储区域0x160000~0x17FFFF共128K
  
   AIN14_ADDR[0]=0x18;
   AIN14_ADDR[1]=0x00;
   //AIN14_ADDR[2]=0x08;//AIN1.4 	存储区域0x180000~0x19FFFF共128K

   AIN15_ADDR[0]=0x1A;
   AIN15_ADDR[1]=0x00;
   //AIN15_ADDR[2]=0x08;//AIN1.5 	存储区域0x1A0000~0x1BFFFF共128K
   
   AIN16_ADDR[0]=0x1C;
   AIN16_ADDR[1]=0x00;
   //AIN16_ADDR[2]=0x08;//AIN1.6 	存储区域0x1C0000~0x1DFFFF共128K

   AIN17_ADDR[0]=0x1E;
   AIN17_ADDR[1]=0x00;
   //AIN17_ADDR[2]=0x08;//AIN1.7 	存储区域0x1E0000~0x1FFFFF共128K

//RAM Address Initial//
   m0=0x0000;
   m1=0x0100;
   m2=0x0200;
   m3=0x0300;
   m4=0x0400;
   m5=0x0500;
   m6=0x0600;
   m7=0x0700;

   n0=0x1000;
   n1=0x1100;
   n2=0x1200;
   n3=0x1300;
   n4=0x1400;
   n5=0x1500;
   n6=0x1600;
   n7=0x1700;
//first_flag Initial//
   first_flag00=0;first_flag01=0;first_flag02=0;first_flag03=0;first_flag04=0;first_flag05=0;first_flag06=0;first_flag07=0;
   first_flag10=0;first_flag11=0;first_flag12=0;first_flag13=0;first_flag14=0;first_flag15=0;
       //UART0_SendByte(0X0E);
       
	  }
  if(c_flag==1)//C命令程序段
         {
		   //TR0=0;
		   //ET0=0;
	       c_flag=0;
	       Read_Flash_Data_To_PC (adh,adm,adl,data_length);
           //ET0=1;
           //TR0=1;
           
	     }
  if(AD_Current_flag==1)//K命令程序段
        {
		  AD_Current_flag=0;
          TR0=0;
		  ET0=0;
          Read_AD_Current();
		}
  if(systemstate==1)//S命令启动采样
   {
     
      Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x00,0x00,0x00,0x00);//通道AIN0。0
      Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x10,0x00,0x00,0x10);//通道AIN1。0
      Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x02,0x00,0x00,0x01);//通道AIN0。1
      Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x12,0x00,0x00,0x11);//通道AIN1。1
      Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x04,0x00,0x00,0x02);//通道AIN0。2
      Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x14,0x00,0x00,0x12);//通道AIN1。2
      Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x06,0x00,0x00,0x03);//通道AIN0。3
      Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x16,0x00,0x00,0x13);//通道AIN1。3
      Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x08,0x00,0x00,0x04);//通道AIN0。4
      Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x18,0x00,0x00,0x14);//通道AIN1。4
      Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x0A,0x00,0x00,0x05);//通道AIN0。5
      Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x1A,0x00,0x00,0x15);//通道AIN1。5
      Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x0C,0x00,0x00,0x06);//通道AIN0。6
      //Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x1C,0x00,0x00,0x16);//通道AIN1。6
      Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x0E,0x00,0x00,0x07);//通道AIN0。7
      //Flash_Write_address (shijian_data[0],shijian_data[1],shijian_data[2],0x1E,0x00,0x00,0x17);//通道AIN1。7
      systemstate=2;
      ET0=1;
      TR0=1;
	  while(systemstate==2)
	 {
       
	    if(c_flag==1)//C命令程序段
         {
           TR0=0;
		   ET0=0;
	       c_flag=0;
	       Read_Flash_Data_To_PC (adh,adm,adl,data_length);
           ET0=1;
           TR0=1;
	     }
       if(AD_Current_flag==1)//K命令程序段
        {
		  AD_Current_flag=0;
          TR0=0;
		  ET0=0;
          Read_AD_Current();
          ET0=1;
          TR0=1;
		}
	if(fast_read==1)//D命令程序段
      {
        fast_read=0;
		TR0=0;
		ET0=0;
        Fast_Read(fast_adh,fast_adm,fast_adl,end_add);
        ET0=1;
		TR0=1;
     }

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

		    }
           if(m0>0X00FF)
		   {
            TR0=0;
		    ET0=0;
		    m0=0x0000;//AIN0.0缓存区首地址
            switch (first_flag00)
			{
			case 0X00: Read_Data_T0_Flash (AIN00_ADDR[0],AIN00_ADDR[1],0x08,m0+8,248);
                    AIN00_ADDR[1]++;
                    //AIN00_ADDR[2]=0x00;
                    first_flag00=1;
					break;
			case 0X01: Read_Data_T0_Flash (AIN00_ADDR[0],AIN00_ADDR[1],0x00,m0,256);
                    AIN00_ADDR[1]++;
                    //AIN00_ADDR[2]=0x00;

⌨️ 快捷键说明

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