在下面的代码中
void I2C_Write(uint8_t v_i2cData_u8)
{
uint8_t i;
for(i=0;i<8;i++) // loop 8 times to send 1-byte of data
{
SDA_PIN = v_i2cData_u8 & 0x80; // Send Bit by Bit on SDA line
i2c_Clock(); // Generate Clock at SCL
v_i2cData_u8 = v_i2cData_u8<<1;// Bring the next bit to be transmitted to MSB position
}
i2c_Clock();
}
在语句中:SDA_PIN = v_i2cData_u8&0x80;告知数据将被逐位发送,如果数据被逐位发送,那么将存储在SDA_PIN中,SDA_PIN的值为0x80还是1?
答案 0 :(得分:0)
0x80
的高阶位,将为 SDA_PIN分配0
(128)或v_i2cData_u8
。如果要确保写入0x01
字节,则需要执行以下操作:
SDA_PIN = (v_i2cData_u8 & 0x80) ? 1 : 0;
答案 1 :(得分:0)
当v_i2cData_u8的第7位为1时,SDA_PIN为0x80,否则为0。
如果您希望将其设置为1而不是0x80,则可以这样做
SDA_PIN = !!(v_i2cData_u8 & 0x80); or
SDA_PIN = (v_i2cData_u8 & 0x80) >> 7;
或如塞尔比所说。