飛思卡爾8位單片機-第10章-IIC_第1頁
飛思卡爾8位單片機-第10章-IIC_第2頁
飛思卡爾8位單片機-第10章-IIC_第3頁
飛思卡爾8位單片機-第10章-IIC_第4頁
飛思卡爾8位單片機-第10章-IIC_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、2021/8/51第十章第十章 內(nèi)部集成電路內(nèi)部集成電路IIC原理及應(yīng)用原理及應(yīng)用第第1節(jié)節(jié) IIC概述概述第第2節(jié)節(jié) IIC管腳及相關(guān)寄存器管腳及相關(guān)寄存器第第3節(jié)節(jié) IIC在系統(tǒng)擴展中的應(yīng)用在系統(tǒng)擴展中的應(yīng)用2021/8/529.1 I2C 概述 I2C總線是PHILIPS公司推出的串行總線。I2C總線的應(yīng)用非常廣泛,在很多器件上都配備有I2C總線接口,使用這些器件時一般都需要通過I2C總線進(jìn)行控制。這里簡要介紹I2C總線的工作原理及操作時序。2021/8/531 1、電氣特性;、電氣特性;2 2、尋址無需片選;、尋址無需片選;3 3、多主和主從、多主和主從4 4、MTMT、MRMR、ST

2、ST、SRSRQG8 SDA SCL2021/8/54I I2 2C C總線的特點總線的特點1、電氣特性。各節(jié)點需共地,SDA和SCL需分別接上拉電阻。2、尋址無需片選,主從方式中,從器件的地址包括器件編號地址和引腳地址,器件編寫地址由I2C總線委員會分配,引腳地址決定于引腳外接電平的高低3、多主和主從兩種工作方式的總線4、為主控發(fā)送器、主控接收器、被控發(fā)送器和被控接收器5、起始和終止信號以及時鐘信號都是由主控器提供6、其總線傳輸速率為100 kb/s(改進(jìn)后的規(guī)范為400 kb/s),總線驅(qū)動能力為400 pF。QG8的最快速度為clock/20。7、 I2C總線還具有仲裁功能,當(dāng)一個以上的

3、主器件同時試圖控制總線時,只允許一個有效,從而保證數(shù)據(jù)不被破壞8、當(dāng)主機發(fā)送尋址字節(jié)時,總線上所有器件都將該尋址字節(jié)中的高7位地址與自己器件的地址比較,若兩者相同,則該器件認(rèn)為被主機尋址,并根據(jù)讀/寫位確定是從發(fā)送器還是從接收器9、具有I2C總線接口的單片機可以工作在上述4種工作狀態(tài)中的任一狀態(tài),而一些帶有I2C總線接口的存儲器(RAM或E2PROM)模塊只能充當(dāng)被控發(fā)送器或被控接收器10、在多主方式中,通過硬件和軟件的仲裁主控制器取得總線控制權(quán)2021/8/551 1、數(shù)據(jù)線、數(shù)據(jù)線SDASDA和時鐘線和時鐘線SCLSCL都是雙向傳輸線,平時均處于高都是雙向傳輸線,平時均處于高電平備用狀態(tài),

4、只有當(dāng)需要關(guān)閉電平備用狀態(tài),只有當(dāng)需要關(guān)閉I I2 2C C總線時,總線時,SCLSCL線才會箝線才會箝位在低電平。位在低電平。2 2、 SCLSCL線上為高電平時,線上為高電平時,SDASDA線上的數(shù)據(jù)信號才會有效,線上的數(shù)據(jù)信號才會有效, SCLSCL低時,低時,SDASDA數(shù)據(jù)無效。因此,只有當(dāng)數(shù)據(jù)無效。因此,只有當(dāng)SCLSCL線為低電平時,線為低電平時,SDASDA線上的電平狀態(tài)才允許發(fā)生變化。線上的電平狀態(tài)才允許發(fā)生變化。I I2 2C C總線的接口電路結(jié)構(gòu)總線的接口電路結(jié)構(gòu)2021/8/56圖9-2 I2C總線的器件連接2021/8/57I I2 2C C總線信號的時序總線信號的時

