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

📄 _io.c

📁 全自动剥线机(C语言源码+DOC文档说明)
💻 C
📖 第 1 页 / 共 5 页
字号:
         *g_char_ptr = CN_CUTOPENLW;	
          g_thvalue = CNCUTTACCE[d_speed][d_counter*2];
          g_tlvalue = CNCUTTACCE[d_speed][d_counter*2+1];
          Delay_us(CN_10us);
         *g_char_ptr = CN_CUTOPENHG;
          for(;g_generalbit==TRUE;)
          {} /* wait for Timer0 interrupt. */
          g_generalbit=TRUE;
          if(d_counter==0)
          {
             break;
          }   
      }
      TR0 = 0; /* stop the Timer0. */
   }
   g_char_ptr = (uchar xdata *)AD_CUMOTOR;
  *g_char_ptr = CN_CUTCLOSHG; /* the cutter motor close direction. */
   TH0 = CNCUTTACCE[d_speed][0];
   TL0 = CNCUTTACCE[d_speed][1];
   g_generalbit = TRUE;
   TR0 = 1; /* start the Timer0. */
   if(TRUE==resetok)
   { 
      for(d_counter=0;d_counter<CN_RESETLIMIT;d_counter++) /* move cutter close, and catch the original point. */
      {
         g_char_ptr = (uchar xdata *)AD_CUMOTOR;
         Reset_Watchdog();
        *g_char_ptr = CN_CUTCLOSLW;	
         g_thvalue = CNCUTTACCE[d_speed][0];
         g_tlvalue = CNCUTTACCE[d_speed][1];
         Delay_us(CN_10us);
        *g_char_ptr = CN_CUTCLOSHG;
         if(AD_POSIN==CN_OVERZERO)
         {
            for(d_filter=0;d_filter<CN_FILTER;d_filter++)
            {
               if(AD_POSIN==CN_UNDERZERO)
               {  
                  d_filter = 0;
                  break;  
               }
            }
            if(d_filter>=CN_FILTER) /* by filter, the cutter is over zero truely. */
            {  break;  }  /* break the open cutter move. */
         }
         for(;g_generalbit==TRUE;)
         {} /* wait for Timer0 interrupt. */
         g_generalbit=TRUE;
      }
      if(d_counter>=CN_RESETLIMIT)
      { resetok = FALSE; }
   }   
   TR0 = 0; /* stop the Timer0. */
   
   return resetok;
}  

