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

📄 a test.c

📁 AT89S51完成的对电流传感器各项技术参数的测试仪器的全部底层代码!
💻 C
📖 第 1 页 / 共 2 页
字号:
  delay(30000);
 // delay(30000);
 }
 else if(WFlag==handtest5)
 {
  relay1=1;
 // relay2=0;
//  relay3=0;
  relay4=1;
 // relay5=0;
  TESTC=1;	
  delay(30000);
 // delay(30000);
 }
 else if(WFlag==handtest6)
 {

 //  relay1=0;
  // relay2=0;
  relay3=1;
  relay4=1;
 // relay5=0;
  TESTC=1;	
  delay(30000);
 // delay(30000);
 }
 else if(WFlag==handtest7)
 {

  relay1=1;
 // relay2=0;
  relay3=1;
  relay4=1;
 // relay5=0;
  TESTC=1;	
  delay(30000);
  //delay(30000);
 }
 else if(WFlag==handtest8)
 {
 // relay1=0;
 // relay2=0;
 // relay3=0;
  //relay4=0;
  relay5=1;
  TESTC=1;	
  delay(30000);
 // delay(30000);
 }
 else if(WFlag==handtest9)
 {
 // relay1=0;
  relay2=1;
 // relay3=0;
 // relay4=0;
  relay5=1;
  TESTC=1;	
  delay(30000);
  //delay(30000);
  
 }
 delay(12000);

 
 temp=ctestv();
 Ctrlu=0;
 TESTC=0;
 relay1=0;
 relay2=0;
 relay3=0;
 relay4=0;
 relay5=0;	
 delay(3000);
 buffer2[4] = (uchar) (temp&0x00ff);
 temp >>= 8;
 buffer2[5] = (uchar) (temp&0x00ff);

 buffer2[6] = buffer2[0]+ buffer2[1]+ buffer2[2]+ buffer2[3]+ buffer2[4]+ buffer2[5];       //和校验
}

//--------------------------------------------------------------------------------------------------
// 函数名称: AutoTestV()自动测量操作函数
// 函数功能: 在系统时钟为11.0592MHZ时
//--------------------------------------------------------------------------------------------------
void AutoTestV()
{
 unsigned int num;
 uint  max;

 unsigned int i;
 uint Ad_Buffer[7];

 uint HighValue;
 uint Lowvalue;
 uint temp;
 HighValue=0x0;
 Lowvalue=0x7fff;

//  Ctrlu=0;							//初始化控制测试端口
//  Ctrl2=0;
//  relay1=0;
 // relay2=0;
 // relay3=0;
 // relay4=0;
//  relay5=0;
 

 // TESTB=0;
 // TESTA=0;
//  TESTC=0;
 // delay(2000);

 Ctrl2=1;							//接通1mA电流源
 delay(3000);

 TESTB=1;							//接通B点
 delay(3000);						//延时等待电压建立
 for(i=0; i<7; i++)
   {
    Ad_Buffer[i] = read_ad();		//读AD
    delay(30);                     //延时
   }
 i = LvBo(&Ad_Buffer[0]);
 buffer2[0]=(uchar) (i&0x00ff);				//存AD数据低8位
 buffer2[1]=(uchar) ((i>>8) & 0x00ff);				//存AD数据高8位


 TESTB=0;
 delay(2000);


 TESTA=1;							//接通A点
 delay(3000);						//延时等待电压建立
 for(i=0; i<7; i++)
   {
    Ad_Buffer[i] = read_ad();			//读AD
    delay(30);
   }
 i = LvBo(&Ad_Buffer[0]);
 buffer2[2]=(uchar) (i&0x00ff);				//存AD数据低8位
 buffer2[3]=(uchar) ((i>>8) & 0x00ff);		//存AD数据高8位



 Ctrl2=0;							//断开电流源
 TESTA=0;							//断开A点
//  TESTB=0;							//断开B点
 delay(2000);
 Ctrlu=1;							//接通电压源
 delay(2000);


 relay1=1;
// relay2=0;
// relay3=0;
// relay4=0;
 //relay5=0;
 TESTC=1;
 delay(30000);
  delay(6000);//依次打开各干扰源并测试C点电压,如果该次电压值大于上次则将该值放入MAX,并将线号放入NUM
 
 
 temp=ctestv();
 max=temp;
 num=0x01;

 relay1=0;
// relay2=0;
 relay3=1;
// relay4=0;
// relay5=0;
 delay(30000);
 delay(6000);

 
 temp=ctestv();
 if(temp>max)
   {
    max=temp;
    num=0x02;
   }

 relay1=1;
 //relay2=0;
// relay3=1;
// relay4=0;
// relay5=0;
 delay(30000);
 delay(6000);

 
 temp=ctestv();
 if(temp>max)
   {
    max=temp;
    num=0x03;
   }

 relay1=0;
// relay2=0;
 relay3=0;
 relay4=1;
 //relay5=0;
 delay(30000);
 delay(6000);

 temp=ctestv();
 if(temp>max)
   {
    max=temp;
    num=0x04;
   }

 relay1=1;
// relay2=0;
// relay3=0;
// relay4=1;
 //relay5=0;
 delay(30000);
 delay(6000);

 temp=ctestv();
 if(temp>max)
   {
    max=temp;
    num=0x05;
   }

 relay1=0;
// relay2=0;
 relay3=1;
 //relay4=1;
// relay5=0;
 delay(30000);
 delay(6000);

 temp=ctestv();
 if(temp>max)
   {
    max=temp;
    num=0x06;
   }

 relay1=1;
// relay2=0;
// relay3=1;
// relay4=1;
// relay5=0;
 delay(30000);
 delay(6000);


 temp=ctestv();
 if(temp>max)
   {
    max=temp;
    num=0x07;
   }
 relay1=0;
// relay2=0;
 relay3=0;
 relay4=0;
 relay5=1;
 delay(30000);
 delay(6000);
 temp=ctestv();
 if(temp>max)
   {
    max=temp;
    num=0x08;
   }
// relay1=0;
 relay2=1;
// relay3=0;
// relay4=0;
// relay5=1;
 delay(30000);
 delay(6000);

 temp=ctestv();
 if(temp>max)
   {
    max=temp;
    num=0x09;
   }
 Ctrlu=0;
// relay1=0;
 relay2=0;
// relay3=0;
// relay4=0;
 relay5=0;
 TESTC =0;
 delay(3000);
 

 buffer2[4] = (uchar) (max&0x00ff);
 max >>= 8;
 buffer2[5] = (uchar) (max&0x00ff);
 buffer2[6] = num;
 buffer2[7] = buffer2[0]+ buffer2[1]+ buffer2[2]+ buffer2[3]+ buffer2[4]+ buffer2[5]+ buffer2[6];       //和校验
}

