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

📄 调试程序._c

📁 这段程序是步进电机的细分驱动程序
💻 _C
📖 第 1 页 / 共 4 页
字号:
	      for(i=0;i<1000;i++)
	       {
	         motor_left (2,1,1000);
	       }
		}
	//  OutputMotor(0x02,0x00,0x00);
   }	
//******************************************************//
//旋转盘旋转初使化	 
//******************************************************//
 void  plate_init  (void)
   {	 
	  PIND=PORTD;
	  g[2]=PIND&0x40;
	  while(g[2]==0)
	    {
	      PIND=PORTD;
	      g[2]=PIND&0x40;
	      motor_right (3,2,600);
	    }
	 
	  PIND=PORTD;
	  g[4]=PIND&0x20;
	  while(g[4]==0)
	    {
	      PIND=PORTD;
	      g[4]=PIND&0x20;
	      motor_right (3,2,600);
	    }
		 
	}  
//**************************************************//
//进样泵复位向上初使化
//**************************************************// 
 void  mustermotor_init (void)
   { 
	  PIND=PORTD;
	  g[3]=PIND&0x80;
	  while(g[3])
	   {
	     PIND=PORTD;
	     g[3]=PIND&0x80;
	     motor_left (4,4,400);
	   }
	      while(g[3]);
         OutputMotor(0x04,0x00,0x00);
	}
//**************************************************//
//升降臂下降清洗杯
//**************************************************//
 void  arm_down (uint  down)
   {
       unsigned  int  s;
       for (s=down;s>0;s--)
        {
          motor_left (1,8,800);
        }
	    OutputMotor(0x01,0x00,0x00);
   }
	
//***************************************************//
//进样泵0吸样1和进样
//any_muter进样多少  //updown 0排样//1吸样
//***************************************************//
  void  mustermotor_contorl (uint any_muter,uchar updown) 
  {    uint i;                                                
     if(updown)
      {
        for (i=0;i<any_muter;i++)
           {
             motor_right (4,4,350);
           }
      }
    else
      {
        for (i=0;i<any_muter;i++)
          {
            motor_left (4,4,350);
          }
      }
	       OutputMotor(0x04,0x00,0x00); 
  }
//**********************************************//
//旋转盘逆时针进样走一个齿
//**********************************************//
  void   plate_oneround  (void)       
  {    uint i;                     
       for(i=0;i<640;i++)
	     {
            motor_right (3,1,600);
         }
	        PIND=PORTD;
	        g[4]=PIND&0x20;
	        while(g[4]==0)
	         {
	           PIND=PORTD;
	           g[4]=PIND&0x20;
	           motor_right (3,1,600);
	         }
		    while(g[4]==0);
  }     
//***************************************************//
//旋转盘逆时针进样
//sample=0试剂 sample=1样品    
//sample_number 进样盘标号 
//***************************************************//
  void   plate_round  ( uchar newplate_number,uchar sample)        
 {  uint i,y;                                              
    if (sample)
      {  
	    if(newplate_number>30)
		   newplate_number=30;
	       if(newplate_number>=oldplate_number)
		   plate_sport=newplate_number-oldplate_number;
		   else
		   plate_sport=(newplate_number+30)-oldplate_number;
	          for(i=0;i<plate_sport;i++)
	             {
                  plate_oneround(); 
		         }
	              oldplate_number=newplate_number;
	  }
    else
      { 
	     if(newplate_number>5)
		    newplate_number=5;
            if(((newplate_number-1)*6)>=(oldplate_number-1))
		        plate_sport=((newplate_number-1)*6)-(oldplate_number-1); 
	        else
			    plate_sport=(((newplate_number-1)*6)+30)-(oldplate_number-1);
		  
		          for(i=0;i<plate_sport;i++)
	                {
	                  plate_oneround(); 
                    }
			          oldplate_number=(newplate_number-1)*6+1;
	   }
	              
	 if(oldplate_number>30)
	    oldplate_number-=30;
	  // OutputMotor(0x03,0x00,0x00);    
  }