/***************************************************************************

NAME:       Cutter_Openmax

FUNCTION:   This procedure will open cutter to max position.  

INPUTS:     NONE

OUTPUTS:    NONE

***************************************************************************/
void Cutter_Openmax()
{
   uchar d_counter;
   uchar d_filter;
   uchar d_speed;
   
   g_char_ptr = (uchar xdata *)(AD_CURPROG+AD_RUNSPEED);
   d_speed = *g_char_ptr; /* get the current speed stage. */		
   AD_POSIN = 1;   /* cutter position detect enable. */
   g_char_ptr = (uchar xdata *)AD_CUMOTOR;
  *g_char_ptr = CN_CUTOPENHG; /* the cutter motor open direction. */
   TH0 = CNCUTTACCE[d_speed][0];
   TL0 = CNCUTTACCE[d_speed][1];
   g_generalbit = TRUE;
   d_filter = 0;
   TR0 = 1; /* start the Timer0. */
   for(d_counter=0;d_counter<CN_RESETLIMIT;d_counter++)
   {
      g_char_ptr = (uchar xdata *)AD_CUMOTOR;
      Reset_Watchdog();
     *g_char_ptr = CN_CUTOPENLW;
      if(d_counter<CNCUTACCSTEP)
      {
         g_thvalue = CNCUTTACCE[d_speed][d_counter*2];
         g_tlvalue = CNCUTTACCE[d_speed][d_counter*2+1];
      }
      else
      {   
         g_thvalue = CNCUTTACCE[d_speed][(CNCUTACCSTEP-1)*2];
         g_tlvalue = CNCUTTACCE[d_speed][(CNCUTACCSTEP-1)*2+1];
      }   
      Delay_us(CN_10us);
     *g_char_ptr = CN_CUTOPENHG;
      if(AD_POSIN==CN_UNDERZERO)
      {
         for(d_filter=0;d_filter<CN_FILTER;d_filter++)
         {
            if(AD_POSIN==CN_OVERZERO)
            {  
               d_filter = 0;
               break;  
            }
         }
      }
      for(;g_generalbit==TRUE;)
      {} /* wait for Timer0 interrupt. */
      if(d_filter>=CN_FILTER) /* by filter, the cutter is under zero truely. */
      {  break;  }  /* break the open cutter move. */
      g_generalbit=TRUE;
   }
   for(d_counter=0;d_counter<CN_UNDERZERODIST;d_counter++)
   {
      g_char_ptr = (uchar xdata *)AD_CUMOTOR;
      Reset_Watchdog();
     *g_char_ptr = CN_CUTOPENLW;
      if((CN_UNDERZERODIST-d_counter)<CNCUTACCSTEP)
      {
         g_thvalue = CNCUTTACCE[d_speed][(CN_UNDERZERODIST-d_counter-1)*2];
         g_tlvalue = CNCUTTACCE[d_speed][(CN_UNDERZERODIST-d_counter-1)*2+1];
      }
      else
      {
         g_thvalue = CNCUTTACCE[d_speed][(CNCUTACCSTEP-1)*2];
         g_tlvalue = CNCUTTACCE[d_speed][(CNCUTACCSTEP-1)*2+1];
      } 
      Delay_us(CN_10us);
     *g_char_ptr = CN_CUTOPENHG;
      for(;g_generalbit==TRUE;)
      {} /* wait for Timer0 interrupt. */
      g_generalbit=TRUE;
   }
   TR0 = 0; /* stop the Timer0. */
}

/***************************************************************************

NAME:       Dbmotor_Movedist

FUNCTION:   This procedure will make move two wire motor.  

INPUTS:     move pulse, move direction.

OUTPUTS:    NONE

***************************************************************************/
void Dbmotor_Movedist(uint d_dist, bit d_movedirect)
{
   idata uint d_counter;
   idata uint d_halfpulse; 
   idata uchar d_speed;
   uchar d_filter;
    	
   g_char_ptr = (uchar xdata *)(AD_CURPROG+AD_RUNSPEED);
   d_speed = *g_char_ptr; /* get the current wire move speed. */ 	
   g_char_ptr = (uchar xdata *)AD_WFMOTOR;
   if(d_movedirect==CN_MOTFRONT)
   { *g_char_ptr = CN_DBMOTGOHG; } /* the wire motor go front direction. */
   else
   { *g_char_ptr = CN_DBMOTBKHG; } /* the wire motor go back direction.  */
   TH0 = CNWIREACCE[d_speed][0];
   TL0 = CNWIREACCE[d_speed][1];
   d_halfpulse =(d_dist/2)+(d_dist%2);
   g_generalbit = TRUE;
   TR0 = 1; /* start the Timer0. */
   for(d_counter=0;d_counter<d_dist;d_counter++)
   {
      g_char_ptr = (uchar xdata *)AD_WFMOTOR;
      Reset_Watchdog();	
      if(d_movedirect==CN_MOTFRONT)
      { *g_char_ptr = CN_DBMOTGOLW; }
      else
      { *g_char_ptr = CN_DBMOTBKLW; }
      if(d_counter<d_halfpulse)  /* the accelerate stage.   */
      {
         if(d_counter<CNWIRESTEP)
         {
            g_thvalue = CNWIREACCE[d_speed][d_counter*2];
            g_tlvalue = CNWIREACCE[d_speed][d_counter*2+1];
         }
         else
         {   
            g_thvalue = CNWIREACCE[d_speed][(CNWIRESTEP-1)*2];
            g_tlvalue = CNWIREACCE[d_speed][(CNWIRESTEP-1)*2+1];
         }   
      } 
      else /* the decelerate stage. */
      {
         if((d_dist-d_counter)<CNWIRESTEP)
         {
            g_thvalue = CNWIREACCE[d_speed][(d_dist-d_counter-1)*2];
            g_tlvalue = CNWIREACCE[d_speed][(d_dist-d_counter-1)*2+1];
         }
         else
         {
            g_thvalue = CNWIREACCE[d_speed][(CNWIRESTEP-1)*2];
            g_tlvalue = CNWIREACCE[d_speed][(CNWIRESTEP-1)*2+1];
         }     	 
      }
      if(d_counter==CN_SHORTDELEN)
      {
      	 AD_LAMPIN = 1;  /* lamp detect input enable. */
         if(AD_LAMPIN==CN_NOWIRE)
         {
            for(d_filter=0;d_filter<CN_FILTER1;d_filter++)
            {
               if(AD_LAMPIN==CN_HAVEWIRE)
               {  
                  break;
               }
            }
            if(d_filter==CN_FILTER1)
            {
      	       g_wireshort = TRUE; /* wire short. */
      	       if(d_counter<d_dist-CNWIRESTEP)
      	       {
      	          d_counter = d_dist-CNWIRESTEP;
      	       }   
      	    }
      	    else
      	    {
      	       g_wireshort = FALSE; /* have wire. */
      	    }   
      	 }
      }	
      else
      {
         Delay_us(CN_10us);
      }   
      if(d_movedirect==CN_MOTFRONT)
      { *g_char_ptr = CN_DBMOTGOHG; }
      else
      { *g_char_ptr = CN_DBMOTBKHG; }
      for(;g_generalbit==TRUE;)
      {} /* wait for Timer0 interrupt. */
      g_generalbit=TRUE;
   }
   TR0 = 0; /* stop the Timer0. */
}   

