欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 關于IIC通信中從機對C51單片機主機模擬應答信號的子程序的疑問 [打印本頁]

作者: 15119014737    時間: 2021-2-13 00:23
標題: 關于IIC通信中從機對C51單片機主機模擬應答信號的子程序的疑問
      小弟近來在學習IIC通信協(xié)議,看的是郭天祥的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); 是相與的關系,表示若在一段時間內沒有收到從器件的應答,則主器件默認從器件已經收到數(shù)據(jù)而不再等待應答信號,因為如果不加這個延時退出,一旦器件沒有發(fā)出應答信號,程序將永遠停止在這里,而真正的程序中是不允許這樣的。
        小弟的問題是:1、while((SDA == 1) &&(i<255));       i ++; 能不能換成delay( )  ?因為無論C51是否接收到了從機的應答,都會往下執(zhí)行SCL = 0; 并不會說程序停在那里不動, while((SDA == 1) &&(i<255)); 的功能也就相當于等待從機進行應答,一旦SDA被從機拉為低電平就開始執(zhí)行SCL = 0;所以我覺得while((SDA == 1) &&(i<255));       i ++; 可以換成delay( )。

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

作者: catlu    時間: 2021-2-13 09:20
看著比清翔的教程還麻煩,主機只要發(fā)送數(shù)據(jù)完成保證釋放總線即SCL = 0和SDA = 1,下一步判斷從機應答,把SCL拉高5微秒,判斷SDA電平,高電平從機非應答拉低SCL電平,主機發(fā)出停止信號;低電平從機應答拉低SCL,準備下一組數(shù)據(jù)發(fā)送。根本不需要多余的循環(huán)檢測
作者: xhaity    時間: 2021-2-13 14:28
仔細看看iic協(xié)議,再看這個函數(shù),實際上這個個函數(shù)是正確的;最好帶返回參數(shù),可以判斷應答是否正確:
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;
       }
作者: 盧盧    時間: 2021-2-13 16:48
回答1,可以用延時函數(shù)的,用完就break,跳出while
作者: 15119014737    時間: 2021-2-13 22:08
xhaity 發(fā)表于 2021-2-13 14:28
仔細看看iic協(xié)議,再看這個函數(shù),實際上這個個函數(shù)是正確的;最好帶返回參數(shù),可以判斷應答是否正確:
boo ...

好的,感謝您的解答!
作者: 15119014737    時間: 2021-2-13 22:10
catlu 發(fā)表于 2021-2-13 09:20
看著比清翔的教程還麻煩,主機只要發(fā)送數(shù)據(jù)完成保證釋放總線即SCL = 0和SDA = 1,下一步判斷從機應答,把SC ...

嗯嗯,看懂了,謝謝!




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1