欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單片機I2C總線 k=(k>>1)|sda該怎么理解呢? [打印本頁]

作者: 阿慶永不言棄    時間: 2018-11-15 23:33
標題: 單片機I2C總線 k=(k>>1)|sda該怎么理解呢?
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總線讀取一個字節的函數


作者: YJGG    時間: 2018-11-16 09:14
scl=1;
                        delay();
                        k=(k<<1)|sda;
                        scl=0;
                        delay();
到底是往哪邊移?
作者: xuyaqi    時間: 2018-11-16 10:39
k=(k<<1)|sda;,先把k左移一位然后跟sda相或,結果放到k里。
作者: 阿慶永不言棄    時間: 2018-11-16 21:36
YJGG 發表于 2018-11-16 09:14
scl=1;
                        delay();
                        k=(k

左移一位 然后或
作者: 阿慶永不言棄    時間: 2018-11-16 21:45
xuyaqi 發表于 2018-11-16 10:39
k=(k

我可以理解將K左移一位的值跟這個sda進行或 假如k為0 sda=1;相或為1;當k再次位移時k的低位補0 sda=0時,相或時還是0,即兩次產生的值為10 對嗎?
作者: yf15966844335    時間: 2018-11-16 23:38
例如:你傳送11010010這個字節,一共8位,你需要一位一位的傳送,k變量初始為00000000,和KDA進行位或運算得11010010,傳送回k,得到字節11010010
作者: 阿慶永不言棄    時間: 2018-11-17 22:23
yf15966844335 發表于 2018-11-16 23:38
例如:你傳送11010010這個字節,一共8位,你需要一位一位的傳送,k變量初始為00000000,和KDA進行位或運算 ...

00000000|11010010  k每左移一位最對位補0 再和我要傳輸最高的值相或對嗎?非常感謝您
作者: 532212582    時間: 2018-12-24 16:19
阿慶永不言棄 發表于 2018-11-17 22:23
00000000|11010010  k每左移一位最對位補0 再和我要傳輸最高的值相或對嗎?非常感謝您

這個要循環8次  那第二次K是多少呢?    大神們請賜教!!!
作者: robinsonlin    時間: 2018-12-24 17:36
無論k的初值是什么,經過8此左移操作后,k的8位數據都和SDA的輸出數據位相與運算了,也就是循環8次取了SDA的值。
如果你右移,每次SDA的賦值都別下一次覆蓋,最后k的值就只有SDA最后一次的位移賦值了。
詳情,請參考移位賦值的原則。這是C語言的內容。跟51無關。




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1