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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2475|回復: 5
打印 上一主題 下一主題
收起左側

各位大佬,這個代碼是i2c總線讀取字節,這個移位怎么弄啊?可以具體舉個數嗎?

[復制鏈接]
跳轉到指定樓層
樓主
ID:696335 發表于 2020-4-1 09:35 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
unsigned char I2cReadByte()
{
    unsigned char a=0,dat=0;
    SDA=1;
    Delay10us();
    for(a=0;a<8;a++)
    {
       CSL=1;
       Delay10us();
       dat<<1;
       dat|=SDA;
       Delay10us();
       SCL=0;
       Delay10us();

    }
    return dat;
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

6#
ID:626079 發表于 2020-4-3 07:43 | 只看該作者
臭大死王八羔子 發表于 2020-4-1 15:44
第一次循環時,SDA為什么是賦值給dat最低位,SDA初值是1,dat初值是0,應該是0000 0000|1111 1111=1111 1 ...

SDA是IIC線上SDA線來的高電平或低電平。高1低0,一次過來只有一位吧,只是一位的,不是你說的11111111一下都過來。一次過來只有一位,IIC是一位一位的從SDA線上傳過來,不是一次就過來8位。我的理解是這樣的吧。
回復

使用道具 舉報

5#
ID:696335 發表于 2020-4-1 15:44 | 只看該作者
xmfjfhcel 發表于 2020-4-1 11:10
這時閑著,說下,因為我也曾花了長時間理解這代碼,本不想理解,反正套用就是,但后來發現到處都用到這個移 ...

第一次循環時,SDA為什么是賦值給dat最低位,SDA初值是1,dat初值是0,應該是0000 0000|1111 1111=1111 1111吧?
回復

使用道具 舉報

地板
ID:626079 發表于 2020-4-1 11:10 | 只看該作者
這時閑著,說下,因為我也曾花了長時間理解這代碼,本不想理解,反正套用就是,但后來發現到處都用到這個移位得算法,不理解不得行。不對的地方大伙提出來。
1.DAT初始為0, 先←沒影響,反正每一位都是0。但在第二次循環就有用了。這兒一定要清楚。
2.dat|=SDA, 在第一次進循環時,就是吧SDA直接賦值給DAT最低位。“|=”就不解釋了,要搞單片機這是基礎的基礎哦
3.第二次進循環,把上次的DAT最低位←到低二位,再SDA直接賦值給DAT最低位,第一次的SDA就到DAT的第二位啦。
4.以后都類推。。。
5. 傳過來的SDA第一次的位是傳來的字節的最高位。 循環完了,DAT的最高位就是SDA傳過來的第一位。
不曉得我說清楚沒得。。
unsigned char I2cReadByte()
{
    unsigned char a=0,dat=0;
    SDA=1;
    Delay10us();
    for(a=0;a<8;a++)
    {
       CSL=1;
       Delay10us();
       dat<<1;
       dat|=SDA;
       Delay10us();
       SCL=0;
       Delay10us();

    }
    return dat;
}
回復

使用道具 舉報

板凳
ID:720003 發表于 2020-4-1 10:13 | 只看該作者
確實,我也一直沒搞懂
回復

使用道具 舉報

沙發
ID:584814 發表于 2020-4-1 09:55 | 只看該作者
從SDA上讀數據一次一個字節從高位讀起讀完返回結果然后玩犢子。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表