5、序2021/8/58I I2 2C C協(xié)議協(xié)議一個標(biāo)準(zhǔn)的通信由四部分組成:一個標(biāo)準(zhǔn)的通信由四部分組成: STARTSTART信號信號 從地址傳輸從地址傳輸 數(shù)據(jù)傳輸數(shù)據(jù)傳輸 STOPSTOP信號信號2021/8/592021/8/510(1 1)STARTSTART信號信號 一個一個STARTSTART信號定義為信號定義為SDASDA的一個下降沿,同時的一個下降沿,同時SCLSCL保持為高。保持為高。由主機產(chǎn)生。由主機產(chǎn)生。(2 2)從地址傳輸)從地址傳輸7 7位呼叫地址,緊接著一個讀位呼叫地址,緊接著一個讀/ /寫位,讀寫位告訴從器件數(shù)據(jù)傳寫位,讀寫位告訴從器件數(shù)據(jù)傳輸?shù)钠谕较颉]數(shù)钠谕?/p>

6、向。1 = 1 = 讀傳輸,從發(fā)送數(shù)據(jù)給主。讀傳輸,從發(fā)送數(shù)據(jù)給主。 0 = 0 = 寫傳輸,主發(fā)送數(shù)據(jù)給從。寫傳輸,主發(fā)送數(shù)據(jù)給從。正好匹配主器件傳輸?shù)暮艚械刂返膹钠骷ㄟ^送回一個應(yīng)答位正好匹配主器件傳輸?shù)暮艚械刂返膹钠骷ㄟ^送回一個應(yīng)答位響應(yīng)。響應(yīng)。從機地址由一個固定的和一個可編程的部分構(gòu)成。例如,某些從機地址由一個固定的和一個可編程的部分構(gòu)成。例如,某些器件有器件有4 4個固定的位(高個固定的位(高4 4位)和位)和3 3個可編程的地址位(低個可編程的地址位(低3 3位),位),那么同一總線上共可以連接那么同一總線上共可以連接8 8個相同的器件。個相同的器件。2021/8/511(3 3

7、)數(shù)據(jù)傳輸)數(shù)據(jù)傳輸 數(shù)節(jié)為數(shù)節(jié)為8 8位,高位在前,低位在后。每傳輸一位數(shù)據(jù)都有位,高位在前,低位在后。每傳輸一位數(shù)據(jù)都有一個時鐘脈沖相對應(yīng)。一個時鐘脈沖相對應(yīng)。 SCLSCL線為低電平時,線為低電平時,SDASDA線上數(shù)據(jù)就被停止傳送。接收器可線上數(shù)據(jù)就被停止傳送。接收器可向向SCLSCL線輸出低電平而箝住線輸出低電平而箝住SCLSCL(SCL=0SCL=0),迫使),迫使SDASDA線處于線處于等待狀態(tài),直到接收器準(zhǔn)備好接收新的數(shù)據(jù)等待狀態(tài),直到接收器準(zhǔn)備好接收新的數(shù)據(jù)/ /地址字節(jié)時,地址字節(jié)時,再釋放時鐘線再釋放時鐘線SCLSCL(SCLSCL)=1=1),使),使SDASDA線上數(shù)

8、據(jù)傳輸?shù)靡跃€上數(shù)據(jù)傳輸?shù)靡岳^續(xù)進(jìn)行。繼續(xù)進(jìn)行。2021/8/512 數(shù)據(jù)字節(jié)沒有限制,但每個字節(jié)后都必須跟隨一個應(yīng)答位數(shù)據(jù)字節(jié)沒有限制,但每個字節(jié)后都必須跟隨一個應(yīng)答位應(yīng)答信號在第應(yīng)答信號在第9 9個時鐘位上出現(xiàn),主控發(fā)送器必須在被控個時鐘位上出現(xiàn),主控發(fā)送器必須在被控接收器發(fā)送應(yīng)答信號前,預(yù)先釋放對接收器發(fā)送應(yīng)答信號前,預(yù)先釋放對SDASDA線的控制。接收線的控制。接收器在器在SDASDA線上輸出低電平為應(yīng)答信號(線上輸出低電平為應(yīng)答信號(A A),輸出高電平為),輸出高電平為非應(yīng)答信號(非應(yīng)答信號(A A)。)。2021/8/513 主控器接收到應(yīng)答信號后可進(jìn)行下一字節(jié)的發(fā)送。但如果主控器

