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

📄 main.c

📁 柴油发动机的电控PID代码。平台freescale的MC9S12DZ60单片机。核心算法
💻 C
📖 第 1 页 / 共 5 页
字号:
      sdstrm(MODE3NI,(unsigned char *)&max.rksp,0,0);
      sdstrm(MODE3NI,(unsigned char *)&min.rksp,0,1);
      break;
    }
    case MODE4:
    {
      summ = 0;
      sdstrm(1,(unsigned char *)&mnt.arg1,0,0);
      sdstrm(1,(unsigned char *)&mnt.arg4,0,0);
      sdstrm(1,(unsigned char *)&mnt.arg15,0,0);
      break;
    }
    case MODE5:
    {
      summ = 0;
      sdstrm(MODE5N1,(unsigned char *)&nrm.rksp,1,1);
      summ = 0;
      sdstrm(MODE5N2,(unsigned char *)&nrm.rksp1,1,1);
      summ = 0;
      sdstrm(MODE5N3,(unsigned char *)&nrm.egrkp,1,1);
      //
      summ = 0;
      sdstrm(MODE5N1,(unsigned char *)&max.rksp,1,1);
      summ = 0;
      sdstrm(MODE5N2,(unsigned char *)&max.rksp1,1,1);
      summ = 0;
      sdstrm(MODE5N3,(unsigned char *)&max.egrkp,1,1);
      //
      summ = 0;
      sdstrm(MODE5N1,(unsigned char *)&min.rksp,1,1);
      summ = 0;
      sdstrm(MODE5N2,(unsigned char *)&min.rksp1,1,1);
      summ = 0;
      sdstrm(MODE5N3,(unsigned char *)&min.egrkp,1,1); 
      break;
    }
    case MODE7:
    {
      summ = 0;
      sdstrm(MODE7N,(unsigned char *)&oil.lmt1,1,1);
      break;
    }
    case MODE8:
    {
      summ = 0;
      sdstrm(MODE8N,(unsigned char *)rotation,1,1);
      break;
    }
    default:
      break;
  }
}
/****************************************************************************
* 函数名称:compcsave(uchar modenum)																												
* 函数功能:串口pc读取命令处理程序																							
* 入口参数:void																														
* 出口参数:无																														
****************************************************************************/
void compcsave(void)
{
  uchar tempp;
  switch(cmdstr[1])
  {
    case MODE3:
    {
      tempp = write_eeprom(&enrm.rksp,&nrm.rksp,MODE3N);
      sdstrm(0,&tempp,0,0);
      break;
    }
    case MODE7:
    {
      tempp = write_eeprom(&eoil.lmt1,&oil.lmt1,MODE7N);
      sdstrm(0,&tempp,0,0);
      break;
    }
    case MODE8:
    {
      tempp = write_eeprom(erotation,rotation,MODE8N);
      sdstrm(0,&tempp,0,0);
      break;
    }
    default:
      break;
  }
}

/****************************************************************************
* 函数名称:revcmd()																												
* 函数功能:读串口缓冲区																							
* 入口参数:len 读取字节个数																													
* 出口参数:无																														
****************************************************************************/
void revcmd(uchar len,uint timeout)
{
  uint cnt = 0;
  //保证inbuf有至少2个字节
  while ( ((inlast >= getlast) && ((inlast -getlast) < len)) 
          || ((inlast<getlast) && ((ILEN-(getlast-inlast))<len)) )
  {
    cnt += 10;
    if(cnt>timeout)
    break;
  }             
 
  if ( !( ((inlast >= getlast) && ((inlast -getlast) < len)) 
        || ((inlast<getlast) && ((ILEN-(getlast-inlast))<len)) ) )
  {
    SCI0CR2 &= ~SCI0CR2_RIE_MASK;//disable receive interrupt
    for (cnt=0; cnt<len; cnt++)
    {
      cmdstr[cnt] = *getlast;
      getlast++;
      if (getlast == inbuf + ILEN)
      {
        getlast = inbuf;
      }
      if (getlast == inlast)
      {
        inbufsign = 0;//接收缓冲区空
      }
    }
    SCI0CR2 |= SCI0CR2_RIE_MASK;//enable receive interrupt
      
    if (cmdstr[0] == PCREAD)
    {
      compcread();
      //break;
    }
    else if (cmdstr[0] == PCSAVE)
    {
      compcsave();
      //break;
      }
    else if (cmdstr[0] == PCPLUS)
    {
      pinc(1,0);
    }
    else if (cmdstr[0] == PCMINUS)
    {
      pinc(0,0);
    }
    else if (cmdstr[0] == PCFPLUS)
    {
      pinc(1,1);
    }
    else if (cmdstr[0] == PCFMINUS)
    {
      pinc(0,1);
    } 
    
  }
  
  //cmdstr[cnt] = 0;
  //getlast = inbuf;
  //inlast = inbuf;
  //inbufsign = 0;
  //inbufful = 0;
}

