一、写寄存器多个位
方法一
/**********************************************************************
bitStart 目标字节的起始位
length 位长度
data 存放改变目标字节位的值
b 写入后的一个字节值
*******************************************************************************/
u8 mask = (0xFF << (bitStart + 1)) | 0xFF >> ((8 - bitStart) + length - 1); //使写入的位清零,其他位置1
data <<= (8 - length);
data >>= (7 - bitStart);
b &= mask;
b |= data;
方法二
/**********************************************************************
bitStart 目标字节的起始位
length 位长度
data 存放改变目标字节位的值
b 写入后的一个字节值
*******************************************************************************/
u8 mask = ((1 << length) - 1) << (bitStart - length + 1);//使写入的位置1,其他位清0
data <<= (bitStart - length + 1);
data &= mask;
b &= ~(mask);
b |= data;
二、读寄存器多个位
/**********************************************************************
bitStart 目标字节的起始位
length 位长度
b 读取多个位的值
*******************************************************************************/
u8 mask = ((1 << length) - 1) << (bitStart - length + 1);//使读入的位置1,其他位清0
b &= mask;
b >>= (bitStart - length + 1);