//--------------------------------------------------------------------------------------------------
// 函数名称: read_ad
// 函数功能: 完成读取AD数据
//--------------------------------------------------------------------------------------------------
uint read_ad(void)
{
 uint temp;
 RC=0;                        //RC下降沿到来,启动转换
 delay(10);
 RC = 1;                      //RC重新置高电平,等待下次启动

 while(BusyBit){;}           //等待数据转换完毕,启动INT1中断
 ad_dataL=AD_L;					//保存AD低8位数据
 ad_dataH=AD_H;                //保存AD高8位数据
 temp = ad_dataH;
 temp <<= 8;
 temp |= ad_dataL;
 delay(10);
 return temp;
}


//--------------------------------------------------------------------------------------------------
// 函数名称: delay
// 入口参数: N
// 函数功能:延时子程序,实现(16*N+24)us的延时
// 系统采用11.0592MHz的时钟时,延时满足要求,其它情况需要改动
//--------------------------------------------------------------------------------------------------
  void delay(unsigned  int N)
  {
  int i;
  for(i=0;i<N;i++);
  }
//--------------------------------------------------------------------
 



//--------------------------------------------------------------------------------------------------
// 函数名称: 主函数
// 函数功能: 调度各子函数,完成通信过程
//--------------------------------------------------------------------------------------------------
 void main(void)
 {
 UART_init();                        //初始化串口
 Ctrlu=0;							//初始化控制测试端口
 Ctrl2=0;
 relay1 =0;
 relay2 =0;
 relay3 =0;
 relay4 =0;
 relay5 =0;
 TESTB =0;
 TESTA =0;
 TESTC =0;
 delay(500);

 CS=0; 	                                       //AD976使能(低电平有效)
 BusyBit = 1;                                  //关闭INT1中断
 do
 {
   if(WFlag==handtest1|WFlag==handtest2|WFlag==handtest3|WFlag==handtest4|WFlag==handtest5|WFlag==handtest6|WFlag==handtest7|WFlag==handtest8|WFlag==handtest9)//选择并接通干扰源
    {
     HandTestV();								//测量操作;
     COM_send(7);								//发送测量数据
     ES=1;										//重开中断
     WFlag=0;									//清除标志位
    }
   else if(WFlag==autotest)                    //选择并接通干扰源
    {
     AutoTestV();								//测量操作;
     COM_send(8);								//发送测量数据
     ES=1;										//重开中断
     WFlag=0;									//清除标志位
    }
   else if(WFlag==resent)						//判断是否重发标志
     {
      if(MFlag==0x55)
      {
      COM_send(8);								//发送测量数据
      ES=1;										//重开中断
      WFlag=0;									//清除标志位
       }
      else if(MFlag==0xaa)
      {
      COM_send(7);								//发送测量数据
      ES=1;										//重开中断
      WFlag=0;									//清除标志位
       }
     }
  PCON = PCON | 0x01;							/* CPU进入休眠状态 */
  }
  while(1);										//循环
 }

⌨️ 快捷键说明

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