項(xiàng)目七、I2C總線擴(kuò)展_第1頁
項(xiàng)目七、I2C總線擴(kuò)展_第2頁
項(xiàng)目七、I2C總線擴(kuò)展_第3頁
項(xiàng)目七、I2C總線擴(kuò)展_第4頁
項(xiàng)目七、I2C總線擴(kuò)展_第5頁
已閱讀5頁,還剩51頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、I2C總線擴(kuò)展1項(xiàng)目七、I2C總線擴(kuò)展 任務(wù). AT24C系列存儲器讀寫操作能力目標(biāo)1、了解I2C總線原理2、能采用I2C技術(shù)對AT24C系列存儲器讀寫操作學(xué)習(xí)內(nèi)容1、I2C總線原理2、AT24C系列存儲器讀寫操作 2一、任務(wù)要求 要求先對2401C執(zhí)行寫操作,將AT89C51內(nèi)部數(shù)據(jù)存儲器中30H3FH中的數(shù)據(jù)寫入2401C中從30H開始的16個連續(xù)存儲單元中,再執(zhí)行讀操作,讀取2401C中30H3FH中的數(shù)據(jù),并將數(shù)據(jù)存儲到AT89C51內(nèi)部存儲器中從40H開始的16個連續(xù)存儲單元中。 KEY1充當(dāng)外部中斷0源,當(dāng)按下KEY1時,單片機(jī)完成用I2C總線寫AT2402,KEY2充當(dāng)外部中斷1

2、源,當(dāng)按下KEY2時,單片機(jī)完成用I2C總線讀AT2402。 3二、任務(wù)分析1、根據(jù)要求整個程序由主程序和中斷0和中斷1三段程序組成。2、AT2401是一個帶有總線結(jié)構(gòu)的存儲器,要對AT2401進(jìn)行讀或?qū)?,必須按照AT2402的讀寫時序編寫開始信號子程序、停止信號子程序、發(fā)送一個字節(jié)子程序、接收一個應(yīng)答位子程序、發(fā)送一個接收應(yīng)答位子程序、發(fā)送一個非接收應(yīng)答位子程序。 4三、學(xué)習(xí)知識 1、I2C總線結(jié)構(gòu)I2C串行總線只有二根信號線,一根是雙向的數(shù)據(jù)線SDA,另一根是雙向的時鐘線SCL。圖7-1 I2C主/從系統(tǒng)結(jié)構(gòu)圖 5 在信息的傳輸過程中,I2C總線上發(fā)送數(shù)據(jù)的設(shè)備稱為發(fā)送器,而接收數(shù)據(jù)的設(shè)備

3、稱為接收器。能夠初始發(fā)送、產(chǎn)生時鐘、起始信號、停止信號的設(shè)備稱為主機(jī)或主控制器;而被主機(jī)尋址的設(shè)備稱為從機(jī)。 I2C總線上的每個芯片(例如微控制器、LCD驅(qū)動器、存儲器或鍵盤接口)都有唯一的地址,就像電話機(jī)一樣都有各自唯一的號碼,只有被選址的芯片即從機(jī)才和主機(jī)(例如單片機(jī))通信,就像電話機(jī)只有在被撥通各自的號碼時才能通話。62、I2C總線協(xié)議(1)主機(jī)從機(jī)和接收器發(fā)送器主機(jī)從機(jī)、接收器發(fā)送器這些關(guān)系不是持久的,只由當(dāng)時數(shù)據(jù)傳輸?shù)姆较驔Q定。例如在如下的傳輸數(shù)據(jù)的過程中:1)微控制器 A 要發(fā)送信息到微控制器B微控制器 A(主機(jī))尋址微控制器 B(從機(jī))微控制器 A(主機(jī)發(fā)送器)發(fā)送數(shù)據(jù)到微控制器

4、 B(從機(jī)接收器) 微控制器 A終止傳輸 72) 如果微控制器 A 想從微控制器 B 接收信息微控制器 A(主機(jī))尋址微控制器 B(從機(jī))微控制器 A(主機(jī)接收器)從微控制器B(從機(jī)發(fā)送器)接收數(shù)據(jù)微控制器 A終止傳輸8(2)I2C總線位的傳輸 I2C總線為同步傳輸總線,總線數(shù)據(jù)與時鐘完全同步。I2C總線規(guī)定時鐘線SCL上一個時鐘周期只能傳送一位數(shù)據(jù)。當(dāng)時鐘SCL線為高電平時,對應(yīng)數(shù)據(jù)線SDA線上的電平即為有效數(shù)據(jù)位(高電平為1,低電平為0);在數(shù)據(jù)傳送開始后,SCL為高電平的時候,SDA的數(shù)據(jù)必須保持穩(wěn)定,只有當(dāng)SCL為低電平的時候,才允許SDA上的數(shù)據(jù)改變。當(dāng)SCL發(fā)出重復(fù)的時鐘脈沖時,每

