
51单片机pcf8591编程发送一个字节程序中,if((temp&0x80)==0x80的含义?
1个回答
展开全部
没懂你的意思,你就拿这么一个if判断语句出来,实在没法给你解释,或许是理解有误。
不得不说两句,你问的问题,提供的内容要全面,要明确你想知道的是什么?疑问在什么地方?
像你前面说得双字节字符,貌似就一点关系都没有。
上面的那位仁兄说得很不错了(还不懂的话,建议你去看I2C协议,和硬件配置吧)
void Send(unsigned char Data)
{
unsigned char BitCounter = 8;
unsigned char temp;
do
{
temp = Data;
//I2C的时钟线SCL先清零,这是I2C协议决定的,数据传输SDA只能在SCL=0时才能改变。
scl = 0;
nop();
//下面就要判断在I2C数据线上要发送的数据,
//从最高位开始,判断结果是1,SDA就要置1,判断结果为0,SDA就要清零。
//没有什么像你说的输不输出数据,输出0是数据,输出1也是数据。
if((temp&0x80) == 0x80)
sda = 1;
else
sda = 0;
//下面一个SCL上升沿,把数据线SDA上的数据发送出去
scl = 1;
//因为前面始终判断的temp最高位,
//第(2,3,4...8)次循环,要依次把数据的第(7,6,5..1)位移到temp的最高位。
//满足这个要求,每次循环移动一位就可以了
temp = Data << 1;
Data = temp;
//BitCounter是用来统计循环次数的,
BitCounter --;
}while(BitCounter);
scl = 0;
}
不得不说两句,你问的问题,提供的内容要全面,要明确你想知道的是什么?疑问在什么地方?
像你前面说得双字节字符,貌似就一点关系都没有。
上面的那位仁兄说得很不错了(还不懂的话,建议你去看I2C协议,和硬件配置吧)
void Send(unsigned char Data)
{
unsigned char BitCounter = 8;
unsigned char temp;
do
{
temp = Data;
//I2C的时钟线SCL先清零,这是I2C协议决定的,数据传输SDA只能在SCL=0时才能改变。
scl = 0;
nop();
//下面就要判断在I2C数据线上要发送的数据,
//从最高位开始,判断结果是1,SDA就要置1,判断结果为0,SDA就要清零。
//没有什么像你说的输不输出数据,输出0是数据,输出1也是数据。
if((temp&0x80) == 0x80)
sda = 1;
else
sda = 0;
//下面一个SCL上升沿,把数据线SDA上的数据发送出去
scl = 1;
//因为前面始终判断的temp最高位,
//第(2,3,4...8)次循环,要依次把数据的第(7,6,5..1)位移到temp的最高位。
//满足这个要求,每次循环移动一位就可以了
temp = Data << 1;
Data = temp;
//BitCounter是用来统计循环次数的,
BitCounter --;
}while(BitCounter);
scl = 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询