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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2345|回復: 5
收起左側

關于IIC通信中從機對C51單片機主機模擬應答信號的子程序的疑問

[復制鏈接]
ID:609281 發表于 2021-2-13 00:23 | 顯示全部樓層 |閱讀模式
      小弟近來在學習IIC通信協議,看的是郭天祥的C51單片機課本,其中對于應答信號的模擬子程序書里面是這樣的:
        void respons( )
       {
               uchar i = 0;
               SCL     = 1;
               delay( );
              while((SDA == 1) &&(i<255));
                      i ++;
              SCL     = 0;
              delay( );
       }
           為什么要有 while((SDA == 1) &&(i<255)); ? 課本里是這樣解釋的,(SDA == 1) &&(i<255); 是相與的關系,表示若在一段時間內沒有收到從器件的應答,則主器件默認從器件已經收到數據而不再等待應答信號,因為如果不加這個延時退出,一旦器件沒有發出應答信號,程序將永遠停止在這里,而真正的程序中是不允許這樣的。
        小弟的問題是:1、while((SDA == 1) &&(i<255));       i ++; 能不能換成delay( )  ?因為無論C51是否接收到了從機的應答,都會往下執行SCL = 0; 并不會說程序停在那里不動, while((SDA == 1) &&(i<255)); 的功能也就相當于等待從機進行應答,一旦SDA被從機拉為低電平就開始執行SCL = 0;所以我覺得while((SDA == 1) &&(i<255));       i ++; 可以換成delay( )。

                              2、這一個模擬應答信號子函數中,為什么沒有SDA = 0;這個語句?是不是因為從機是具有IIC協議功能的,一旦接受了一個字節的信息后,自動會使SDA = 0;不需要手動操作?
回復

使用道具 舉報

ID:880987 發表于 2021-2-13 09:20 | 顯示全部樓層
看著比清翔的教程還麻煩,主機只要發送數據完成保證釋放總線即SCL = 0和SDA = 1,下一步判斷從機應答,把SCL拉高5微秒,判斷SDA電平,高電平從機非應答拉低SCL電平,主機發出停止信號;低電平從機應答拉低SCL,準備下一組數據發送。根本不需要多余的循環檢測

評分

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

查看全部評分

回復

使用道具 舉報

ID:373388 發表于 2021-2-13 14:28 | 顯示全部樓層
仔細看看iic協議,再看這個函數,實際上這個個函數是正確的;最好帶返回參數,可以判斷應答是否正確:
bool respons( )
       {       uchar i = 0;
               SCL     = 1;
               delay( );
              while((SDA == 1) &&(i<255));
                      i ++;
              SCL     = 0;
              delay( );
             if(i<255)  return true;
             else         return false;
       }
回復

使用道具 舉報

ID:872416 發表于 2021-2-13 16:48 來自手機 | 顯示全部樓層
回答1,可以用延時函數的,用完就break,跳出while
回復

使用道具 舉報

ID:609281 發表于 2021-2-13 22:08 | 顯示全部樓層
xhaity 發表于 2021-2-13 14:28
仔細看看iic協議,再看這個函數,實際上這個個函數是正確的;最好帶返回參數,可以判斷應答是否正確:
boo ...

好的,感謝您的解答!
回復

使用道具 舉報

ID:609281 發表于 2021-2-13 22:10 | 顯示全部樓層
catlu 發表于 2021-2-13 09:20
看著比清翔的教程還麻煩,主機只要發送數據完成保證釋放總線即SCL = 0和SDA = 1,下一步判斷從機應答,把SC ...

嗯嗯,看懂了,謝謝!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: gav成人免费播放视频 | 一区中文字幕 | 日韩在线观看网站 | 国产精品成人一区二区三区夜夜夜 | 亚洲高清在线免费观看 | 欧美专区在线视频 | 亚洲国产精品suv | 91在线电影 | 国产精品成人av | 欧美综合一区二区三区 | 一区二区视频 | 一区二区三区视频在线免费观看 | 亚洲vs天堂| 久久亚洲春色中文字幕久久久 | 午夜精品在线观看 | 欧美二区三区 | 欧美色综合一区二区三区 | 亚洲国产一区在线 | 亚洲欧美网站 | 亚洲美女一区二区三区 | 69av片| 久久久久亚洲精品国产 | 免费一级黄色 | 欧美日韩一区二区三区四区五区 | 亚洲精品黄色 | 欧美日韩一区在线 | 美女天天操 | 午夜精品久久久久久久99黑人 | 久色激情 | 亚洲一二三视频 | 欧美日韩大片 | 日韩天堂av| 国产精品揄拍一区二区久久国内亚洲精 | 伊人网站在线 | 成人一区二区三区在线观看 | 91精品国产乱码久久久 | 欧美极品在线 | 久久99这里只有精品 | 91性高湖久久久久久久久_久久99 | 91网视频| 97视频在线观看免费 |