• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于I2C總線的單主多從單片機之間的通信

    基于I2C總線的單主多從單片機之間的通信

    作者: 時間:2013-02-17 來源:網(wǎng)絡 收藏

      4.1 主機發(fā)送/從機接收I2C子程序流程圖

      圖2和圖3給出了主機發(fā)送,從機接收I2C子程序流程圖,通過發(fā)送/接收數(shù)據(jù)時,的控制寄存器的中斷位必須先置位,為了避免因為某種原因不能使控制寄存器的中斷位置位而導致程序進入死循環(huán),作者在通信程序發(fā)送/接收數(shù)據(jù)前編寫了中斷循環(huán)等待和錯誤處理程序,大大提高了程序的可靠性,具體程序如下:

      while(!(TWCR (1TWINT) j10000) j++;

      if(j>10000) return O:

      應用I2C總線發(fā)送數(shù)據(jù)時,作者采用了狀態(tài)位查詢方法,并且給出了錯誤標志置位、錯誤跳出程序,下面的程序是發(fā)送從機地址的部分程序:

      switch(TWSR 0XF8)

      {

      case Oxl8: flag=0; break;

      case 0x20:flag=1; break;

      case 0x38:flag=l; break;

      default:return 0:

      }

      if(flag) continue;

    圖2 I2C主機發(fā)送程序框圖

      程序中的flag=0表示從機地址發(fā)送成功,flag=1表示從機地址發(fā)送失敗,當TWSR寄存器中的狀態(tài)碼為0x18時,表明從機地址已發(fā)送,并且接收到ACK,同時錯誤標志“flag”置0,下一步通過心發(fā)送數(shù)據(jù),當TWSR寄存器中的狀態(tài)碼為0x20時,表明從機地址已發(fā)送,但是接收到NO ACK,同時錯誤標志”flag”置1,下一步執(zhí)行“if(flag)continue;”語句,結束本次循環(huán),當TWSR寄存器中的狀態(tài)碼為0x38時,表明從機地址仲裁失敗,同時錯誤標志“flag”置1,下一步執(zhí)行“if(flag)continue;"語句,結束本次循環(huán)。總線將釋放,并進入未尋址從機模式,總線空閑后將發(fā)送“start”。程序中“if(flag)continue;”語句使得當數(shù)據(jù)發(fā)送失敗時,結束本次循環(huán),返回到開始等待發(fā)送命令,這樣避免了由于偶爾數(shù)據(jù)發(fā)送失敗造成整個程序無法運行,甚至整個設備無法運行,因而,用“if(flag)continue;”語句結束錯誤傳輸。可提高I2C通信的質(zhì)量,同時也提高了使用I2C總線通信的設備的效率。

    通信相關文章:通信原理


    雙控開關相關文章:雙控開關原理


    評論


    相關推薦

    技術專區(qū)

    關閉
    主站蜘蛛池模板: 平阴县| 佳木斯市| 许昌县| 常山县| 类乌齐县| 独山县| 怀宁县| 儋州市| 灵台县| 舞钢市| 亚东县| 儋州市| 德昌县| 巴青县| 卢氏县| 额尔古纳市| 鹿邑县| 杂多县| 西宁市| 固始县| 博客| 合山市| 泰州市| 达尔| 镇赉县| 平舆县| 财经| 伊宁市| 怀仁县| 绍兴县| 黄山市| 余干县| 临汾市| 万全县| 武宁县| 日土县| 淮滨县| 通渭县| 贵溪市| 渭源县| 庆元县|