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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

i2C應答要判斷再進行下一步嗎?附單片機程序

[復制鏈接]
跳轉到指定樓層
樓主


    如圖所示這樣寫是不是不夠嚴謹,如果從機都沒應答也發送地址或數據,但是如果要等有應答再做下一步,那不是要嵌套幾層if判斷?

    void At24c02Write(uchar ADDR, DAT)

{
I2cStart();//I2C起始信號
I2cSendByte(At24c02ADDR + I2cWrite);/發送器件地址加讀寫方向位
if(ReadACK()) //讀從機應答
   AckFlag = 1; //無應答
Else
{
   AckFlag = 0; //應答
   I2cSendByte(ADDR);//發送儲存單元地址字節
   if(ReadACK())//讀從機應答
       AckFlag = 1; //無應答
   Else
   {
      AckFlag = 0; //應答
     I2cSendByte(DAT);//發送一字節數據
     if(ReadACK())//讀從機應答
        AckFlag = 1; //無應答
     Else        
     {
      AckFlag = 0; //應答
      I2cStop(); //I2c停止信號
     }
   }  
  }
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:452475 發表于 2023-12-5 14:40 | 只看該作者
確保時序正確能調通檢不檢測應答我覺得沒啥關系。如果需要檢測應答的話就判斷應答信號,如果錯誤的話就return出來返回一個標志位這樣吧。
回復

使用道具 舉報

板凳
ID:1102699 發表于 2023-12-5 15:01 | 只看該作者
要是能確保時序正確,可以不要應答,直接給個空時鐘,這個時鐘必須給了才行連續操作。否則只能一個BYTE訪問。
回復

使用道具 舉報

地板
ID:600469 發表于 2023-12-5 15:30 | 只看該作者
建議直接抄網上代碼
回復

使用道具 舉報

5#
ID:401564 發表于 2023-12-5 23:02 | 只看該作者
用IIC就得等待應答,一定要的
大多人寫IIC并不是只為一個程序寫的,而是封裝一個完整的.C文件,然后可以在任何地方都能用的
你去掉了等待應答,再把這個代碼用到別的地方就會出問題的
回復

使用道具 舉報

6#
ID:1034262 發表于 2023-12-5 23:05 | 只看該作者
需要,假如沒有應答,則馬上發送停止條件退出。
回復

使用道具 舉報

7#
ID:1095802 發表于 2023-12-6 09:46 | 只看該作者
Y_G_G 發表于 2023-12-5 23:02
用IIC就得等待應答,一定要的
大多人寫IIC并不是只為一個程序寫的,而是封裝一個完整的.C文件,然后可以在任 ...

那這部分具體要怎樣有沒有例子發來看下是退出還是用循環等待
回復

使用道具 舉報

8#
ID:1095802 發表于 2023-12-6 09:48 | 只看該作者
coody_sz 發表于 2023-12-5 23:05
需要,假如沒有應答,則馬上發送停止條件退出。

等待比退出是不是更好點。要不退出不是會影響到后面程序
回復

使用道具 舉報

9#
ID:401564 發表于 2023-12-6 16:24 | 只看該作者
殿堂之上 發表于 2023-12-6 09:46
那這部分具體要怎樣有沒有例子發來看下是退出還是用循環等待

void Write_Byte(unsigned char byte)                        //寫入器件的應答信號由從機給出
{
         unsigned char i,temp;
        unsigned int k;
         temp=byte;                
        SCL=0;
        Delay();
                 for(i=0;i<8;i++)
                         {
                        if(temp&0x80)SDA=1;
                        else SDA=0;
                        Delay();
                        SCL=1;
                        Delay();               
                        SCL=0;
                        Delay();
                        temp=temp<<1;
                        }
        SCL=1;                   //給出一個上升沿,用于產生應答信號
        Delay();
        SDA=1;
        while((SDA==1)&&(k<1000))
                {
                k++;
                Delay();
                } //等待SDA出現低電平,出現低電平就表示器件已經應答
        SCL=1;
        SDA=0;
        Delay();
}
對于應答的處理,每個人有每個人處理方式,或者是說場合不同,代碼也會有所不同
對于無應答,有幾種處理方法,看你代碼應用場合來決定:
1,不理會有沒有應答,直接寫入下一個字節
2,返回一個IIC錯誤信息,可以是提示IIC錯誤,或者是有屏幕提示無應答之類的處理
3,重新啟動IIC,再給一個啟始信號,繼續進行IIC通訊

不管是用那個方法,IIC一定是要有應答系統的,而且,應答是不能死等的,要有一個時間限制的,不然容易卡死

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美视频 | 日韩精品在线播放 | 日韩中文一区二区三区 | 黄色精品| 日韩二三区| 国产欧美日韩综合精品一区二区 | 久久亚洲一区二区三 | 欧美日韩免费视频 | 午夜网站视频 | 日日噜噜噜夜夜爽爽狠狠视频97 | 欧美一级在线观看 | 中国一级大毛片 | 亚洲国产精品成人综合久久久 | 91大神xh98xh系列全部 | 亚洲国产精品一区 | 91免费观看| 四季久久免费一区二区三区四区 | 国产亚洲一区二区精品 | 亚洲aⅴ | 日本中文在线视频 | 美女日批免费视频 | 欧美精品欧美精品系列 | 免费看黄色片 | 色视频免费 | 无吗视频 | 特黄毛片 | 国产成人精品一区二区 | 日韩精品久久一区二区三区 | 精品视频在线免费观看 | 久久在线 | 高清色 | 艹逼网 | 国产资源在线观看 | 久久久久久亚洲 | 欧美日韩一区精品 | 婷婷中文字幕 | 黄a在线观看 | 日韩在线免费观看视频 | 欧美三级三级三级爽爽爽 | 久久亚洲综合 | 久久免费视频观看 |