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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10146|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品一区二区在线观看 | 欧美日韩久 | 日韩在线大片 | 婷婷综合网 | 99精品国自产在线 | 日韩精品在线观看免费 | 国产福利视频 | 91素人| 一级a爱片性色毛片免费 | 男人天堂99 | 国产精品视频97 | 中文字幕日韩一区 | 欧美精品一区二区在线观看 | 国际精品久久 | 高清av一区 | 精品久久久久久久久久 | 岛国av一区二区 | 亚洲a一区| 精品国产一区久久 | 九九色综合 | 黄网在线观看 | 男女视频在线观看 | 中文字幕在线观看一区 | 搞av.com| 91中文字幕在线观看 | 午夜av毛片 | 天堂素人约啪 | 久久亚洲欧美日韩精品专区 | 国产精品免费看 | 99精品欧美| 国产美女精品视频免费观看 | 成人久久久 | 亚州一区二区三区 | 日韩精品视频在线观看一区二区三区 | 91久久久久 | 97人人澡人人爽91综合色 | 成人精品在线视频 | 成人在线精品视频 | www网站在线观看 | 毛片a区 | 超碰97免费|