久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

I2C總線讀取一個數據時,24c02和PCF8591的單片機程序為什么不一樣?

[復制鏈接]
跳轉到指定樓層
樓主
ID:316481 發表于 2020-6-4 17:31 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
函數功能: 接收一字節子程序
//-------------------------------------------------------------------
uchar IICreceiveByte(void)
{
        uchar idata n=8;     // 從SDA線上讀取一上數據字節,共八位
        uchar tdata=0;
        while(n--)
        {
           SDA = 1;//這一句的作用是什么?
           SCL = 1;
           tdata =tdata<<1;                    //左移一位
           if(SDA == 1)
                  tdata = tdata|0x01;   // 若接收到的位為1,則數據的最后一位置1
                else
                  tdata = tdata&0xfe;   // 否則數據的最后一位置0
           SCL = 0;
         }

         return(tdata);
}
這是PCF8591在i2c上讀取一個數據的函數,在每次while循環時為什么需要使SDA值為1,而且當scl為1時,此時SDA為1,那讀出來的每一位不都是1嗎?而如果把這一句注釋掉則A/D轉換結果全為0.
/***************************************************
函數功能:從AT24Cxx讀取數據
出口參數:x
***************************************************/
unsigned char ReadData()
// 從AT24Cxx移入數據到MCU
{
        unsigned char i;
        unsigned char x;   //儲存從AT24Cxx中讀出的數據
        for(i = 0; i < 8; i++)
        {
                SCL = 1;                //SCL置為高電平
                x<<=1;                  //將x中的各二進位向左移一位
                x|=(unsigned char)SDA;  //將SDA上的數據通過按位“或“運算存入x中
                SCL = 0;                        //在SCL的下降沿讀出數據
        }
        return(x);                //將讀取的數據返回
}
這是24c08從i2c上讀取一個數據的函數,在每次for循環開始,并沒有SDA=1;語句,這樣也能從24c08中正確讀取數據。同樣是讀取數據函數,不知道為什么有這個區別?

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

使用道具 舉報

沙發
ID:8222 發表于 2020-6-4 21:40 | 只看該作者
SDA = 1;//這一句的作用是什么?這是主機把數據線拉高,等待24C02輸出數據。
if(SDA == 1)
tdata = tdata|0x01;   // 若接收到的位為1,則數據的最后一位置1
else
tdata = tdata&0xfe;   // 否則數據的最后一位置0
這個IF和ELSE才是讀取24C02數據。
回復

使用道具 舉報

板凳
ID:316481 發表于 2020-6-4 22:44 | 只看該作者
溫xyz 發表于 2020-6-4 21:40
SDA = 1;//這一句的作用是什么?這是主機把數據線拉高,等待24C02輸出數據。
if(SDA == 1)
tdata = tda ...

不是,上面那個函數是PCF8591進行A/D轉換時,從i2c總線上讀一個數據的函數。
回復

使用道具 舉報

地板
ID:654797 發表于 2022-1-11 19:30 | 只看該作者
這得看兩個程序的情況,有些程序在其它的地方已經拉高了,所以在讀取的時候就不用在拉高了
回復

使用道具 舉報

5#
ID:624769 發表于 2022-1-11 19:47 來自手機 | 只看該作者
讀完一個字節會發ack,發ack時會sda=0,如果管殺不管埋,那么在下次讀的時候就要sda=1,反之,發完ack,有首尾,會sda=1,自然在收下一個字節就不需要sda=1了。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一区二区三区精品久久久 | 亚洲综合大片69999 | 九色在线观看 | 国产日韩欧美一区二区 | 国产精品爱久久久久久久 | 国产精品久久久久久吹潮 | 欧美一级网站 | 一区二区在线 | 国产精品久久久久久久久免费桃花 | 成年男女免费视频网站 | 一区二视频| 亚洲视频免费在线观看 | 国产精品久久久久国产a级 欧美日韩国产免费 | 国产99在线 | 欧美 | 欧美日韩中文字幕在线 | 成人a视频片观看免费 | 罗宾被扒开腿做同人网站 | 中文字幕动漫成人 | 国产成人精品免费视频大全最热 | 久久久91精品国产一区二区三区 | 天天综合日日夜夜 | 免费精品视频 | 少妇黄色 | 国产麻豆乱码精品一区二区三区 | 一区二区在线 | 亚洲国产欧美日韩 | 婷婷色成人 | 亚洲综合天堂 | 免费高潮视频95在线观看网站 | 一区久久 | 国产成人精品一区二区三区四区 | 成人黄色网址大全 | 午夜手机在线视频 | 九九综合九九 | 亚洲国产精久久久久久久 | 91porn成人精品 | 免费在线h视频 | 国产免费一区二区 | 免费一级片 | 日韩三级电影一区二区 | 日屁网站 |