/***************************************************************************

NAME:       Frontmotor_Movedist

FUNCTION:   This procedure will make move front wire motor.  

INPUTS:     move pulse, move direction.

OUTPUTS:    NONE

***************************************************************************/
void Frontmotor_Movedist(uint d_dist, bit d_movedirect)
{
   idata uint d_counter;
   idata uint d_halfpulse; 
   idata uchar d_speed;
    	
   g_char_ptr = (uchar xdata *)(AD_CURPROG+AD_RUNSPEED);
   d_speed = *g_char_ptr; /* get the current wire move speed. */ 	
   g_char_ptr = (uchar xdata *)AD_WFMOTOR;
   if(d_movedirect==CN_MOTFRONT)
   { *g_char_ptr = CN_FRMOTGOHG; } /* the wire motor go front direction. */
   else
   { *g_char_ptr = CN_FRMOTBKHG; } /* the wire motor go back direction.  */
   TH0 = CNWIREACCE[d_speed][0];
   TL0 = CNWIREACCE[d_speed][1];
   d_halfpulse =(d_dist/2)+(d_dist%2);
   g_generalbit = TRUE;
   TR0 = 1; /* start the Timer0. */
   for(d_counter=0;d_counter<d_dist;d_counter++)
   {
      g_char_ptr = (uchar xdata *)AD_WFMOTOR;	
      Reset_Watchdog();	
      if(d_movedirect==CN_MOTFRONT)
      { *g_char_ptr = CN_FRMOTGOLW; }
      else
      { *g_char_ptr = CN_FRMOTBKLW; }
      if(d_counter<d_halfpulse)  /* the accelerate stage.   */
      {
         if(d_counter<CNWIRESTEP)
         {
            g_thvalue = CNWIREACCE[d_speed][d_counter*2];
            g_tlvalue = CNWIREACCE[d_speed][d_counter*2+1];
         }
         else
         {   
            g_thvalue = CNWIREACCE[d_speed][(CNWIRESTEP-1)*2];
            g_tlvalue = CNWIREACCE[d_speed][(CNWIRESTEP-1)*2+1];
         }   
      } 
      else /* the decelerate stage. */
      {
         if((d_dist-d_counter)<CNWIRESTEP)
         {
            g_thvalue = CNWIREACCE[d_speed][(d_dist-d_counter-1)*2];
            g_tlvalue = CNWIREACCE[d_speed][(d_dist-d_counter-1)*2+1];
         }
         else
         {
            g_thvalue = CNWIREACCE[d_speed][(CNWIRESTEP-1)*2];
            g_tlvalue = CNWIREACCE[d_speed][(CNWIRESTEP-1)*2+1];
         }     	 
      }
      Delay_us(CN_10us);
      if(d_movedirect==CN_MOTFRONT)
      { *g_char_ptr = CN_FRMOTGOHG; }
      else
      { *g_char_ptr = CN_FRMOTBKHG; }
      for(;g_generalbit==TRUE;)
      {} /* wait for Timer0 interrupt. */
      g_generalbit=TRUE;
   }
   TR0 = 0; /* stop the Timer0. */
}
     
