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

📄 16f877_modbus.c

📁 ModBus通讯
💻 C
📖 第 1 页 / 共 5 页
字号:
        }
      }
      else{
        NumberDivide(*(point+XValue));
        for(i=0;i<16;i++){
          WriteData(NumberBuffer[i]);
        }
      }      
      LcdSelectBrush(line4,10);
      return;
    }
    case 3:{
      LcdSelectBrush(line1,Menu);
      
      switch(MainSlave&0x01){
        case 0x01:{
           WriteCommand(0x81);
           WriteData(0xb4);
           WriteData(0xd3);
           break;
        }
        case 0x00:{
           switch(State){
             case 0:{
               WriteCommand(0x81);
               WriteData(0xd6);
               WriteData(0xf7);
               break;
             }
             case 1:{
               WriteCommand(0x81);
               WriteData(0xb4);
               WriteData(0xd3);
               WriteData(0xa2);
               WriteData(0xd9);
               break;
             }
             case 2:{
               WriteCommand(0x81);
               WriteData(0xb4);
               WriteData(0xd3);
               WriteData(0xa2);
               WriteData(0xda);
               break;
             }
             case 3:{
               WriteCommand(0x81);
               WriteData(0xb4);
               WriteData(0xd3);
               WriteData(0xa2);
               WriteData(0xdb);
               break;
             }
             default:{
               State=0;
               WriteData(0xd6);
               WriteData(0xf7);
             }
           }
           break;
        }
        default:{
          ;
        }
      }
      if(XValue==0x17){
        switch(MainSlave&0x01){
          case 0:{
            LcdValueBrush(line2,0x17);
          }
          break;
          case 1:{
            LcdSelectBrush(line2,21);
          }
          break;
          default:;
        }
      }
      else LcdValueBrush(line2,XValue);
      
      LcdSelectBrush(line3,9);
      WriteCommand(line3);
      if(XValue==0x17){
        for(i=0;i<8;i++){
          WriteData(0x20);
        }
        WriteData(0xa3);
        WriteData(State+0xb0);
        for(i=0;i<6;i++){
          WriteData(0x20);
        }
      }
      else{
        NumberDivide(*(point+XValue));
        for(i=0;i<16;i++){
          WriteData(NumberBuffer[i]);
        }
      }
      
      LcdSelectBrush(line4,11);
      return;
      
    }
    default:return;
  }
}
/*******************************************************************************
* Function Name  : NumberDivide
* Description    : NumberDivide
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void NumberDivide(uint n)
{ 
  if(XValue==0x05){
    NumberBuffer[0]=0x20;
    NumberBuffer[1]=0x20;
    NumberBuffer[2]=0x20;
    NumberBuffer[3]=0x20;
    
    NumberBuffer[4]=0x4d;
    NumberBuffer[5]=0x6f;
    NumberBuffer[6]=0x64;
    NumberBuffer[7]=0x65;
    
    NumberBuffer[8]=0x42;
    NumberBuffer[9]=0x75;
    NumberBuffer[10]=0x73;
    NumberBuffer[11]=0x20;
    
    NumberBuffer[12]=0x20;
    NumberBuffer[13]=0x20;
    NumberBuffer[14]=0x20;
    NumberBuffer[15]=0x20;
    return;
  }
  if(XValue==0x0b){
    NumberBuffer[0]=0x20;
    NumberBuffer[1]=0x20;
    NumberBuffer[2]=0x20;
    NumberBuffer[3]=0x20;
    
    NumberBuffer[4]=0x20;
    NumberBuffer[5]=0x20;
    NumberBuffer[6]=0x20;
    NumberBuffer[7]=0x20;
    
    NumberBuffer[8]=0x20;
    NumberBuffer[9]=0x20;
    NumberBuffer[10]=0x20;
    NumberBuffer[11]=0x20;
    
    NumberBuffer[12]=0x20;
    NumberBuffer[13]=0x20;
    NumberBuffer[14]=0x20;
    NumberBuffer[15]=0x20;
    return;
  }
  if(XValue==0x0c){
    NumberBuffer[0]=0x20;
    NumberBuffer[1]=0x20;
    NumberBuffer[2]=0x20;
    NumberBuffer[3]=0x20;
    
    NumberBuffer[4]=0x20;
    NumberBuffer[5]=0x20;
    NumberBuffer[6]=0x20;
    NumberBuffer[7]=0x20;
    
    NumberBuffer[8]=0x20;
    NumberBuffer[9]=0x20;
    NumberBuffer[10]=0x20;
    NumberBuffer[11]=0x20;
    
    NumberBuffer[12]=0x20;
    NumberBuffer[13]=0x20;
    NumberBuffer[14]=0x20;
    NumberBuffer[15]=0x20;
    return;
  }
  NumberBuffer[0]=0x20;
  NumberBuffer[1]=0x20;
  switch(PointTable[XValue]){
    case 0:{
      if(n>=1000){
        NumberBuffer[2]=0x20;
        NumberBuffer[3]=0x20;
        
        NumberBuffer[4]=0xa3;
        NumberBuffer[5]=(n/1000+0xB0);
        NumberBuffer[6]=0xa3;
        NumberBuffer[7]=((n%1000)/100+0xb0);
        NumberBuffer[8]=0xa3;
        NumberBuffer[9]=((n%100)/10+0xb0);
        NumberBuffer[10]=0xa3;
        NumberBuffer[11]=((n%10)+0xb0);
        break;
      }
      if(n>=100){
        NumberBuffer[2]=0x20;
        NumberBuffer[3]=0x20;
        NumberBuffer[4]=0x20;
        NumberBuffer[5]=0x20;
        NumberBuffer[6]=0xa3;
        NumberBuffer[7]=((n/100)+0xb0);
        NumberBuffer[8]=0xa3;
        NumberBuffer[9]=((n%100)/10+0xb0);
        NumberBuffer[10]=0xa3;
        NumberBuffer[11]=(n%10+0xb0);
        break;
      }
      if(n>=10){
        NumberBuffer[2]=0x20;
        NumberBuffer[3]=0x20;
        NumberBuffer[4]=0x20;
        NumberBuffer[5]=0x20;
        NumberBuffer[6]=0x20;
        NumberBuffer[7]=0x20;
        NumberBuffer[8]=0xa3;
        NumberBuffer[9]=(n/10+0xb0);
        NumberBuffer[10]=0xa3;
        NumberBuffer[11]=(n%10+0xb0);
        break;
      }
      
        NumberBuffer[2]=0x20;
        NumberBuffer[3]=0x20;
        NumberBuffer[4]=0x20;
        NumberBuffer[5]=0x20;
        NumberBuffer[6]=0x20;
        NumberBuffer[7]=0x20;
        NumberBuffer[8]=0x20;
        NumberBuffer[9]=0x20;
        NumberBuffer[10]=0xa3;
        NumberBuffer[11]=(n+0xb0);
        break;        
     
    }
    case 1:{
      if(n>=1000){  
        NumberBuffer[2]=0xa3;
        NumberBuffer[3]=(n/1000+0xB0);
        NumberBuffer[4]=0xa3;
        NumberBuffer[5]=((n%1000)/100+0xb0);
        NumberBuffer[6]=0xa3;
        NumberBuffer[7]=((n%100)/10+0xb0);
        NumberBuffer[8]=0xa3;
        NumberBuffer[9]=0xae;
        NumberBuffer[10]=0xa3;
        NumberBuffer[11]=((n%10)+0xb0);
        break;
      }
      if(n>=100){
        NumberBuffer[2]=0x20;
        NumberBuffer[3]=0x20;
        NumberBuffer[4]=0xa3;
        NumberBuffer[5]=(n/100+0xb0);
        NumberBuffer[6]=0xa3;
        NumberBuffer[7]=((n%100)/10+0xb0);
        NumberBuffer[8]=0xa3;
        NumberBuffer[9]=0xae;
        NumberBuffer[10]=0xa3;
        NumberBuffer[11]=((n%10)+0xb0);
        break;
      }
      if(n>=10){
        NumberBuffer[2]=0x20;
        NumberBuffer[3]=0x20;
        NumberBuffer[4]=0x20;
        NumberBuffer[5]=0x20;
        NumberBuffer[6]=0xa3;
        NumberBuffer[7]=(n/10+0xb0);
        NumberBuffer[8]=0xa3;
        NumberBuffer[9]=0xae;
        NumberBuffer[10]=0xa3;
        NumberBuffer[11]=(n%10+0xb0);
        break;
      }
      
        NumberBuffer[2]=0x20;
        NumberBuffer[3]=0x20;
        NumberBuffer[4]=0x20;
        NumberBuffer[5]=0x20;
        NumberBuffer[6]=0xa3;
        NumberBuffer[7]=0xb0;
        NumberBuffer[8]=0xa3;
        NumberBuffer[9]=0xae;
        NumberBuffer[10]=0xa3;
        NumberBuffer[11]=(n+0xb0);
        break;
     
    }
    case 2:{
      if(n>=1000){  
        NumberBuffer[2]=0xa3;
        NumberBuffer[3]=(n/1000+0xB0);
        NumberBuffer[4]=0xa3;
        NumberBuffer[5]=((n%1000)/100+0xb0);
        NumberBuffer[6]=0xa3;
        NumberBuffer[7]=0xae;
        NumberBuffer[8]=0xa3;
        NumberBuffer[9]=((n%100)/10+0xb0);
        NumberBuffer[10]=0xa3;
        NumberBuffer[11]=((n%10)+0xb0);
        break;
      }
      if(n>=100){
        NumberBuffer[2]=0x20;
        NumberBuffer[3]=0x20;
        NumberBuffer[4]=0xa3;
        NumberBuffer[5]=(n/100+0xb0);
        NumberBuffer[6]=0xa3;
        NumberBuffer[7]=0xae;
        NumberBuffer[8]=0xa3;
        NumberBuffer[9]=((n%100)/10+0xb0);
        NumberBuffer[10]=0xa3;
        NumberBuffer[11]=((n%10)+0xb0);
        break;
      }
      if(n>=10){
        NumberBuffer[2]=0x20;
        NumberBuffer[3]=0x20;
        NumberBuffer[4]=0xa3;
        NumberBuffer[5]=0xb0;
        
        NumberBuffer[6]=0xa3;
        NumberBuffer[7]=0xae;
        
        NumberBuffer[8]=0xa3;
        NumberBuffer[9]=(n/10+0xb0);
        NumberBuffer[10]=0xa3;
        NumberBuffer[11]=(n%10+0xb0);
        break;
      }
     
        NumberBuffer[2]=0x20;
        NumberBuffer[3]=0x20;
        NumberBuffer[4]=0xa3;
        NumberBuffer[5]=0xb0;
        
        NumberBuffer[6]=0xa3;
        NumberBuffer[7]=0xae;
        
        NumberBuffer[8]=0xa3;
        NumberBuffer[9]=0xb0;
        NumberBuffer[10]=0xa3;
        NumberBuffer[11]=(n+0xb0);
        break;
     
    }
  }
  NumberBuffer[12]=0x20;
  NumberBuffer[13]=0x20;
  NumberBuffer[14]=0xa3;
  NumberBuffer[15]=SigneTable[XValue];
}
/*******************************************************************************
* Function Name  : SendDataHandle
* Description    : SendDataHandle
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void SendDataHandle(void)
{
  uchar i,n=0;
  if(SendFlag>0){
    SendFlag--;
    if(Buffer0PointOut==Buffer0PointIn){
      SendFlag=0;
      return;
    }
    DataPoint=data_buf0;
    for(i=0;i<6;i++){
      *DataPoint++=*Buffer0PointOut++;
      if(Buffer0PointOut==Buffer0+159)Buffer0PointOut=Buffer0;
    }  
RES:
   n++;
   if(n==3){
     LcdErro=1; 
     LcdSelectBrush(line3,23);
     return;
   }
   for(i=0;i<9;i++){
    data_buf[i]=data_buf0[i];
   }
   UsartSendMain(6);
   while(MainSendNoack==0){
     UsartReceveSlave();
     if(rece_ok==1){
       rece_ok=0;
       if(data_buf[1]==0x86)goto RES;
       return;
     }
   }
   MainSendNoack=0;
   LcdErro=1; 
   LcdSelectBrush(line3,20);
   return;
  }
  else{
    Buffer0PointOut=Buffer0;
    Buffer0PointIn=Buffer0; 
  }
}
/*******************************************************************************
* Function Name  : Check
* Description    : Check
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void Check(void)
{
          if(LcdFlag==0)return;;
          LcdFlag=0;
          LcdScanTime++;
          if(LcdScanTime<100)return;
          LcdScanTime=0;
          if((MainSlave&0x01)==0){
            
            data_buf[0]=1;
            data_buf[1]=3;
            data_buf[2]=0;
            data_buf[3]=0x1c;
            data_buf[4]=0;
            data_buf[5]=1;
            UsartSendMain(6);
            while(MainSendNoack==0){
              CLRWDT;
              UsartReceveSlave();
              if(rece_ok==1){
                rece_ok=0;
                if(data_buf[1]==0x83)break;
                buffer.b[1]=data_buf[3];
                buffer.b[0]=data_buf[4];
                x_number1[0x1c]=buffer.a;
                break;
              }
            }
            MainSendNoack=0;
            
                        data_buf[0]=1;
            data_buf[1]=3;
            data_buf[2]=0;
            data_buf[3]=0x1d;
            data_buf[4]=0;
    

⌨️ 快捷键说明

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