国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

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

發(fā)布時(shí)間:2010-4-14 10:24    發(fā)布者:我芯依舊
關(guān)鍵詞: 單片機(jī) , 通信 , 總線
1 引言

隨著單片機(jī)控制系統(tǒng)的不斷擴(kuò)大以及控制功能不斷增多,有限的單個(gè)單片機(jī)通用I/O口已不能滿足同一系統(tǒng)中控制多個(gè)受控對(duì)象需要,隨著FC總線研究的深入,用I2C總線擴(kuò)展單片機(jī)I/O口的方法在全自動(dòng)、半自動(dòng)儀器的開發(fā)領(lǐng)域得到了廣泛應(yīng)用,本文介紹了一個(gè)測(cè)試系統(tǒng)通過FC總線擴(kuò)展I/O口實(shí)現(xiàn)了系統(tǒng)的多個(gè)功能。給出了系統(tǒng)的硬件連接以及Atmega128與三個(gè)Atmega168之間的軟件通信流程圖。

2 系統(tǒng)的硬件結(jié)構(gòu)

圖1是作者所研究的測(cè)試系統(tǒng)的整體框圖,本系統(tǒng)中主要芯片PHILIPS公司的LPC2292,在此系統(tǒng)中鍵盤上其中三個(gè)按鈕分別控制三個(gè)電機(jī),系統(tǒng)的主要功能是LPC2292將掃描到的鍵盤信息發(fā)給Atmega128單片機(jī),Atmega128單片機(jī)通過I2C總線尋址Atmega168,并向被尋址的Atmega168發(fā)送電機(jī)控制命令,最后,電機(jī)根據(jù)Atmega168控制策略正常運(yùn)行。電機(jī)啟動(dòng)同時(shí),數(shù)據(jù)采集模塊也開始正常運(yùn)行,數(shù)據(jù)采集模塊把采到數(shù)據(jù)送到LPC2292的A/D轉(zhuǎn)換接口,然后將ADC輸出的數(shù)據(jù)發(fā)送到LCD。系統(tǒng)中的撥碼開關(guān)用于設(shè)置相應(yīng)的Atmega168單片機(jī)的地址,當(dāng)單片機(jī)Atmega128接收到LPC2292發(fā)來的控制命令時(shí),通過I2C總線尋址Atmega168,當(dāng)某個(gè)Atmega168的地址與Atmega128廣播地址相同時(shí),它就開始根據(jù)Atmega128發(fā)送的命令控制電機(jī)開始工作。


圖1基于I2C總線的I/O擴(kuò)展框圖

3 I2C總線

I2C總線是PHILIPS公司推出的芯片間串行數(shù)據(jù)傳輸總線,軟、硬件協(xié)議十分巧妙,2根線(SDA,SCL)HP可實(shí)現(xiàn)完善的全雙工同步數(shù)據(jù)傳送,能夠十分方便地構(gòu)成單主系統(tǒng)或多主系統(tǒng)和外同器件擴(kuò)展系統(tǒng)。不過,多主系統(tǒng)(即系統(tǒng)中有多個(gè)I2C總線接口的單片機(jī))會(huì)出現(xiàn)多主競(jìng)爭(zhēng)的復(fù)雜狀態(tài)。I2C器件是把I2C的協(xié)議植入器件的I/O接口,使用時(shí)器件直接掛到I2C總線上,這一特點(diǎn)給用戶在設(shè)計(jì)應(yīng)用系統(tǒng)時(shí)帶來了極大的方便。I2C器件無須片選信號(hào),是否選中是由主器件發(fā)出的I2C從地址決定的。

所有掛到I2C總線的外圍器件,各自都有一個(gè)唯一確定的地址。任何時(shí)刻總線上只有一個(gè)主控器件對(duì)總線實(shí)行控制權(quán),分時(shí)實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)的數(shù)據(jù)傳送。I2C總線上所有外闈器件都有規(guī)范的器件地址,器件地址由7位組成,它和1位方向位(R/W)構(gòu)成了I2C總線器件的尋址字節(jié)SLA,格式如下:


器件地址(A6,A5,A4,A3)是I2C總線外圍接口器件同有的地址編碼(4位或5位),器件出廠時(shí)已固化好。引腳地址(A2,A1,A0)和器件在電路中的實(shí)際接法有關(guān)(地址線、電源或地),形成地址數(shù)據(jù)。數(shù)據(jù)方向位(R/W)規(guī)定了總線上的主節(jié)點(diǎn)對(duì)從節(jié)點(diǎn)的數(shù)據(jù)傳送方向,當(dāng)(R/W)位置1時(shí)接收,當(dāng)(R/W)為0時(shí)發(fā)送。圖1中的撥碼開關(guān)設(shè)置了從單片機(jī)Atmega168的地址,也就是從機(jī)地址的低三位(A2,AI,A0),當(dāng)某個(gè)撥碼開關(guān)的某個(gè)開關(guān)閉合時(shí),相應(yīng)的地址位為零,否則相應(yīng)位為1,因此可以通過撥碼開關(guān)上開關(guān)的狀態(tài)來設(shè)定從單片機(jī)Atmega168的地址,比如某個(gè)撥碼開關(guān)與A0、A2位對(duì)應(yīng)的開關(guān)閉合,與Al對(duì)應(yīng)的開關(guān)斷開,那么這個(gè)單片機(jī)地址的低三位為010。

