какое значение будет сохранено после операции '&' - PullRequest
0 голосов
/ 17 марта 2019

В коде ниже

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?

Ответы [ 2 ]

0 голосов
/ 17 марта 2019

SDA_PIN будет 0x80, когда 7-й бит v_i2cData_u8 равен 1, и будет 0 в противном случае.

Если вы хотите сделать его 1 вместо 0x80, вы можете сделать

SDA_PIN = !!(v_i2cData_u8 & 0x80); or
SDA_PIN = (v_i2cData_u8 & 0x80) >> 7;

или как говорит ответ Селби.

0 голосов
/ 17 марта 2019

SDA_PIN будет присвоен либо 0x80 (128), либо 0 в зависимости от старшего бита v_i2cData_u8 в этом цикле. Если вы хотите убедиться, что записан 0x01 байт, вам нужно сделать следующее:

SDA_PIN = (v_i2cData_u8 & 0x80) ? 1 : 0;

...