9、接收到應(yīng)答信號后可進(jìn)行下一字節(jié)的發(fā)送。但如果被控器由于某種原因需要進(jìn)行其他處理而無法繼續(xù)接收被控器由于某種原因需要進(jìn)行其他處理而無法繼續(xù)接收SDASDA線上數(shù)據(jù)時,便可向線上數(shù)據(jù)時,便可向SDASDA線輸出一個非應(yīng)答信號(線輸出一個非應(yīng)答信號(A A),使),使SDASDA線保持高電平,主控器據(jù)此便可產(chǎn)生一個停止信號來終線保持高電平,主控器據(jù)此便可產(chǎn)生一個停止信號來終止止SDASDA線上的數(shù)據(jù)傳輸。線上的數(shù)據(jù)傳輸。 當(dāng)主控器作為接收器接收被控器送來的最后一個數(shù)據(jù)時,當(dāng)主控器作為接收器接收被控器送來的最后一個數(shù)據(jù)時,必須給被控器發(fā)送一個非應(yīng)答信號(必須給被控器發(fā)送一個非應(yīng)答信號(A A),令被控

10、器釋放),令被控器釋放SDASDA線,以便主控器可以發(fā)送停止信號來結(jié)束數(shù)據(jù)的傳輸。線,以便主控器可以發(fā)送停止信號來結(jié)束數(shù)據(jù)的傳輸。I I2 2C C總線上的應(yīng)答信號比較重要,在編制程序時應(yīng)該著重考總線上的應(yīng)答信號比較重要,在編制程序時應(yīng)該著重考慮。慮。2021/8/514(4 4)STOPSTOP信號信號 在在SCLSCL為邏輯為邏輯1 1時時SDASDA的一個上升沿的一個上升沿 主器件做下面兩件事情之一,數(shù)據(jù)傳輸中止:主器件做下面兩件事情之一,數(shù)據(jù)傳輸中止:(a)(a)通過產(chǎn)生一個通過產(chǎn)生一個STOPSTOP信號放棄總線。信號放棄總線。(b)(b)通過產(chǎn)生重復(fù)的通過產(chǎn)生重復(fù)的STARTSTA

11、RT信號發(fā)起一個新的呼叫信號發(fā)起一個新的呼叫。2021/8/515(4) (4) 重復(fù)的重復(fù)的STARTSTART信號信號圖圖10108 8所示,一個重復(fù)的所示,一個重復(fù)的STARTSTART信號是不用首先產(chǎn)生信號是不用首先產(chǎn)生STOPSTOP信號終止通信號終止通信的信的STARTSTART信號。信號。(5) (5) 仲裁程序仲裁程序如果兩個或更多的主器件試圖在同一時間控制總線,一個時鐘同步程如果兩個或更多的主器件試圖在同一時間控制總線,一個時鐘同步程序確定總線時鐘。競爭的主器件之間相對優(yōu)先級由一個數(shù)據(jù)仲裁進(jìn)程序確定總線時鐘。競爭的主器件之間相對優(yōu)先級由一個數(shù)據(jù)仲裁進(jìn)程確定確定。丟失的主器件立

12、即切換到從接收模式并停止驅(qū)動丟失的主器件立即切換到從接收模式并停止驅(qū)動SDASDA輸出。輸出。(6) (6) 時鐘同步時鐘同步2021/8/516QG8的IIC特點與與 標(biāo)準(zhǔn)的標(biāo)準(zhǔn)的IICIIC協(xié)議兼容;協(xié)議兼容;支持多主操作;支持多主操作;有有6464種不同的時鐘頻率可供選擇;種不同的時鐘頻率可供選擇; Software selectable acknowledge bit Software selectable acknowledge bit;支持中斷傳輸;支持中斷傳輸;在總線仲裁中失敗方可自動由主切換到從模式;在總線仲裁中失敗方可自動由主切換到從模式;支持地址匹配中斷;支持地址匹配中斷;

13、有有S S和和P P信號產(chǎn)生與檢測功能;信號產(chǎn)生與檢測功能;有有“重新啟動重新啟動”(Repeated STARTRepeated START)信號產(chǎn)生能力;)信號產(chǎn)生能力;支持支持AckAck信號的產(chǎn)生與檢測;信號的產(chǎn)生與檢測;具有總線忙檢測能力;具有總線忙檢測能力;2021/8/51710.2 10.2 、IICIIC管腳及相關(guān)寄存器管腳及相關(guān)寄存器2021/8/518外部信號描述外部信號描述2021/8/519寄存器寄存器IIC Address Register (IICA)IIC Address Register (IICA)7-1 ADDR作為從模式時,存放被尋找的地址,對于主模式該

14、寄存器無用。作為從模式時,存放被尋找的地址,對于主模式該寄存器無用。IIC Frequency Divider Register (IICF)7-6MULT用來定義波特率的乘數(shù)因子mul:00 mul = 01;01 mul = 02;10 mul = 04;11 Reserved5-0ICRIIC Clock Rate 該ICR數(shù)值用來定義總線分頻得到IIC時鐘的分頻因子,同時該ICR數(shù)值也用來定義數(shù)據(jù)線SDA的數(shù)據(jù)保持時間; IIC 波特率波特率 = 總線速度總線速度(Hz)/(mul * SCL 分頻數(shù)分頻數(shù)) SDA 保持時間保持時間 =總線周期總線周期(s) * SDA保持值保持值上