/****************************************************************************
* 函数名称:spcomf()																												
* 函数功能:串口命令处理程序,读取接收缓冲区命令,做相应处理																							
* 入口参数:无																														
* 出口参数:无																														
****************************************************************************/
//void spcomf(uchar cmd)
//{
//  uchar tempp;
//  tempp = cmd;
  
  //sptemp = SCI0SR1;
    
  /*if(inbufsign == 1) 
  {
    tempp = cmd;
    getlast++;
    
    if(getlast == inbuf+ILEN)
    {
      getlast = inbuf;
    }
    if(getlast == inlast)
    {
      inbufsign = 0;
    }    */
    
    //tempp = 0x84;   //for debug
    /*sptemp = tempp & 0xf0;
    switch (sptemp)
    {
      case MODE1:
        sptemp = tempp & 0x0f;
        if(sptemp == M1READ) 
        {
          summ = 0;
          sdstrm(MODE1N,(unsigned char *)&mnt.arg1,1,1);
          break;
        }
        else break;
        //
        //
      case MODE2:
        sptemp = tempp & 0x0f;
        if(sptemp == M2READ)
        {
          summ = 0;
          sdstrm(MODE2N,(unsigned char *)&nrm.rksp,1,1);
          break;
        }
        //
        else if(sptemp == M2INCR)
        {
          ii++;
          pinc(1,0);
          break;
        }
        //
        else if(sptemp == M2DECR)
        {
          ii++;
          pinc(0,0);
          break;
        }
        //
        else if(sptemp == M2FINCR)
        {
          ii++;
          pinc(1,1);
          break;
        }
        //
        else if(sptemp == M2FDECR)
        {
          ii++;
          pinc(0,1);
          break;
        }
        else break;
        //
        //
      case MODE3: 
        sptemp = tempp & 0x0f;
        if(sptemp == M3READ) 
        {
          summ = 0;
          sdstrm(MODE3NI,(unsigned char *)&nrm.rksp,1,0);
          sdstrm(MODE3NI,(unsigned char *)&max.rksp,0,0);
          sdstrm(MODE3NI,(unsigned char *)&min.rksp,0,1);
          break;
        }        */
        //
      /*  else if(sptemp == M3READFC)
        {
          init_para_frcd(1);
          summ = 0;
          sdstrm(MODE3NI,(unsigned char *)&nrm.rksp,1,0);
          sdstrm(MODE3NI,(unsigned char *)&max.rksp,0,0);
          sdstrm(MODE3NI,(unsigned char *)&min.rksp,0,1);
          break;
        } */
        //
       /* else if(sptemp == M3SPEED)
        {
          summ = 0;
          sdstrm(2,(unsigned char *)&mnt.arg1,0,0);
          break;
        }
        //
        else if(sptemp == M3INCR)
        {
          ii++;
          pinc(1,0);
          break;
        }
        //
        else if(sptemp == M3DECR)
        {
          ii++;
          pinc(0,0);
          break;
        }
        //
        else if(sptemp == M3FINCR)
        {
          ii++;
          pinc(1,1);
          break;
        }
        //
        else if(sptemp == M3FDECR)
        {
          ii++;
          pinc(0,1);
          break;
        }
        //
        else if(sptemp == M3STORE)
        {
          tempp = write_eeprom(&enrm.rksp,&nrm.rksp,MODE3N);
          sdstrm(0,&tempp,0,0);
          break;
        }
        //
        else break;
        //
        //
      case MODE4:    //send fb_rot,fb_exe and fb_egr to pc,which draw according line
        sptemp = tempp & 0x0f;
        if(sptemp == M4READ)
        {
          summ = 0;
          sdstrm(1,(unsigned char *)&mnt.arg1,0,0);
          sdstrm(1,(unsigned char *)&mnt.arg4,0,0);
          sdstrm(1,(unsigned char *)&mnt.arg15,0,0);
          break;
        }        */
       /* else if(sptemp == M4SHAKE)
        {
          tempp++;
          summ = 0;
          sdstrm(0,&tempp,0,0);
          break;
        }   */
        /*else break;  
        //
        //
      case MODE5:
        sptemp = tempp & 0x0f;
        if(sptemp == M5READ)
        {
          summ = 0;
          sdstrm(MODE5N1,(unsigned char *)&nrm.rksp,1,1);
          summ = 0;
          sdstrm(MODE5N2,(unsigned char *)&nrm.rksp1,1,1);
          summ = 0;
          sdstrm(MODE5N3,(unsigned char *)&nrm.egrkp,1,1);
          //
          summ = 0;
          sdstrm(MODE5N1,(unsigned char *)&max.rksp,1,1);
          summ = 0;
          sdstrm(MODE5N2,(unsigned char *)&max.rksp1,1,1);
          summ = 0;
          sdstrm(MODE5N3,(unsigned char *)&max.egrkp,1,1);
          //
          summ = 0;
          sdstrm(MODE5N1,(unsigned char *)&min.rksp,1,1);
          summ = 0;
          sdstrm(MODE5N2,(unsigned char *)&min.rksp1,1,1);
          summ = 0;
          sdstrm(MODE5N3,(unsigned char *)&min.egrkp,1,1); 
          //
          break;          
        }
        //
        else if(sptemp == M5INCR)
        {
          ii++;
          pinc(1,0);
          break;
        }
        //
        else if(sptemp == M5DECR)
        {
          ii++;
          pinc(0,0);
          break;
        }
        //
        else break;
        //
        //
      case MODE7:
      {
        sptemp = tempp & 0x0f;
        if(sptemp == M7READ)
        {
          summ = 0;
          sdstrm(MODE7N,(unsigned char *)&oil.lmt1,1,1);
          break;
        }     */
        //
       /* else if(sptemp == M7READFC)
        {
          init_para_frcd(2);
          summ = 0;
          sdstrm(MODE7N,(unsigned char *)&oil.lmt1,1,1);
          break;
        }*/
        //
        /*else if(sptemp == M7SPEED)
        {
          summ = 0;
          sdstrm(2,(unsigned char *)&mnt.arg1,0,0);
          break;
        }
        //
        else if(sptemp == M7INCR)
        {
          ii++;
          pinc(1,0);
          break;
        }
        //
        else if(sptemp == M7DECR)
        {
          ii++;
          pinc(0,0);
          break;
        }
        //
        else if(sptemp == M7FINCR)
        {
          ii++;
          pinc(1,1);
          break;
        }
        //
        else if(sptemp == M7FDECR)
        {
          ii++;
          pinc(0,1);
          break;
        }
        //
        else if(sptemp == M7STORE)
        {
          tempp = write_eeprom(&eoil.lmt1,&oil.lmt1,MODE7N);
          sdstrm(0,&tempp,0,0);
          break;
        }
        else break;
      }
      case MODE8:
      {
        sptemp = tempp & 0x0f;
        if(sptemp == M8READ)
        {
          summ = 0;
          sdstrm(MODE8N,(unsigned char *)rotation,1,1);
          break;
        }  */
        //
       /* else if(sptemp == M7READFC)
        {
          init_para_frcd(2);
          summ = 0;
          sdstrm(MODE7N,(unsigned char *)&oil.lmt1,1,1);
          break;
        }*/
        //
       /* else if(sptemp == M8SPEED)
        {
          summ = 0;
          sdstrm(2,(unsigned char *)&mnt.arg1,0,0);
          break;
        }
        //
        else if(sptemp == M8INCR)
        {
          ii++;
          pinc(1,0);
          break;
        }
        //
        else if(sptemp == M8DECR)
        {
          ii++;
          pinc(0,0);
          break;
        }
        //
        else if(sptemp == M8FINCR)
        {
          ii++;
          pinc(1,1);
          break;
        }
        //
        else if(sptemp == M8FDECR)
        {
          ii++;
          pinc(0,1);
          break;
        }
        //
        else if(sptemp == M8STORE)
        {
            //DisableInterrupts;  //开中断  
          tempp = write_eeprom(erotation,rotation,MODE8N);
                  //&& write_eeprom(eegr[0],egr[0],100);   
           /

⌨️ 快捷键说明

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