//****************************************************//
//旋转臂进样出样控制
//n=0试剂 n=1样品 
//m=0逆时针  m=1顺时针
//v=0上半周  v=1下半周
//****************************************************//
 void  armround_control (uchar m ,uchar n, uchar v)    
 {  uint i,z;                                       
     if(v)                                             
	  {
	    if(n)
		z=3200;
	    else
		z=5300;
	  }
      else
		z=3000;	
      for(i=0;i<z;i++)
          {   
		    if(m)
		    motor_left (2,1,1000);
		    else
		    motor_right(2,1,1000);
		  }
		    PIND=PORTD;
	        g[5]=PIND&0x10;
		    while(g[5]==0)
			{
	           PIND=PORTD;
	           g[5]=PIND&0x10;
			   if(m)
		         motor_left(2,1,1000);
			   else 
				 motor_right (2,1,1000);
	          }
			if(v)
			  {
		        if(m)
			     {
				    if(n==0)
				      { 
				        // if(Debugger.add_sub==0)
						   // {
						      for(i=0;i<15+by_value;i++)
			                  { motor_left (2,1,1000);}
							//}
						 /*else
						    {
						      for(i=0;i<by_value;i++)
			                  { motor_right(2,1,1000);}
							}*/
					  }
				    else
				      { 
					     //if(Debugger.add_sub==0)
					      // {
						     for(i=0;i<(15+yp_value);i++)
			                  {  motor_left (2,1,1000);}
						  // }
						/* else
						    {
						     for(i=0;i<(yp_value);i++)
			                  {  motor_right (2,1,1000);}
						    }*/
				       }
				  }
			  }
		    else
			   {
			      for(i=0;i<(15+wz_value);i++)
	                {   
					  motor_right (2,1,1000);
				    }
			   } 
			   // OutputMotor(0x02,0x00,0x00);
	 }
//*****************************************************//
//旋转臂进样出样控制
//n=0试剂 n=1样品 
//v=0上半周  v=1下半周
//****************************************************//
/* void  armround_control (uchar n, uchar v)   
	 
  {  
     PIND=PORTD;
	 g[5]=PIND&0x10;
     if(v)
	  {
	     if(n)
		   {
		     while(g[5]==0)
			  {
	           PIND=PORTD;
	           g[5]=PIND&0x10;
			   motor_left(2,1,600);
	          }
		   }
		 else 
		   {
		      while(g[5]==0)
			   {
	             PIND=PORTD;
	             g[5]=PIND&0x10;
			     motor_left(2,1,600);
	           }
			  while(g[5])
			   {
	             PIND=PORTD;
	             g[5]=PIND&0x10;
			     motor_left(2,1,600);
	           } 
			   while(g[5]==0)
			   {
	             PIND=PORTD;
	             g[5]=PIND&0x10;
			     motor_left(2,1,600);
	           }
		    }
		 }
	else
	 {
	    while(g[5]==0)
		  {
	         PIND=PORTD;
	         g[5]=PIND&0x10;
			 motor_right(2,1,600);
	       }
		}
	 }
 */ 
                              
//*******************************************************//
//定时器1益出中断函数(3S定时)
//******************************************************//
#pragma  interrupt_handler TIMER1: 15
void   TIMER1  (void)
  {   uint i;
      EIMSK = 0x00;
	  TCNT1 = 0X78F5;
	  TCNT1 = 0X78F5;
	  switch(over_flag) 
	   { 
		 case 0:
		 TxdBuf[0]=0x00;
		 break;
		 case 1:
		 {
		   over_flag=0;
	       TxdBuf[0]=0x0A;
	       TCCR1B = 0x00;
		   break;
		  }
		 case 2:
		 {     
		 over_flag=0;
	     TxdBuf[0]=0x0B;
		 TCCR1B = 0x00;
		 break;
		 }
		 default:
		 break;
		 }   
		   PIND=PORTD;
	       TxdBuf[1]=PIND&0X3F;
	      // outportb(D12_COMMAND, 0xF2);
	       //D12_ReadLastTransactionStatus(3);
		   D12_WriteEndpoint(3,2,TxdBuf);
		   EIMSK = 0x01;
	      
   }
//*******************************************************//    
//写EEPROM
//******************************************************//
 void  write_eeprom  (void)
  {   uchar i;
       
      EIMSK = 0x00;
      i=EECR&0X02;
      while(i);
      switch( Debugger.place_number)         //选择EEP地址
       {
         case 0:                           
              EEAR=0X0001;
              break;
         case 1:
              EEAR=0X0002;
              break;
         case 2:
              EEAR=0X0003;
              break;
         case 3:
              EEAR=0X0004;
              break;
         default:
              break;
       }
             
          EEDR=Debugger.recoup_value;         //数据送入EEP
          EECR|=0X04;
          EECR|=0X02;
          EIMSK = 0x01;
  }