15、面兩個式子中:mul由MULT決定SCL分頻數(shù)和SDA 保持值就由ICR決定,參加下表;2021/8/520時鐘分頻與數(shù)時鐘分頻與數(shù)據(jù)保持時間表據(jù)保持時間表2021/8/521時鐘分頻設(shè)置舉例時鐘分頻設(shè)置舉例 前提:總線時鐘前提:總線時鐘4MHz4MHz,IICIIC的時鐘為的時鐘為100KHz100KHz;配置:配置:MULT = 01,對應(yīng)對應(yīng) mul = 2;ICR = 0; 對應(yīng)對應(yīng) SCL分頻數(shù)分頻數(shù)=20; SDA保持值保持值= 7; 則波特率則波特率= 總線頻率總線頻率(Hz)/ (mul * SCL分頻數(shù)分頻數(shù)) =4000000/(2*20) =100K; (周期周期10uS

16、)數(shù)據(jù)保持時間數(shù)據(jù)保持時間 = 總線周期總線周期(s) * SDA保持值保持值 = 1/4000000 * 7 = 1.75uS 如果數(shù)據(jù)保持時間不夠,可以修改如果數(shù)據(jù)保持時間不夠,可以修改ICR的數(shù)值,比如設(shè)置為的數(shù)值,比如設(shè)置為7,對應(yīng)的,對應(yīng)的SCL分頻數(shù)為分頻數(shù)為40,SDA保持值為保持值為10,將,將mul修改為修改為1,此時,此時100KHz的波特率不的波特率不變,但數(shù)據(jù)保持時間為變,但數(shù)據(jù)保持時間為2.5uS了。了。 SDA hold time is the delay from the falling edge of the SCL (IIC clock) to the cha

17、nging of SDA (IIC data).2021/8/522IIC Control Register (IICC)IIC Control Register (IICC)7-IICENIic模塊的允許控制位,模塊的允許控制位,“1”時允許,此時對應(yīng)的管腳不再是普通的時允許,此時對應(yīng)的管腳不再是普通的I/O管腳管腳了。了。6-IICIEIIC中斷允許是否打開,中斷允許是否打開,“1”時打開,一般都要使用中斷進(jìn)行數(shù)據(jù)的傳輸。時打開,一般都要使用中斷進(jìn)行數(shù)據(jù)的傳輸。5-MST主模式選擇位,當(dāng)從主模式選擇位,當(dāng)從“0”到到“1”改變時,會產(chǎn)生改變時,會產(chǎn)生S信號,且器件改為主模式;信號,且器件改

18、為主模式;當(dāng)從當(dāng)從“1”切換到切換到“0”時,會產(chǎn)生時,會產(chǎn)生P信號,且器件改為了從模式。信號,且器件改為了從模式。4-TX數(shù)據(jù)傳送的方向控制位,數(shù)據(jù)傳送的方向控制位,“1”表示發(fā)送,表示發(fā)送,“0”表示接收;該位需要根據(jù)數(shù)表示接收;該位需要根據(jù)數(shù)據(jù)傳輸?shù)哪J椒謩e設(shè)置。主模式下,尋址期間該位為據(jù)傳輸?shù)哪J椒謩e設(shè)置。主模式下,尋址期間該位為“1”,對于從模式來說,對于從模式來說,該位需要根據(jù)狀態(tài)寄存器該位需要根據(jù)狀態(tài)寄存器IICS中的中的SRW位來決定。位來決定。3-TXAK該位決定收到數(shù)據(jù)后是否發(fā)送該位決定收到數(shù)據(jù)后是否發(fā)送ACK信號,無論是主還是從模式。信號,無論是主還是從模式?!?”接收到

19、一字節(jié)數(shù)據(jù)后發(fā)送應(yīng)答信號,接收到一字節(jié)數(shù)據(jù)后發(fā)送應(yīng)答信號,“1”未發(fā)送應(yīng)答信號。未發(fā)送應(yīng)答信號。2-RSTARepeat START,在主模式下,對該位寫,在主模式下,對該位寫“1”會產(chǎn)生會產(chǎn)生“重新啟動重新啟動” 信號。信號。2021/8/523IIC Status Register (IICS)IIC Status Register (IICS)7-TCF傳輸結(jié)束標(biāo)志。只有在寫IICD或讀IICD期間,才被硬件清零。當(dāng)IICC中IICIE位為1且TCF也為1時,將進(jìn)入中斷子程0:傳輸正在進(jìn)行 1:傳輸結(jié)束6-IAAS確定為從IAAS位在本身的地址與主機呼叫的地址匹配的時候被置1,寫IICC

