找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2558|回复: 8
收起左侧

单片机I2C总线 k=(k>>1)|sda该怎么理解呢?

[复制链接]
ID:391847 发表于 2018-11-15 23:33 | 显示全部楼层 |阅读模式
uchar read_byte()//读取数据
{
请教前辈们个问题
       uchar i,k;
                scl=0;
                delay();
                sda=1;
                delay();
                for(i=0;i<8;i++)
                {
                        scl=1;
                        delay();
                        k=(k<<1)|sda;
                        scl=0;
                        delay();
               
                        
                }
                        return k;//返回值函数
}
k=(k>>1)|sda该怎么理解呢?向各位大神请教,这个是I2C总线读取一个字节的函数

回复

使用道具 举报

ID:23606 发表于 2018-11-16 09:14 | 显示全部楼层
scl=1;
                        delay();
                        k=(k<<1)|sda;
                        scl=0;
                        delay();
到底是往哪边移?
回复

使用道具 举报

ID:94031 发表于 2018-11-16 10:39 | 显示全部楼层
k=(k<<1)|sda;,先把k左移一位然后跟sda相或,结果放到k里。
回复

使用道具 举报

ID:391847 发表于 2018-11-16 21:36 | 显示全部楼层
YJGG 发表于 2018-11-16 09:14
scl=1;
                        delay();
                        k=(k

左移一位 然后或
回复

使用道具 举报

ID:391847 发表于 2018-11-16 21:45 | 显示全部楼层

我可以理解将K左移一位的值跟这个sda进行或 假如k为0 sda=1;相或为1;当k再次位移时k的低位补0 sda=0时,相或时还是0,即两次产生的值为10 对吗?
回复

使用道具 举报

ID:418425 发表于 2018-11-16 23:38 | 显示全部楼层
例如:你传送11010010这个字节,一共8位,你需要一位一位的传送,k变量初始为00000000,和KDA进行位或运算得11010010,传送回k,得到字节11010010
回复

使用道具 举报

ID:391847 发表于 2018-11-17 22:23 | 显示全部楼层
yf15966844335 发表于 2018-11-16 23:38
例如:你传送11010010这个字节,一共8位,你需要一位一位的传送,k变量初始为00000000,和KDA进行位或运算 ...

00000000|11010010  k每左移一位最对位补0 再和我要传输最高的值相或对吗?非常感谢您
回复

使用道具 举报

ID:448720 发表于 2018-12-24 16:19 | 显示全部楼层
阿庆永不言弃 发表于 2018-11-17 22:23
00000000|11010010  k每左移一位最对位补0 再和我要传输最高的值相或对吗?非常感谢您

这个要循环8次  那第二次K是多少呢?    大神们请赐教!!!
回复

使用道具 举报

ID:451718 发表于 2018-12-24 17:36 | 显示全部楼层
无论k的初值是什么,经过8此左移操作后,k的8位数据都和SDA的输出数据位相与运算了,也就是循环8次取了SDA的值。
如果你右移,每次SDA的赋值都别下一次覆盖,最后k的值就只有SDA最后一次的位移赋值了。
详情,请参考移位赋值的原则。这是C语言的内容。跟51无关。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表