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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于用51單片機模擬IIC總線通信(主機給從機發信號,從機無應答時應該終止發送數據)

[復制鏈接]
跳轉到指定樓層
樓主
ID:297166 發表于 2018-9-3 19:51 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
最近認真的學習了IIC總線通信,并看了郭天祥老師的書和視頻講解。
但是我有一點疑問:在IIC總線協議里規定當主機給從機發信號,從機無應答時應該終止發送數據,但是郭老師的例程里并沒有這一內容,在其他的IIC通信例程中也沒有看到類似內容。這是說明這個部分不重要嗎?如果要實現是不是需要用到goto語句?


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

使用道具 舉報

沙發
ID:384109 發表于 2018-9-3 22:36 | 只看該作者
這部分應該都有的,這里的從機應答應該不是應答相應的數據,而是在協議里主機發送一個字節數據后,從機都會返回一個應答的位,只有一個BIT,注意看協議

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:393240 發表于 2018-9-4 00:27 來自手機 | 只看該作者
低電平應答ACK,高電平NACK

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:297166 發表于 2018-9-4 01:30 | 只看該作者
你們都沒有理解我的意思。我是說,主機給從機發數據,從機沒有給主機應答,即沒有在SCK高電平時把SDA拉低(1bit)時,主機應該中斷傳輸才對。但是我看的所有例程里(包括不少12864LCD例程)都沒有相關語句,大多只是后面加了一個時鐘,都不管SDA是什么,只為了能夠順利進行數據傳輸。還有AT24C02中讀完一節數據應該先非應答,再停止之類的小細節……可能是我摳的太仔細了……

評分

參與人數 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

5#
ID:297166 發表于 2018-9-4 01:31 | 只看該作者
人中狼 發表于 2018-9-3 22:36
這部分應該都有的,這里的從機應答應該不是應答相應的數據,而是在協議里主機發送一個字節數據后,從機都會 ...

看樓下我的解釋
回復

使用道具 舉報

6#
ID:297166 發表于 2018-9-4 01:32 | 只看該作者
馬帥 發表于 2018-9-4 00:27
低電平應答ACK,高電平NACK

看樓下我的解釋
回復

使用道具 舉報

7#
ID:98526 發表于 2018-9-4 08:31 | 只看該作者
可以不去理從機、主機自己模擬一個應答位就好了。
類似這種
即應答信號由主機自己模擬、不理會從機。只要芯片沒有壞、不影響使用。
void iic_slave_NOACK()//默認非應答信號
{
        SDA=1;
        _nop_();
        SCL=1;
        _nop_();
        SCL=0;       
        _nop_();
}

void MSA300_WriteBytes(unsigned char RegAddr,unsigned char Data)
{
            I2C_Start();//主機準備好了
        I2C_Write(G_SlaveAddr_W);//主機要給從機發數據,知會從機一下
        iic_Ack();//主機當從機默認知道了
        I2C_Write(RegAddr);//主機告訴從機要操縱的地址
        iic_Ack();//主機當從機默認知道了
        I2C_Write(Data);//主機告訴從機要修改的地址中內容
        iic_Ack();//主機當從機默認知道了
        I2C_Stop();//主機掛斷了電話
}
回復

使用道具 舉報

8#
ID:98526 發表于 2018-9-4 08:37 | 只看該作者
blossom99 發表于 2018-9-4 01:30
你們都沒有理解我的意思。我是說,主機給從機發數據,從機沒有給主機應答,即沒有在SCK高電平時把SDA拉低( ...

從機如果沒有給主機應答、即說明從機壞了或者時序不對。讀出來的數據肯定是不對的。所以一般簡單用途都不去理會從機是否應答。如果要去理會從機應答那就while等待從機應答、然后加個超時機制,規定時間內while沒有檢測到從機應答、就return 錯誤標志,如果成功發送就return 成功標志。主程序里判斷是錯誤標志就輸出錯誤信息即可,比如“通信錯誤、請更換芯片”

評分

參與人數 1黑幣 +5 收起 理由
blossom99 + 5 很給力!

查看全部評分

回復

使用道具 舉報

9#
ID:384109 發表于 2018-9-4 10:19 | 只看該作者
最好可以貼上你所看的例程,或許有的例程為了方便并沒有去檢測應答,我也是看例程學的IIC,里面就有對從機應答的檢測和處理。多看一些例程,現在都用C語言寫程序,所以有的例程不需要局限在51,也可以看看如STM32中相關操作的例程
回復

使用道具 舉報

10#
ID:235009 發表于 2018-9-4 11:41 | 只看該作者
你可以加延時判斷啊。定時過后如果沒有收到應答,則退出此次發送
回復

使用道具 舉報

11#
ID:235009 發表于 2018-9-4 11:43 | 只看該作者
從機無應答,可能總線有問題哦,你可以在主機上加延時判斷。盡可能少用while,或者while中做一個技術,不然很容易卡機
回復

使用道具 舉報

12#
ID:8222 發表于 2018-10-24 23:44 | 只看該作者
郭老師的教材只能入門,有很多東西是粗糙的,不嚴謹的。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精国产品一区二区三区四季综 | 一区二区三区久久久 | 黄网站色大毛片 | 欧美福利视频 | av网站在线免费观看 | 欧美成人h版在线观看 | 欧美国产日韩一区二区三区 | 亚洲精品福利在线 | 中文字幕加勒比 | 免费在线观看毛片 | 欧美在线一区二区三区 | 日韩一二区在线 | 成人亚洲综合 | 久久不射电影网 | 天堂久久久久久久 | www日本在线观看 | 天堂一区二区三区 | 久久久久久九九九九 | 夜夜草av| 成人av观看 | 日本理论片好看理论片 | 亚洲欧美日韩国产综合 | 激情小说综合网 | 日韩精品一区二区三区 | 欧美国产日韩一区 | 久久精品中文 | 欧美在线a| 91看国产 | 美女一级毛片 | 三级在线免费观看 | 久久99视频| 男女视频在线免费观看 | 成人免费视频一区二区 | 欧美一级片a | 超碰在线人人干 | 日韩中文字幕 | 九九热精品视频 | 亚洲欧美日韩成人在线 | 麻豆hd| 欧美一级免费黄色片 | 亚洲在线高清 |