20、寄存器中的任何一位將清除此位。當(dāng)IICC中IICIE位為1且IAAS也為1時,中斷。0:不確定 1:確定為從5-BUSY總線忙標(biāo)志。當(dāng)檢測到START信號時,該位置“1”,當(dāng)檢測到STOP信號,該位自動清“0”。主從模式無所謂。4-ARBL 總線仲裁丟失時該位置總線仲裁丟失時該位置“1”,通過軟件對其寫“1”手動清“0”。2-SRW從讀從讀/寫寫,“1”從機發(fā)送,“0”從機接收1-IICIFIIC的中斷掛號位,的中斷掛號位,該位只能通過軟件對其寫“1”清除??梢栽O(shè)置該位的事件:1、一個字節(jié)傳送完成,TCF為1;2、該機(一定是從機)地址被成功匹配,即IAAS為13、 總線仲裁丟失。0-RXAK

21、接收應(yīng)答。接收應(yīng)答。0收到應(yīng)答;1未收到應(yīng)答。2021/8/524IIC Data I/O Register (IICD)IIC Data I/O Register (IICD)7:0DATA在在“主發(fā)送主發(fā)送MT”模式下,當(dāng)數(shù)據(jù)寫入模式下,當(dāng)數(shù)據(jù)寫入IICD時,就啟動一次數(shù)據(jù)傳時,就啟動一次數(shù)據(jù)傳輸過程,而且數(shù)據(jù)都是高位在前。在輸過程,而且數(shù)據(jù)都是高位在前。在“主接收主接收MR”模式下,讀該模式下,讀該數(shù)據(jù)寄存器將會啟動下一個字節(jié)的數(shù)據(jù)傳輸。數(shù)據(jù)寄存器將會啟動下一個字節(jié)的數(shù)據(jù)傳輸。2021/8/525中斷事件中斷事件中斷源中斷源狀態(tài)狀態(tài)標(biāo)志標(biāo)志局部使能局部使能完成完成1字節(jié)傳輸字節(jié)傳輸TCF

22、IICIFIICIE匹配收到的呼叫地址匹配收到的呼叫地址IAASIICIFIICIE仲裁丟失仲裁丟失ARBLIICIFIICIE IICIF自動置自動置1,表明有中斷進(jìn)入,判斷對應(yīng)的狀態(tài)位,表明有中斷進(jìn)入,判斷對應(yīng)的狀態(tài)位確定具體的中斷事件。確定具體的中斷事件。 IICIF位必須在位必須在中斷子程序中斷子程序中通過對其中通過對其寫寫1進(jìn)行清零。進(jìn)行清零。2021/8/526中斷三事件中斷三事件(1 1)字節(jié)傳輸中斷:)字節(jié)傳輸中斷:TCF (TCF (傳輸結(jié)束標(biāo)志傳輸結(jié)束標(biāo)志) )位在第位在第9 9個時鐘的個時鐘的下降沿被置下降沿被置1 1,指明字節(jié)傳輸結(jié)束。,指明字節(jié)傳輸結(jié)束。(2 2)地址

23、檢測中斷:)地址檢測中斷:當(dāng)本身確定的地址當(dāng)本身確定的地址(IIC(IIC地址寄存器地址寄存器) )與呼叫地址匹配時,狀態(tài)寄存器中與呼叫地址匹配時,狀態(tài)寄存器中IAASIAAS位被置位被置1 1。這時如。這時如果果IICIEIICIE被置被置1 1,則,則CPUCPU進(jìn)入中斷狀態(tài)。進(jìn)入中斷狀態(tài)。CPUCPU必須檢查必須檢查SRWSRW位位和設(shè)置它相應(yīng)的和設(shè)置它相應(yīng)的TxTx模式(模式(SRWSRW和和TxTx是標(biāo)識主從關(guān)系和數(shù)據(jù)是標(biāo)識主從關(guān)系和數(shù)據(jù)傳輸方向的一個標(biāo)簽,切記使用時注意這兩位)。傳輸方向的一個標(biāo)簽,切記使用時注意這兩位)。(3 3)仲裁丟失中斷)仲裁丟失中斷2021/8/527軟件