#if CN_BACKFORUP
/***************************************************************************

NAME:       Backmotor_Movedist

FUNCTION:   This procedure will make move back wire motor.  

INPUTS:     move pulse, move direction.

OUTPUTS:    NONE

***************************************************************************/
void Backmotor_Movedist(uint d_dist, bit d_movedirect)
{
   idata uint d_counter;
   idata uint d_halfpulse; 
   idata uchar d_speed;
    	
   g_char_ptr = (uchar xdata *)(AD_CURPROG+AD_RUNSPEED);
   d_speed = *g_char_ptr; /* get the current wire move speed. */ 	
   g_char_ptr = (uchar xdata *)AD_WFMOTOR;
   if(d_movedirect==CN_MOTFRONT)
   { *g_char_ptr = CN_BKMOTGOHG; } /* the wire motor go front direction. */
   else
   { *g_char_ptr = CN_BKMOTBKHG; } /* the wire motor go back direction.  */
   TH0 = CNWIREACCE[d_speed][0];
   TL0 = CNWIREACCE[d_speed][1];
   d_halfpulse =(d_dist/2)+(d_dist%2);
   g_generalbit = TRUE;
   TR0 = 1; /* start the Timer0. */
   for(d_counter=0;d_counter<d_dist;d_counter++)
   {
      g_char_ptr = (uchar xdata *)AD_WFMOTOR;	
      Reset_Watchdog();	
      if(d_movedirect==CN_MOTFRONT)
      { *g_char_ptr = CN_BKMOTGOLW; }
      else
      { *g_char_ptr = CN_BKMOTBKLW; }
      if(d_counter<d_halfpulse)  /* the accelerate stage.   */
      {
         if(d_counter<CNWIRESTEP)
         {
            g_thvalue = CNWIREACCE[d_speed][d_counter*2];
            g_tlvalue = CNWIREACCE[d_speed][d_counter*2+1];
         }
         else
         {   
            g_thvalue = CNWIREACCE[d_speed][(CNWIRESTEP-1)*2];
            g_tlvalue = CNWIREACCE[d_speed][(CNWIRESTEP-1)*2+1];
         }   
      } 
      else /* the decelerate stage. */
      {
         if((d_dist-d_counter)<CNWIRESTEP)
         {
            g_thvalue = CNWIREACCE[d_speed][(d_dist-d_counter-1)*2];
            g_tlvalue = CNWIREACCE[d_speed][(d_dist-d_counter-1)*2+1];
         }
         else
         {
            g_thvalue = CNWIREACCE[d_speed][(CNWIRESTEP-1)*2];
            g_tlvalue = CNWIREACCE[d_speed][(CNWIRESTEP-1)*2+1];
         }     	 
      }
      Delay_us(CN_10us);
      if(d_movedirect==CN_MOTFRONT)
      { *g_char_ptr = CN_BKMOTGOHG; }
      else
      { *g_char_ptr = CN_BKMOTBKHG; }
      for(;g_generalbit==TRUE;)

⌨️ 快捷键说明

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