luoengineer 发表于 2020-5-21 17:20

请教一下这段代码


请教一下下面标红的这句代码是什么意思:

unsigned char I2C_Slv_Putch(unsigned char ch)
{
   while(((AD_I2C->SSPI & 0x02) == 0x02)==0);
                AD_I2C->SSPIC = 0x02;
                AD_I2C->SSPTX = ch;
   if((AD_I2C->SSPCON1 & 0x40) == 0x40)      //return last byte ack signal
                return 1;
   else
                return 0;
}

ughbss 发表于 2020-5-21 21:46

判断AD_I2C->SSPI 的Bit 2是1还是0,是0就while循环

wono01 发表于 2020-5-22 09:51

while(((AD_I2C->SSPI & 0x02) == 0x02)==0);
直接看(AD_I2C->SSPI & 0x02) 这个就是取这个寄存器的0x02bit位
((AD_I2C->SSPI & 0x02) == 0x02)这里判断这个bit位是否为1
(((AD_I2C->SSPI & 0x02) == 0x02)==0)这里不为1就循环等待
综上,就是判断某个状态寄存器是否变成1了,不是就等状态寄存器变成1

luoengineer 发表于 2020-5-25 09:59

wono01 发表于 2020-5-22 09:51
while(((AD_I2C->SSPI & 0x02) == 0x02)==0);
直接看(AD_I2C->SSPI & 0x02) 这个就是取这个寄存器的0x02bit ...

那写成 while(!(AD_I2C->SSPI & 0x02))不就行了吗,干嘛要做2次比较?

wono01 发表于 2020-5-25 10:10

本帖最后由 wono01 于 2020-5-25 10:12 编辑

luoengineer 发表于 2020-5-25 09:59
那写成 while(!(AD_I2C->SSPI & 0x02))不就行了吗,干嘛要做2次比较?
谁知道写代码当时咋想的,只不过上面==0更清晰可以看出目的。实际工程中代码以清晰为标准。
页: [1]
查看完整版本: 请教一下这段代码