5、次為高電平時,SDA線上對應(yīng)的電平就是一位一位傳送的數(shù)據(jù),其中最先傳輸?shù)氖亲止?jié)的最高位數(shù)據(jù),其時序如圖7-2所示。 9圖7-2 I2C總線上SDA和SCL的時序關(guān)系 10(3)起始條件和停止條件 起始條件:當(dāng)SCL線為高電平時,SDA線由高到低的轉(zhuǎn)換。出現(xiàn)起始信號以后,總線被認(rèn)為“忙”。 停止條件:當(dāng)SCL為線高電平時,SDA線由低到高的轉(zhuǎn)換。出現(xiàn)停止信號后,總線被認(rèn)為“空閑”。 也就是SCL和SDA都保持高電平,總線就是空閑的。 在連續(xù)讀寫時,如收到-個“停止條件”。則所有讀寫操作將終止,芯片將進(jìn)入等待模式。起始條件和停止條件般由主機(jī)產(chǎn)生。11(4)應(yīng)答信號 接收數(shù)據(jù)的芯片在接收到8位數(shù)據(jù)后

6、,向發(fā)送數(shù)據(jù)的芯片發(fā)出特定的低電平脈沖,表示已收到數(shù)據(jù)。應(yīng)答位的時鐘脈沖也由主機(jī)產(chǎn)生。發(fā)送器在應(yīng)答時鐘脈沖高電平期間,將SDA線拉為高電平,即釋放SDA線,轉(zhuǎn)由接收器控制。接收器在應(yīng)答時鐘脈沖的高電平期間必須拉低SDA線,以使之為穩(wěn)定的低電平作為有效應(yīng)答,如圖7-4所示。若接收器不能拉低SDA線,則為非應(yīng)答信號。12圖7-4 I2C總線上的應(yīng)答 發(fā)送器向接收器發(fā)出一個字節(jié)的數(shù)據(jù)后,等待接收器發(fā)出一個應(yīng)答信號,發(fā)送器接收到應(yīng)答信號后,根據(jù)實(shí)際情況作出是否繼續(xù)傳遞信號的判斷。若未收到應(yīng)答信號,由判斷為接收器出現(xiàn)故障。 13(5)數(shù)據(jù)字節(jié)的傳送 發(fā)送到SDA線上的每個字節(jié)必須為8位。每次傳輸可以發(fā)送

7、的字節(jié)數(shù)量不受限制,但每個字節(jié)后必須跟個應(yīng)答位,數(shù)據(jù)傳輸?shù)捻樞蚴鞘紫葌鬏敂?shù)據(jù)的最高位MSB,然后在每一個SCL線的時鐘周期內(nèi),傳送一位數(shù)據(jù),在8個SCL時鐘周期后,SDA線上完成一個字節(jié)的數(shù)據(jù)傳送。在傳輸時,若SCL線為高電平,SDA線上電平需保持穩(wěn)定不變,只有SCL為低電平時,SDA線上的電平才能改變。否則,若SCL線為高電平,而SDA線上的電平由高跳變到低,則為起始信號;由低跳變到高,則為停止信號。 14 SDA線上完成一個字節(jié)的數(shù)據(jù)傳送后,在第9個SCL時鐘周期,接收器需發(fā)出一個應(yīng)答信號,即在SCL線為高電平時,將SDA線拉低,以使之為穩(wěn)定的低電平作為有效應(yīng)答,表明正確收到了發(fā)送器發(fā)送的