//**********************************************************//
//读EEPROM
//**********************************************************//
uchar  read_eeprom (uint  address)
  { uint i;
    EIMSK = 0x00; 
    i=EECR&0X02;
    while(i);   
    EEAR=address;
	EECR|=0X01;
    return EEDR;
	EIMSK = 0x01;
 }        
//***********************************************************//
//EEPROM数椐送入缓存
//***********************************************************//
 void   eeprom_value (void)
  {
	by_value=read_eeprom (0x0001);           //标液杯处误差
    yp_value=read_eeprom (0x0002);           //样品杯处误差
    wz_value=read_eeprom (0x0003);           //钨舟处误差
    zx_value=read_eeprom (0x0004);           //钨舟深度误差
    zx_value=zx_value*2;
   
  }
//**********************************************************//
//主函数
//**********************************************************//
void main(void)
{
   unsigned int  k,u;
   unsigned char Data;
   unsigned char StrLen;
   for(u=0;u<10000;u++);
  
   init_devices();                         //MCU初始化
   INT_Init();                             //设置中断
 
   eeprom_value();                         //读缓存中EEPROM的值
   PORTF = 0xFF;
   InitMotor(0x01);                        //四个步进电机初始化
   InitMotor(0x02); 
   InitMotor(0x03); 
   InitMotor(0x04); 
   OutputMotor(0x01,0x00,0x00);
   OutputMotor(0x02,0x00,0x00);
   OutputMotor(0x03,0x00,0x00);
   OutputMotor(0x04,0x00,0x00);
 
   PORTC = 0x00;
   MCUCR = 0x80;
//   SFIOR = 0X00;
   XMCRA = 0x00; 
   muster_init();                          //进样过程初始化                         
   
   EIMSK = 0x00;
   reconnect_USB();                        //重新连接USB
   EIMSK = 0x01;
 
   TCCR1A=0x00;
   TCCR1B =0x00;
   TCNT1 = 0X78F5;
   TCNT1 = 0X78F5;
	   
   while(1)
    {
       
	    if(configuration)                            //设备未配置返回
			;					    
		if (setup_packet)
		{                                             //Setup包处理
			EIMSK = 0x00;
			setup_packet = 0;
			EIMSK = 0x01;
			control_handler();                        //调用请求处理子程序
		}
	  	   
		     if(Work_flag)                             //进入工作状态
		       { 
		         Work_flag=0;
				 Work_flag=0;
				 if(Work.clear_select<2)
		         one_course ();                      //完成一次进样过程或用酸清洗
                 else if(Work.clear_select==2)
				 push_air();                          //进样泵推拉清洗   
		       }
            if(debug_flag==1)                            //进入调试状态
               {
                 debug_flag=0;
            if(Debugger.place_number<4)
                   write_eeprom(); 
			
			if(Debugger.place_number==6)
			    {  
                 switch( Debugger.init_place)          //旋转臂四个位置定位
                   { 
				      case 0:
					    {
                          arm_up ();
	                      armround_init();
	                      find_light();
						  break;
                        }
					  case 1:
					    {
					      arm_up ();
	                      armround_init();
	                      find_light();
						  armround_control (1,0,1);
						  break;
					    }
					 case 2:
					    {
					      arm_up ();
	                      armround_init();
	                      find_light();
						  armround_control (1,1,1);
						  break;
					    } 
					 case 3:
					    {
					      arm_up ();
						  armround_init();
						  find_light();
						  armround_control (0,1,0);
						  break;
					    }
					 default:
					     break;
				   }
			    }
			  
		     else if(Debugger.place_number==7)            //升降臂升降      
			     {
			      switch(Debugger.armup_down)
			        { 
				      OutputMotor(0x02,0x00,0x00);
				      case 0:
					    {
					       for(k=0;k< Debugger.setp_num;k++)
	                        { 
		                      motor_left (1,8,800);
		                    }
						   break;
					    }
					  case 1:
					    {
					      for(k=0;k< Debugger.setp_num;k++)
	                        { 
		                      motor_right (1,8,800);
		                    }
						   break;
					   }
					      default:
					      break;
				   }
				}
		 
		  else if(Debugger.place_number==4)
		      {      
			    if(Debugger.water_pump==1)         //水阀开关
                   PORTF&=0XFE;
                else
                   PORTF|=0X01;
			  } 
			   
		  else if(Debugger.place_number==5)
		       {               
                if(Debugger.air_pump==1)           //气阀开关
                   PORTF&=0XFC;
                else
                   PORTF|=0X02;
			   }
		
	      }
     }
 }








		  
		   
		   

⌨️ 快捷键说明

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