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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1488|回復: 8
收起左側

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

[復制鏈接]
ID:1095802 發表于 2023-12-5 10:48 | 顯示全部樓層 |閱讀模式
51hei截圖_20231205104810.png

    如圖所示這樣寫是不是不夠嚴謹,如果從機都沒應答也發送地址或數據,但是如果要等有應答再做下一步,那不是要嵌套幾層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停止信號
     }
   }  
  }
}
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

ID:600469 發表于 2023-12-5 15:30 | 顯示全部樓層
建議直接抄網上代碼
回復

使用道具 舉報

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

使用道具 舉報

ID:1034262 發表于 2023-12-5 23:05 | 顯示全部樓層
需要,假如沒有應答,則馬上發送停止條件退出。
回復

使用道具 舉報

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

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

使用道具 舉報

ID:1095802 發表于 2023-12-6 09:48 | 顯示全部樓層
coody_sz 發表于 2023-12-5 23:05
需要,假如沒有應答,則馬上發送停止條件退出。

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

使用道具 舉報

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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品日韩欧美 | 亚洲狠狠 | 亚洲日本中文字幕在线 | 一区二区三区欧美在线观看 | 国产精品亚洲综合 | 国产一区二区三区视频 | 中文字幕四虎 | 玖草资源 | 91国在线 | 国产精品久久视频 | 中文字幕免费在线观看 | 精品亚洲一区二区 | 欧美日韩在线免费观看 | 欧美男人天堂 | 99在线免费观看视频 | 亚洲精品中文字幕 | 91视频免费视频 | 精品久久香蕉国产线看观看亚洲 | 日韩一区二区三区在线看 | 欧美日韩不卡合集视频 | av在线黄 | 91视频网| 一二三在线视频 | 国产成人精品午夜视频免费 | 性做久久久久久免费观看欧美 | 午夜一区二区三区 | 日韩在线播放一区 | 精品日韩一区 | 69堂永久69tangcom| 亚洲视频免费在线观看 | 久久99深爱久久99精品 | 日韩靠逼 | 中文成人无字幕乱码精品 | 成人二区 | 成人福利电影 | 国产视频h | 成人综合久久 | 国产成人久久精品一区二区三区 | 99re视频这里只有精品 | 欧美二区在线 | 国产一区二区三区在线 |