新聞中心

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

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

        作者: 時(shí)間:2013-02-17 來(lái)源:網(wǎng)絡(luò) 收藏

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

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

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

          if(j>10000) return O:

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

          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主機(jī)發(fā)送程序框圖

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

        通信相關(guān)文章:通信原理


        雙控開(kāi)關(guān)相關(guān)文章:雙控開(kāi)關(guān)原理


        關(guān)鍵詞: I2C總線 通信流程 LPC2292

        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 周口市| 台南县| 松潘县| 灵璧县| 大连市| 微博| 江都市| 安龙县| 高雄市| 夏津县| 博白县| 闵行区| 阳江市| 皋兰县| 右玉县| 天祝| 陕西省| 湘西| 鄯善县| 介休市| 文山县| 钦州市| 罗源县| 垣曲县| 东光县| 澄城县| 绍兴县| 卓尼县| 威海市| 永吉县| 长沙县| 昔阳县| 新野县| 双流县| 和静县| 同江市| 黎川县| 稻城县| 互助| 太原市| 长宁区|