51单片机,pcf8591编程问题,发送一个字节程序中,if((temp&0x80)==0x80的含义??
51单片机IIC总线问题,PCF8591编程if((temp&0x80)==0x80)//如果表达式为真,说明temp高位为1,则是双字节字符?这是网友给的解释,怎么就是...
51单片机IIC总线问题,PCF8591编程
if((temp&0x80)==0x80)//如果表达式为真,说明 temp 高位为 1, 则是双字节字符?这是网友给的解释,怎么就是双字节了,即使 temp 高位为 1,不还是8位二进制数吗,不还是一个字节吗?
if((temp&0x80)==0x80)的作用到底是什么??、?望大神指教, 展开
if((temp&0x80)==0x80)//如果表达式为真,说明 temp 高位为 1, 则是双字节字符?这是网友给的解释,怎么就是双字节了,即使 temp 高位为 1,不还是8位二进制数吗,不还是一个字节吗?
if((temp&0x80)==0x80)的作用到底是什么??、?望大神指教, 展开
4个回答
意法半导体(中国)投资有限公司
2023-06-12
展开全部
展开全部
没懂你的意思,你就拿这么一个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;
}
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
单片机是一种集成电路芯片。又称单片微控制器,是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。一块芯片就成了一台计算机。特点是体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
单...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
展开全部
作用就是判断SDA为高或者为低。
哪来的双字节还是什么字节。
你把完整的代码弄上来看看。
哪来的双字节还是什么字节。
你把完整的代码弄上来看看。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
变量temp左移位,每次移动一位然后判断最高位是否为1,实际上是通过这样的操作把变量temp每一位的高低情况用SDA的高低反应出来,同时一位一位的在SH_CP上升沿是传入595的移位寄存器。为什么不能把变量temp直接传入595的14脚?因为temp是个变量,某个时刻是个具体的数,比如0x01,0x05,需要变成时序才能有效的受控的按位传递到14脚。这样才能和7段码对应起来,加以控制。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询