51单片机Modbus_RTU
void presetSingleRegister(void) //设置单个寄存器 { U8 addr; U8 tempAddr; U8 setCount; U16 crcData; U16 tempData; //addr = (receBuf[2]<<8) + receBuf[3]; //tempAddr = addr & 0xfff; addr = receBuf[3]; tempAddr = addr; //& 0xff tempData = ( receBuf[4]<<8 ) + receBuf[5]; setRegisterVal(tempAddr,tempData); sendBuf[0] = localAddr; sendBuf[1] = 6; sendBuf[2] = addr >> 8; sendBuf[3] = addr & 0xff; sendBuf[4] = receBuf[4]; sendBuf[5] = receBuf[5] ; setCount = 6; //共6个字节 crcData = crc16(sendBuf,6); sendBuf[6] = crcData >> 8; sendBuf[7] = crcData & 0xff; sendCount = 8; beginSend(); } //设置多个寄存器 void presetMultipleRegisters(void) { UINT8 addr; UINT8 tempAddr; UINT8 byteCount; UINT8 setCount; UINT16 crcData; UINT16 tempData; UINT8 i; //addr = (receBuf[2]<<8) + receBuf[3]; //tempAddr = addr & 0xfff; addr = receBuf[3]; tempAddr = addr & 0xff; //setCount = (receBuf[4]<<8) + receBuf[5]; setCount = receBuf[5]; byteCount = receBuf[6]; for (i = 0; i < setCount; i++, tempAddr++) { //SBUF = receBuf[i*2+7]; //SBUF = receBuf[i*2+8]; tempData = (receBuf[i*2+7] << 8) + receBuf[i*2+8]; setRegisterVal(tempAddr, tempData); } sendBuf[0] = localAddr; sendBuf[1] = 16; sendBuf[2] = addr >> 8; sendBuf[3] = addr & 0xff; sendBuf[4] = setCount >> 8; sendBuf[5] = setCount & 0xff; crcData = crc16(sendBuf, 6); sendBuf[6] = crcData >> 8; sendBuf[7] = crcData & 0xff; sendCount = 8; beginSend(); }码
- 1
- yeshaoming19852022-02-14有用,参考了一下,谢谢!
- Y182562646362017-04-15挺不错的资料
- 片片的爸爸2018-05-07不错的资料
- hjl28322017-03-20好,附带了MODBUS调试软件。
- 粉丝: 6
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助