8、數(shù)據(jù)。 15圖7-5 I2C總線上數(shù)據(jù)的傳送 16(6)一幀完整數(shù)據(jù)的傳送一次典型的I2C總線數(shù)據(jù)傳輸包括一個起始條件(START)、一個地址字節(jié)(位7-1:7位從機(jī)地址;位0:R/W方向位)、一個或多個字節(jié)的數(shù)據(jù)和一個停止條件(STOP)。每個地址字節(jié)和每個數(shù)據(jù)字節(jié)后面都必須用SCL高電平期間的SDA低電平(見圖7-6)來應(yīng)答(ACKNOWLEDGE簡寫為ACK)。如果在數(shù)據(jù)傳輸了一段時間后,接收器件不能接收更多的數(shù)據(jù)字節(jié),接收器件將發(fā)出一個“非應(yīng)答”(NACK)信號,這用SCL高電平期間的SDA高電平表示,發(fā)送器件讀到“非應(yīng)答”信號后終止傳輸。 17 方向位占據(jù)地址字節(jié)的最低位。方向位被設(shè)

9、置為邏輯1表示這是一個“讀”(READ)操作,即主機(jī)接收從機(jī)發(fā)送的數(shù)據(jù);方向位為邏輯0表示這是一個“寫”(WRITE)操作,即從機(jī)接收主機(jī)發(fā)送的數(shù)據(jù)。所有的數(shù)據(jù)傳輸都由主器件啟動,可以尋址一個或多個目標(biāo)從機(jī)。 圖7-6 I2C總線上完整數(shù)據(jù)的傳送 183、I2C總線的傳送格式 (1)主發(fā)送從接收 圖7-7 典型的主發(fā)送從接收時序 19(2)從發(fā)送主接收 圖7-8 典型的主接收從發(fā)送時序 204、AT24CXX(1)管腳配置和功能 表7-4 AT24C02的地址定義 最高位 7位從機(jī)地址 最低位1010A2A1A0R/W D7 D6 D5 D4 D3 D2 D1 D0 21SCL :串行時鐘 S

10、DA :串行數(shù)據(jù)/地址 A0、A1、A2:器件地址輸入端 WP:寫保護(hù) 如果WP管腳連接到Vcc,所有的內(nèi)容都被寫保護(hù),只能讀而不能寫。22(2)AT24C02的讀寫操作 1)字節(jié)寫 在字節(jié)寫模式下,主機(jī)發(fā)送起始信號和從機(jī)地址信息,R/W位置零。在從機(jī)產(chǎn)生應(yīng)答信號后,主機(jī)發(fā)送AT24C02的內(nèi)部字節(jié)地址,該地址表明一個字節(jié)的數(shù)據(jù)要寫入AT24C02的哪一個字節(jié)。主機(jī)在收到從機(jī)的另一個應(yīng)答信號后,再發(fā)送數(shù)據(jù)到AT24C02內(nèi)部字節(jié)地址表明的存儲單元。AT24C02再次應(yīng)答,并在主機(jī)產(chǎn)生停止信號后開始內(nèi)部數(shù)據(jù)的擦寫。在內(nèi)部擦寫過程中,AT24C02不再應(yīng)答主機(jī)的任何請求。字節(jié)寫時序如圖7-10所示

11、。23圖7-10 字節(jié)寫時序 242)頁寫 用頁寫AT24C02可以一次寫入8個字節(jié)的數(shù)據(jù)。頁寫操作的啟動和字節(jié)寫一樣,不同在于傳送了一字節(jié)數(shù)據(jù)后并不產(chǎn)生停止信號。主機(jī)被允許再發(fā)送7個額外的字節(jié),每發(fā)送一個字節(jié)數(shù)據(jù)后,AT24C02產(chǎn)生一個應(yīng)答信號,并將內(nèi)部字節(jié)地址自動加1。如果寫到此頁的最后一個字節(jié),即發(fā)送完8個字節(jié)數(shù)據(jù)后,主機(jī)繼續(xù)發(fā)送數(shù)據(jù),數(shù)據(jù)將從該頁的首地址寫入,先前寫入的數(shù)據(jù)將被覆蓋,造成數(shù)據(jù)丟失。 25圖7-11 頁寫時序 26AT24C02的讀操作AT24C02的讀操作可分為立即地址讀、選擇性讀和連續(xù)讀。1)立即地址讀 圖7-12 立即地址讀時序 272)選擇性讀 圖7-13 選擇

