uchar readbyte()
{
unsigned char i,k;
SCL=0;
delay();
SDA=1;
for(i=0;i<8;i++)
{
SCL=1;
delay();
k=(k<<1)|SDA;
SCL=0;
delay();
}
delay();
return k;
}
关于I2C总线读一个字节的问题 ,如何理解k=(k<<1)|SDA;这一句
答案:2 悬赏:10 手机版
解决时间 2021-03-23 13:12
- 提问者网友:美人性情
- 2021-03-22 18:45
最佳答案
- 五星知识达人网友:走死在岁月里
- 2021-03-22 19:54
I2C读一个字节的时候是读SDA上的信号,只能一位一位的读,k=(k<<1)|SDA这样写还是不太好,有时候可能会出错,因为k是char类型,而sda上读的是0或者1,是bit类型,可以换一种写法,k=(k<<1)|SDA这样写的本意是将每次读的位保存到k临时变量中,先读取高位,每次保存到k的低位,读取下一位的时候,再将k左移就将之前读取的位都左移了一次。你可以试着每一步试着用一个数值试一下。这样你就话明白了。
全部回答
- 1楼网友:神的生死簿
- 2021-03-22 21:13
k 是八位的变量。
k=(k<<1),左移一位。
在右边,腾出一个空位,自动补上0。
|sda,把 sda (可能是1,也可能是0),加入到空位中。
循环八次,就把 sda 读出了八遍,依次写到 k 的八个位中。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