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

📄 03.c

📁 msp430和nrf905的例子,联系qqliuyong007@163.com
💻 C
字号:
void readregister(void)//功能码3,读取保持寄存器的值
{
 unsigned char j=0;
 unsigned short m;
 unsigned short li=0;
 unsigned char *p;
 unsigned char k=0;
 //k=2*(rxbuf[3]+rxbuf[5]-0x40)-1;
  txbuf[0]=rxbuf[0];
  txbuf[1]=rxbuf[1];
  txbuf[2]=rxbuf[5];                //?
  li=(rxbuf[2]<<8)+rxbuf[3]-40000;
  li=li/100;
 switch(li)
 {
   case 0:
       k=2*(rxbuf[3]+rxbuf[5]-0x40)-1;
      // p=(unsigned char *)&SPI.dqdatatime.lowsecond;
      p=(unsigned char *)&SPI.I[0];
       for(m=2*(rxbuf[3]-0x40);m<k;m=m+2)
         {
          txbuf[4+j]=*(p+m+1);
          txbuf[3+j]=*(p+m);
          j=j+2;
         }
        break;
   case 1:
   k=2*(rxbuf[3]+rxbuf[5]-0xA4)-1;
       p=(unsigned char *)&myMAXMIN.imaxmin[0][0];
       for(m=2*(rxbuf[3]-0xA4);m<k;m=m+2)
         {
          txbuf[4+j]=*(p+m+1);
          txbuf[3+j]=*(p+m);
          j=j+2;
         }
        break;
     case 2:
     k=2*(rxbuf[3]+rxbuf[5]-0x08)-1;
       p=(unsigned char *)&myNeed.NEEDI[0];
       for(m=2*(rxbuf[3]-0x08);m<k;m=m+2)
         {
          txbuf[4+j]=*(p+m+1);
          txbuf[3+j]=*(p+m);
          j=j+2;
         }
        break;
     case 3:            //最大最小值MODBUS寄存器
     k=2*(rxbuf[3]+rxbuf[5]-0x6C)-1;
       p=(unsigned char *)&myXIEBO.uhwave[0][0];
       for(m=2*(rxbuf[3]-0x6C);m<k;m=m+2)
         {
          txbuf[4+j]=*(p+m+1);
          txbuf[3+j]=*(p+m);
          j=j+2;
         }
        break;
     case 4:            //时间MODBUS寄存器
     k=2*(rxbuf[3]+rxbuf[5]-0xD0)-1;
       p=(unsigned char *)&mytime.tmimaxmin[0][0];
       for(m=2*(rxbuf[3]-0xD0);m<k;m=m+2)
         {
          txbuf[4+j]=*(p+m+1);
          txbuf[3+j]=*(p+m);
          j=j+2;
         }
        break;  
       
     case 5:
      if(rxbuf[3]<0x3e)
      {
       k=2*(rxbuf[3]+rxbuf[5]-0x34)-1;
       m=2*(rxbuf[3]-0x34);
       p=(unsigned char *)&rel;
       }
       else
        { k=2*(rxbuf[3]+rxbuf[5]-0x3e)-1;
          m=2*(rxbuf[3]-0x3e); 
          p=(unsigned char *)&Fixedvalue.alarm[0]; 
         }   
       
       for(;m<k;m=m+2)
         {
          txbuf[4+j]=*(p+m+1);
          txbuf[3+j]=*(p+m);
          j=j+2;
         }
        break;
       
    case 6:
    k=2*(rxbuf[3]+rxbuf[5]-0x98)-1;
       p=(unsigned char *)&againfee.timenumber;
       for(m=2*(rxbuf[3]-0x98);m<k;m=m+2)
         {
          txbuf[4+j]=*(p+m+1);
          txbuf[3+j]=*(p+m);
          j=j+2;
         }
        break;
    case 10:
    k=2*(rxbuf[3]+rxbuf[5]-0x28)-1;
       p=(unsigned char *)&eventnote.UNIXti;
       for(m=2*(rxbuf[3]-0x28);m<k;m=m+2)
         {
          txbuf[4+j]=*(p+m+1);
          txbuf[3+j]=*(p+m);
          j=j+2;
         }
        break;
   case 20:
   k=2*(rxbuf[3]+rxbuf[5]-0x10)-1;
       p=(unsigned char *)&systemsetup;
       for(m=2*(rxbuf[3]-0x10);m<k;m=m+2)
         {
          txbuf[4+j]=*(p+m+1);
          txbuf[3+j]=*(p+m);
          j=j+2;
         }
        break;
    case 21:
    k=2*(rxbuf[3]+rxbuf[5]-0x74)-1;
       p=(unsigned char *)&systemsetup1;
       for(m=2*(rxbuf[3]-0x74);m<k;m=m+2)
         {
          txbuf[4+j]=*(p+m+1);
          txbuf[3+j]=*(p+m);
          j=j+2;
         }
        break;
     case 22://模拟输入量未编
     k=2*(rxbuf[3]+rxbuf[5]-0xD8)-1;
       p=(unsigned char *)&systemsetup1;
       for(m=2*(rxbuf[3]-0xD8);m<k;m=m+2)
         {
          txbuf[4+j]=*(p+m+1);
          txbuf[3+j]=*(p+m);
          j=j+2;
         }
        break;
    default:
    answernum=0x03;
    exceptionalanswer();
    break;
    }
  
  
 if(answernum==0x00)
 { 
  T16=crc16(txbuf,2*rxbuf[5]+3);
  high8=T16 >> 8;
  low8=T16 & 0xff; 
  txbuf[2*rxbuf[5]+3]=high8;
  txbuf[2*rxbuf[5]+4]=low8;
  P3OUT |= BIT7; 
   i=0;                         //P1.1为高电平为发送模式
 do 
  {
 // while((IFG1 & UTXIFG0) == 0) 
  TXBUF1=txbuf[i];
	while((IFG2 & UTXIFG1) == 0)     // USART0 TX buffer ready?
	{
	_NOP();
	}
   i++;	
  }while(i<=(2*rxbuf[5]+4));
 }  
	flag.transfer_ok=TRUE;
  i=0;
  answernum=0x00;
		     for(i=0;i<140;i++)
     {
     rxbuf[i]=0;
     txbuf[i]=0;
     }				   
}

⌨️ 快捷键说明

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