12、性讀時序 283)連續(xù)讀 圖7-14 連續(xù)讀時序 29四、任務(wù)實(shí)施1、硬件設(shè)計(jì) 圖7-15 單片機(jī)和AT2401CI2C總線硬件接線原理圖 302、軟件設(shè)計(jì)具體流程圖如圖7-16所示。 否是有無有有發(fā)送控制字、從器件地址I2C開始信號中斷入口應(yīng)答信號發(fā)從器件片內(nèi)地址應(yīng)答信號發(fā)送數(shù)據(jù)應(yīng)答信號發(fā)送結(jié)束停止信號返回?zé)o無中斷0(寫入AT2401CI2C數(shù)據(jù)) 31發(fā)送從器件地址I2C開始信號中斷入口應(yīng)答信號發(fā)從器件片內(nèi)地址應(yīng)答信號開始信號應(yīng)答信號最后一個字節(jié)發(fā)非應(yīng)答返回發(fā)送控制字接收數(shù)據(jù)發(fā)應(yīng)答位停止信號無有是否無有無有 中斷1(讀出AT2401CI2C數(shù)據(jù)) 32主程序:ACKBIT 10H;應(yīng)答標(biāo)志

13、位SLADATA 50H;器件地址字SUBADATA 51H;器件子地址NUMBYTEDATA 52H;讀/寫字節(jié)數(shù)SDABI T P1.5SCLBIT P1.4;I2C總線定義MTDEQU 30H;發(fā)送數(shù)據(jù)緩存區(qū)首地址(30H-3FH)MRDEQU 40H;接收數(shù)據(jù)緩存區(qū)首地址(40H-4FH)ORG0000HAJMPMAINORG0003HLJMP WRITEORG 0013HLJMPREAD33MAIN:MOVR4,#0F0H;延時,等待其它芯片復(fù)位完成DJNZR4,$MOVA,#0;依次將30H3FH設(shè)為00H0FHMOVR0,#30HS1:MOVR0,AINCR0INC ACJNER

14、0,#04H,S1SETBPX1;將中斷1(讀數(shù)據(jù))設(shè)為高優(yōu)先級SETBEX0SETBEX1SETBEAL1:NOPJMP L134中斷0:(寫入AT2401CI2C數(shù)據(jù)) WRITE:MOVSLA,#0A0H;24C01C地址字,寫操作MOVSUBA,#30H;目標(biāo)地址MOVNUMBYTE,#16;字節(jié)數(shù)LCALLIWRNBYTE;寫數(shù)據(jù)RETI35中斷1:(讀出AT2401CI2C數(shù)據(jù))READ:MOVSLA,#0A0H;24C01C地址字,偽寫入操作MOVSUBA,#30H;目標(biāo)地址MOVNUMBYTE,#16;字節(jié)數(shù)LCALLIRDNBYTE;寫數(shù)據(jù)RETI36;名稱:STRRT;描述

15、:啟動I2C總線子程序發(fā)送I2C總線起始條件 START:SETBSDA;發(fā)送起始條件數(shù)據(jù)信號NOP;起始條件建立時間大于4.7usSETBSCL;發(fā)送起始條件的時鐘信號NOPNOPNOPNOPNOP;起始條件鎖定時間大于4.7usCLRSDA;發(fā)送起始信號NOPNOPNOPNOP;起始條件鎖定時間大于4.7usCLRSCL;鉗住I2C總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù)NOPRET37;名稱:STOP;描述:停止I2C總線子程序發(fā)送I2C總線停止條件 STOP:CLRSDA;發(fā)送停止條件的數(shù)據(jù)信號NOPNOPSETBSCL;發(fā)送停止條件的時鐘信號NOPNOPNOPNOPNOP;起始條件建立時間大于4.7

16、usSETBSDA;發(fā)送I2C總線停止信號NOPNOPNOPNOPNOP;延遲時間大于4.7usRET38;名稱:MACK;描述:發(fā)送應(yīng)答信號子程序 MACK:CLRSDA;將SDA置0NOPNOPSETBSCLNOPNOPNOPNOPNOP;保持?jǐn)?shù)據(jù)時間,大于4.7usCLRSCLNOPNOPRET39;名稱:MNACK;描述:發(fā)送非應(yīng)答信號子程序MNACK:SETBSDA;將SDA置1NOPNOPSETBSCLNOPNOPNOPNOPNOPCLRSCL;保持?jǐn)?shù)據(jù)時間,大于4.7usNOPNOPRET40;名稱:CACK;描述:檢查應(yīng)答位子程序,返回值:ACK=1時表示有應(yīng)答 CACK:SE