4 I2C通信的流程圖

根據(jù)I2C總線的傳輸協(xié)議規(guī)范和硬件連接,作者給出了如圖2和圖3基本程序流程圖和部分程序。開發(fā)語言為c語言,與匯編語言相比,可以提高軟件的執(zhí)行速度。

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

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

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


圖3 從機(jī)接收流程圖

4.2 編程中的注意事項(xiàng)

a)在主機(jī)或從機(jī)初始化時(shí),一定要設(shè)定數(shù)據(jù)傳輸方向;

b)由于每次發(fā)送/接收數(shù)據(jù)時(shí)TWCR寄存器的中斷標(biāo)志位必須置位,因此程序中要有等待TWCR寄存器中斷位置位程序,同時(shí),為了避免由于某種原因?qū)е轮袛辔徊荒苤梦辉斐傻却绦蜻M(jìn)入死循環(huán),在等待中斷位置位程序中要有等待超時(shí)返回程序。

c)I2C總線的使用,除了基本的啟動(dòng)、結(jié)束、應(yīng)答、非應(yīng)答子程序外,還應(yīng)有應(yīng)答位檢查、發(fā)送和接收單字節(jié)、發(fā)送和接收多字節(jié)等子程序。

5 結(jié)論

作者在程序流程的每個(gè)關(guān)鍵部分都設(shè)置了錯(cuò)誤查詢和錯(cuò)誤處理,使得I2C程序能夠從錯(cuò)誤中自動(dòng)恢復(fù),避免了由于I2C通信導(dǎo)致的錯(cuò)誤而使得系統(tǒng)無法正常工作,文中還給出了部分發(fā)送子程序和編程注意事項(xiàng)。對(duì)于圖2和圖3的I2C通信流程,作者已在多個(gè)科研項(xiàng)目中進(jìn)行了編程使用。實(shí)踐證明,按上述流程編寫I2C通信程序,主從單片機(jī)之間的通信非常可靠。

本文作者創(chuàng)新點(diǎn):程序流程的每個(gè)關(guān)鍵部分都設(shè)置了錯(cuò)誤查詢和錯(cuò)誤處理,使心通信能夠從錯(cuò)誤中自動(dòng)恢復(fù),提高了使用I2C通信的可靠性,并且給出了避免死循環(huán)的錯(cuò)誤處理程序。


作者:賈朱紅,張曉冬      來源:《微計(jì)算機(jī)信息》(嵌入式與SOC)2009年第3-2期
本文地址:http://m.qingdxww.cn/thread-10426-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專區(qū)
  • 使用SAM-IoT Wx v2開發(fā)板演示AWS IoT Core應(yīng)用程序
  • 使用Harmony3加速TCP/IP應(yīng)用的開發(fā)培訓(xùn)教程
  • 集成高級(jí)模擬外設(shè)的PIC18F-Q71家族介紹培訓(xùn)教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)在線工具

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美亚洲综合图区在线 | 91亚洲精品丁香在线观看 | 毛片基地看看成人免费 | 婷婷丁香四月 | 久草视频国产 | 国内精品在线播放 | 国产成人精品久久 | 婷婷丁香色 | 国产伦精品一区二区三区免费 | 在线观看91精品国产下载 | 国产免费爽爽视频免费可以看 | 欧美日韩中文国产va另类 | 日本欧美亚洲 | 精品国产一区二区三区在线 | 国产伦| 向日葵视频色板app 向日葵视频免费在线观看 向日葵视频免费下载 | h视频在线观看免费观看 | 狼人综合色 | 国产区香蕉精品系列在线观看不卡 | 成品人app软件大全下载免费版 | 国产色综合天天综合网 | 2019国产在线| 欧美视频一区二区三区精品 | 国产777| 特黄aa级毛片免费视频播放 | 2021国产麻豆剧传媒剧情最新 | 亚洲免费中文 | 天天爽夜夜春 | 国产精品国产精品 | 日韩精品中文字幕在线 | 成人午夜小视频手机在线看 | 国产护士资源总站 | 青草草在线观看 | 99视频在线播放 | 99精品视频在线在线视频观看 | 欧美日韩精品一区二区在线播放 | 一区二区三区四区在线播放 | 亚洲精品天堂自在久久77 | 老司机精品导航 | 免费观看四虎精品成人 | 国产成人精品日本亚洲专一区 |