24、開發(fā)軟件開發(fā)從機初始化:從機初始化:(1) (1) 寫寫: IICA: IICA設(shè)置從地址設(shè)置從地址(2) (2) 寫寫: IICC: IICC使能使能IICIIC和中斷和中斷(3)(3)初始化若干所需初始化若干所需RAMRAM變量用于數(shù)據(jù)傳輸。變量用于數(shù)據(jù)傳輸。主機初始化:主機初始化:(1) (1) 寫寫: IICF: IICF設(shè)置設(shè)置IICIIC波特率波特率( (本章中提供了例子本章中提供了例子) )(2) (2) 寫寫: IICC: IICC使能使能IICIIC和中斷和中斷(3) (3) 初始化若干所需初始化若干所需RAMRAM變量用于數(shù)據(jù)傳輸變量用于數(shù)據(jù)傳輸(4) (4) 寫寫: II

25、CC: IICC使能使能TX TX (這一位表征發(fā)送(這一位表征發(fā)送/ /接收)接收)(5) (5) 寫寫: IICC: IICC使能使能MST (MST (主模式主模式) )(6) (6) 寫寫: IICD: IICD尋址從目標(biāo)。尋址從目標(biāo)。 ( (這個字節(jié)的最低一位將確定這這個字節(jié)的最低一位將確定這次通信是主接收還是主發(fā)送次通信是主接收還是主發(fā)送) )主機:寫主機:寫IICD啟動傳輸啟動傳輸從機:接收到包含地址的信息啟動從機:接收到包含地址的信息啟動IIC傳輸傳輸2021/8/528主機發(fā)送、從機接收主機發(fā)送、從機接收2021/8/529主機發(fā)送程序主機發(fā)送程序#include #incl

26、ude #include derivative.h #include derivative.h #define START_SIGNAL IICC_MST=1;#define START_SIGNAL IICC_MST=1;/ /* *宏定義起始信號宏定義起始信號* */ /#define STOP_SIGNAL IICC_MST=0;#define STOP_SIGNAL IICC_MST=0;/ /* *宏定義停止信號宏定義停止信號* */ /void Send_init(void);void Send_init(void); / /* *聲名發(fā)送條件初始化函聲名發(fā)送條件初始化函數(shù)數(shù)* *

27、/ /int Send_init_check(void);int Send_init_check(void); / /* *聲名發(fā)送條件檢測函數(shù)聲名發(fā)送條件檢測函數(shù)* */ /Byte Snd_data=0 x56,0 x57,0 x58,0 x59; /Byte Snd_data=0 x56,0 x57,0 x58,0 x59; /* *待發(fā)送的一串?dāng)?shù)據(jù)待發(fā)送的一串?dāng)?shù)據(jù)* */ /Byte i=0;Byte i=0;/ /* *記數(shù)變量記數(shù)變量* */ /void main(void) void main(void) EnableInterrupts; EnableInterrupts; /

28、 /* *中斷使能中斷使能* */ / IICF=0X4B; IICF=0X4B;/ /* *設(shè)定位移率為設(shè)定位移率為100kbps100kbps* */ / IICC_IICEN=1; IICC_IICEN=1; / /* * 開啟開啟IICIIC功能功能* */ / IICC_IICIE=1; IICC_IICIE=1; / /* *使能使能IICIIC中斷中斷* */ / Send_init(); Send_init();/ /* *主機發(fā)送初始化主機發(fā)送初始化* */ / for(;) for(;) _RESET_WATCHDOG(); _RESET_WATCHDOG(); / /*

29、*喂看門狗喂看門狗* */ / 2021/8/530主機發(fā)送程序主機發(fā)送程序/ /* *主機發(fā)送初始化主機發(fā)送初始化* */ /void Send_init()void Send_init() IICC_TX=1; IICC_TX=1; / /* *置此位為置此位為1 1表示發(fā)送表示發(fā)送* */ / START_SIGNAL START_SIGNAL / /* *產(chǎn)生開始信號產(chǎn)生開始信號* */ / IICD=0X04; IICD=0X04; / /* *發(fā)送從機地址(最后一位發(fā)送從機地址(最后一位“0 0”代表主機發(fā)送)代表主機發(fā)送) * */ / / /* *發(fā)送條件檢測發(fā)送條件檢測* *

30、/ /int Send_init_check()int Send_init_check()if(!IICS_RXAK)&IICS_TCF&(!IICS_IAAS)&(!IICS_ARBL)if(!IICS_RXAK)&IICS_TCF&(!IICS_IAAS)&(!IICS_ARBL) return 1; return 1; / /* *收到應(yīng)答信號、一個數(shù)據(jù)發(fā)送完畢、沒有地址匹配(主收到應(yīng)答信號、一個數(shù)據(jù)發(fā)送完畢、沒有地址匹配(主1 1* */ / /* *機此位永遠(yuǎn)為機此位永遠(yuǎn)為0 0)、沒有仲裁丟失,返回)、沒有仲裁丟失,返回1 1* */

