<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 51單片機I2C總線協(xié)議的實現

          51單片機I2C總線協(xié)議的實現

          作者: 時間:2016-11-27 來源:網絡 收藏
          //-----------------------函數聲明,變量定義-------------------------------------------------------

          #include

          本文引用地址:http://www.ex-cimer.com/article/201611/322567.htm

          #include

          sbit SDA=P1^0;// 將p1.0口模擬數據口

          sbit SCL=P1^1;// 將p1.1口模擬時鐘口

          #define NUM 10 // 接收和發(fā)送緩存區(qū)的深度

          #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};

          unsignedcharidata sendbuf[NUM];// 數據發(fā)送緩沖區(qū)

          unsignedcharidata receivebuf[NUM];// 數據接收緩沖區(qū)

          bit bdata SystemError;// 從機錯誤標志位

          //------------------------------------------------------------------------------------------------

          // 函數名稱: iic_start()

          // 函數功能: 啟動I2C總線子程序

          //------------------------------------------------------------------------------------------------

          voidiic_start(void)

          { EA=0;//時鐘保持高,數據線從高到低一次跳變,I2C通信開始

          SDA = 1;

          SCL = 1;

          delayNOP();// 延時5us

          SDA = 0;

          delayNOP();

          SCL = 0;

          }

          //------------------------------------------------------------------------------------------------

          // 函數名稱: iic_stop()

          // 函數功能: 停止I2C總線數據傳送子程序

          //------------------------------------------------------------------------------------------------

          voidiic_stop(void)

          {

          SDA = 0;//時鐘保持高,數據線從低到高一次跳變,I2C通信停止

          SCL = 1;

          delayNOP();

          SDA = 1;

          delayNOP();

          SCL = 0;

          }

          //------------------------------------------------------------------------------------------------

          // 函數名稱: slave_ACK

          // 函數功能: 從機發(fā)送應答位子程序

          //------------------------------------------------------------------------------------------------

          voidslave_ACK(void)

          {

          SDA = 0;

          SCL = 1;

          delayNOP();

          SDA = 1;

          SCL = 0;

          }

          //------------------------------------------------------------------------------------------------

          // 函數名稱: slave_NOACK

          // 函數功能: 從機發(fā)送非應答位子程序,迫使數據傳輸過程結束

          //------------------------------------------------------------------------------------------------

          voidslave_NOACK(void)

          {

          SDA = 1;

          SCL = 1;

          delayNOP();

          SDA = 0;

          SCL = 0;

          }

          //------------------------------------------------------------------------------------------------

          // 函數名稱: check_ACK

          // 函數功能: 主機應答位檢查子程序,迫使數據傳輸過程結束

          //------------------------------------------------------------------------------------------------

          voidcheck_ACK(void)

          {

          SDA = 1;// 將p1.0設置成輸入,必須先向端口寫1

          SCL = 1;

          F0 = 0;

          if(SDA == 1)// 若SDA=1表明非應答,置位非應答標志F0

          F0 = 1;

          SCL = 0;

          }


          上一頁 1 2 下一頁

          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();