17、TBSDANOPNOPSETBSCLCLRACKNOPNOPMOVC,SDAJCCENDSETBACK;判斷應(yīng)答位CEND:NOPCLRSCLNOPRET41;名稱:WRBYTE;描述:發(fā)送字節(jié)子程序,字節(jié)數(shù)據(jù)放入ACC WRBYTE:MOVR0,#08HWLP:RLCA;取數(shù)據(jù)位JCWRISJMPWRO;判斷數(shù)據(jù)位WLP1:DJNZR0,WLPNOPRETWRI:SETBSDA;發(fā)送1NOPSETBSCLNOPNOPNOPNOPNOP42CLRSCLSJMPWLP1WRO:CLRSDA;發(fā)送0NOPSETBSCLNOPNOPNOPNOPNOPCLRSCLSJMPWLP143;名稱:RDBYT

18、E;描述:讀取字節(jié)子程序,讀出的數(shù)據(jù)存放在ACC RDBYTE:MOVR0,#08HRLP:SETBSDANOPSETBSCL;時鐘線為高,接收數(shù)據(jù)位NOPNOPMOVC,SDA;讀取數(shù)據(jù)位MOVA,R2CLRSCL;將SCL拉低,時間大于4.7usRLCA;進(jìn)行數(shù)據(jù)位的處理MOVR2,ANOPNOPNOPDJNZR0,RLP;未夠8位,繼續(xù)讀入RET44MAIN:MOVR4,#0F0H;延時,等待其它芯片復(fù)位完成DJNZR4,$ ;發(fā)送數(shù)據(jù)緩存區(qū)初始化,將16個連續(xù)字節(jié)分別賦值為00H到0FHMOVA,#0MOVR0,#30HS1:MOVR0,AINCR0INCACJNER0,#40H,S1

19、;向24C01C中寫數(shù)據(jù),數(shù)據(jù)存放在24C01C中30H開始的16個字節(jié)中MOVSLA,#0A0H;24C01C地址字,寫操作MOVSUBA,#30H;目標(biāo)地址MOVNUMBYTE,#16;字節(jié)數(shù)45LCALLIWRNBYTE;寫數(shù)據(jù)DELAY:MOVR5,#20D1:MOVR6,#248D2:MOVR7,#248DJNZR7,$DJNZR6,D2DJNZR5,D1;從24C01C中讀數(shù)據(jù),數(shù)據(jù)送AT89C51中40H開始的16個字節(jié)中MOVSLA,#0A0H;24C01C地址字,偽寫入操作MOVSUBA,#30H;目標(biāo)地址MOVNUMBYTE,#16;字節(jié)數(shù)LCALLIRDNBYTE;寫數(shù)據(jù)

20、END46;名稱:IWRNBYTE;描述:向器件指定子地址寫N個數(shù)據(jù);入口參數(shù):器件地址字SLA,子地址SUBA,發(fā)送數(shù)據(jù)緩沖區(qū)MTD,發(fā)送字節(jié)數(shù)NUMBYTE IWRNBYTE:MOVR3,NUMBYTELCALLSTART;啟動總線MOVA,SLALCALLWRBYTE;發(fā)送器件地址字LCALLCACKJNBACK,RETWRN;無應(yīng)答則退出MOVA,SUBA;指定子地址LCALLWRBYTELCALLCACKMOVR1,#MTD47WRDA:MOVA,R1LCALLWRBYTE;開始寫入數(shù)據(jù)LCALLCACKJNBACK,IWRNBYTEINCR1DJNZR3,WRDA;判斷是否寫完RE

21、TWRN:LCALLSTOPRET48;名稱:IRDNBYTE;描述:從器件指定子地址讀取N個數(shù)據(jù);入口參數(shù):器件地址字SLA,子地址SUBA,接收數(shù)據(jù)緩存區(qū)MRD,接收字節(jié)數(shù)NUMBYTE IRDNBYTE:MOVR3,NUMBYTELCALLSTARTMOVA,SLALCALLWRBYTE;發(fā)送器件地址字LCALLCACKJNBACK,RETRDNMOVA,SUBA;指定子地址LCALLWRBYTELCALLCACKLCALLSTART;重新啟動總線MOVA,SLAINCA;準(zhǔn)備進(jìn)行讀操作LCALLWRBYTELCALLCACK49JNBACK,IRDNBYTEMOVR1,#MRDRON1:LCALLRDBYTE;讀操作開始MOVR1,ADJNZR3,SAC

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論