31、 / else return 0; else return 0; 2021/8/531 / /* *中斷程序中斷程序* */ /interrupt 17 void IIC(void)interrupt 17 void IIC(void) IICS_IICIF=1; IICS_IICIF=1;/ /* *通過向此位寫通過向此位寫1 1,對其清零,對其清零* */ / if(Send_init_check() if(Send_init_check() / /* *滿足發(fā)送條件,則發(fā)送滿足發(fā)送條件,則發(fā)送* */ / IICD=Snd_datai+; IICD=Snd_datai+; if(i=4)

32、 if(i=4) / /* *如果發(fā)送完畢,使如果發(fā)送完畢,使LED1LED1亮亮* */ / PTBDD_PTBDD6=1;PTBDD_PTBDD6=1; PTBD_PTBD6=0;PTBD_PTBD6=0; STOP_SIGNAL STOP_SIGNAL / /* *產(chǎn)生停止信號產(chǎn)生停止信號* */ / 2021/8/532從機接收程序從機接收程序#include #include #include derivative.h #include derivative.h int Rvc_init_check(void); /int Rvc_init_check(void); /* *聲名接收

33、條件檢測聲名接收條件檢測函數(shù)函數(shù)* */ /Byte addr1;Byte addr1; / /* *用來接收地址的變量用來接收地址的變量* */ /Byte RcvData4;Byte RcvData4;/ /* *用來接收數(shù)據(jù)的數(shù)組用來接收數(shù)據(jù)的數(shù)組* */ /Byte i=0;Byte i=0;/ /* *記數(shù)變量記數(shù)變量* */ /void main(void) void main(void) EnableInterrupts; EnableInterrupts; / /* *中斷使能中斷使能* */ / IICA=0X04; IICA=0X04;/ /* *定義從機地址定義從機地址*

34、 */ / IICC_IICEN=1; IICC_IICEN=1;/ /* *開啟開啟IICIIC功能功能* */ / IICC_IICIE=1; IICC_IICIE=1; / /* *使能使能IICIIC中斷中斷* */ / IICC_TX=0; IICC_TX=0;/ /* *置此位為置此位為0 0表示接收表示接收* */ / for(;) for(;) _RESET_WATCHDOG(); _RESET_WATCHDOG(); / /* *喂看門狗喂看門狗* */ / 2021/8/533 / /* *接收條件檢測接收條件檢測* */ /int Rvc_init_check()int

35、Rvc_init_check()if(IICS_TCF)& (!IICS_ARBL)if(IICS_TCF)& (!IICS_ARBL)/ /* *一個數(shù)據(jù)接收完畢、沒有仲裁丟失(若同時沒有地址匹配,可以接收下一個數(shù)一個數(shù)據(jù)接收完畢、沒有仲裁丟失(若同時沒有地址匹配,可以接收下一個數(shù)據(jù))據(jù))* */ / return 1; return 1; else return 0; else return 0; / /* *中斷程序中斷程序* */ /interrupt 17 void IIC(void) interrupt 17 void IIC(void) IICS_IICIF=1;

36、 IICS_IICIF=1; / /* *通過向此位寫通過向此位寫1 1,對其清零,對其清零* */ / if(IICS_IAAS&Rvc_init_check() / if(IICS_IAAS&Rvc_init_check() /* *滿足地址接收條件,可以接收地滿足地址接收條件,可以接收地址址* */ / IICC_TX=0; IICC_TX=0; / /* *定此位的目的是,清定此位的目的是,清IAASIAAS位位* */ / addr1=IICD; addr1=IICD; / /* *將地址送入將地址送入addr1addr1變量變量* */ / if(!IICS_IAA

37、S&Rvc_init_check()/ if(!IICS_IAAS&Rvc_init_check()/* *滿足接收條件,可以接滿足接收條件,可以接/ /* *收下個收下個數(shù)據(jù)數(shù)據(jù)* */ / RcvDatai+=IICD; RcvDatai+=IICD;/ /* *接收數(shù)據(jù)接收數(shù)據(jù)* */ / if(i=4) if(i=4) / /* *如果接收完畢,則點亮如果接收完畢,則點亮LED1LED1燈燈* */ / PTBDD_PTBDD6=1; PTBDD_PTBDD6=1; PTBD_PTBD6=0; PTBD_PTBD6=0; 2021/8/534從機發(fā)送、主機接收從機發(fā)送、

38、主機接收2021/8/535主機程序主機程序#include #include #include derivative.h #include derivative.h #define START_SIGNAL IICC_MST=1;#define START_SIGNAL IICC_MST=1;/ /* *宏定義起始信號宏定義起始信號* */ /#define STOP_SIGNAL IICC_MST=0;#define STOP_SIGNAL IICC_MST=0;/ /* *宏定義停止信號宏定義停止信號* */ /void Rcv_init(void);void Rcv_init(void

39、); / /* *聲名聲名接收接收條件初始條件初始化函數(shù)化函數(shù)* */ /int Rcv_init_check(void);int Rcv_init_check(void);/ /* *聲名聲名接收接收條件檢測函數(shù)條件檢測函數(shù)* */ /Byte addr=0 x05;Byte addr=0 x05;/ /* *從機地址(最后一位從機地址(最后一位“1 1”代表主機接收)代表主機接收)* */ /Byte Rcv_data5;Byte Rcv_data5;/ /* *用來接收數(shù)據(jù)的數(shù)組用來接收數(shù)據(jù)的數(shù)組* */ /Byte i=0;Byte i=0;/ /* *記數(shù)變量記數(shù)變量* */ /vo

40、id main(void) void main(void) EnableInterrupts; EnableInterrupts; / /* *中斷使能中斷使能* */ / IICF=0X4B; IICF=0X4B;/ /* *設(shè)定位移率為設(shè)定位移率為100kbps100kbps* */ / IICC_IICEN=1; IICC_IICEN=1;/ /* * 開啟開啟IICIIC功能功能* */ / IICC_IICIE=1; IICC_IICIE=1;/ /* *使能使能IICIIC中斷中斷* */ / Rcv_init(); Rcv_init(); for(;) for(;) _RESET

41、_WATCHDOG(); _RESET_WATCHDOG(); / /* *喂看門狗喂看門狗* */ / 2021/8/536 / /* *接收條件初始化接收條件初始化* */ /void Rcv_init() void Rcv_init() IICC_TX=1; / IICC_TX=1; /* *置此位為置此位為1 1表示發(fā)送表示發(fā)送* */ / START_SIGNAL / START_SIGNAL /* *產(chǎn)生開始信號產(chǎn)生開始信號* */ / IICD=addr; / IICD=addr; /* *發(fā)送從機地址發(fā)送從機地址* */ / / /* *接收條件檢測接收條件檢測* */ /in

42、t Rcv_init_check() int Rcv_init_check() if(IICS_TCF)& (!IICS_IAAS) & (!IICS_ARBL)if(IICS_TCF)& (!IICS_IAAS) & (!IICS_ARBL)/ /* *一個數(shù)據(jù)發(fā)送完畢、沒有地址匹配(主機此位永遠(yuǎn)為一個數(shù)據(jù)發(fā)送完畢、沒有地址匹配(主機此位永遠(yuǎn)為0 0)、沒有仲裁丟)、沒有仲裁丟失,返回失,返回1 1* */ / return 1; return 1; else return 0; else return 0; 2021/8/537/ /* *中斷程序中斷程序*

43、 */ /interrupt 17 void IIC(void) interrupt 17 void IIC(void) IICS_IICIF=1; /IICS_IICIF=1; /* *通過向此位寫通過向此位寫1 1,對其清,對其清零零* */ / if(!IICS_RXAK) / if(!IICS_RXAK) /* *如果有應(yīng)答如果有應(yīng)答* */ / IICC_TX=0; IICC_TX=0; / /* *則將該位置零,表示準(zhǔn)則將該位置零,表示準(zhǔn)備接收備接收* */ / if(Rcv_init_check() if(Rcv_init_check() / /* *如果滿足接收條件如果滿足接收

44、條件* */ / Rcv_datai+=IICD; Rcv_datai+=IICD; / /* *將數(shù)據(jù)送到接收數(shù)組里將數(shù)據(jù)送到接收數(shù)組里* */ / if(i=5) if(i=5) / /* *如果接收到了所有數(shù)據(jù)如果接收到了所有數(shù)據(jù)* */ / PTBDD_PTBDD7=1; PTBDD_PTBDD7=1; / /* *點亮點亮LED2LED2,以示接收完畢,以示接收完畢* */ / PTBD_PTBD7=0; PTBD_PTBD7=0; STOP_SIGNAL STOP_SIGNAL / /* *產(chǎn)生停止信號產(chǎn)生停止信號* */ / 2021/8/538從機程序從機程序#include #include #include derivative.h #include derivative.h int Send_init_check(void);int Send_init_check(void); / /

溫馨提示

  • 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

提交評論