dengxinnfa 发表于 2017-4-4 18:22:15

这的函数是错误的吧,求解释!


/**************************实现函数********************************************
*函数原型:                u8 IICwriteBits(u8 dev,u8 reg,u8 bitStart,u8 length,u8 data)
*功  能:          读 修改 写 指定设备 指定寄存器一个字节 中的多个位
输入        dev目标设备地址
                reg           寄存器地址
                bitStart目标字节的起始位
                length   位长度
                data    存放改变目标字节位的值
返回   成功 为1
                失败为0
*******************************************************************************/
u8 IICwriteBits(u8 dev,u8 reg,u8 bitStart,u8 length,u8 data)
{

    u8 b;
    if (IICreadByte(dev, reg, &b) != 0) {
      u8 mask = (0xFF << (bitStart + 1)) | 0xFF >> ((8 - bitStart) + length - 1);
      data <<= (8 - length);
      data >>= (7 - bitStart);
      b &= mask;
      b |= data;
      return IICwriteByte(dev, reg, b);
    } else {
      return 0;
    }
}

dengxinnfa 发表于 2017-4-4 18:31:30

mask和data怎么看都是错误的,如果bitStart=0x02,length=0x3,data是0x05那么mask用二进制表示是11100011,data移位之后是00010100,可算法怎么算都不对
页: [1]
查看完整版本: 这的函数是错误的吧,求解释!