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

下載本文檔

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

文檔簡(jiǎn)介

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)擴(kuò)展中的應(yīng)用在系統(tǒng)擴(kuò)展中的應(yīng)用2021/8/529.1 I2C 概述 I2C總線是PHILIPS公司推出的串行總線。I2C總線的應(yīng)用非常廣泛,在很多器件上都配備有I2C總線接口,使用這些器件時(shí)一般都需要通過(guò)I2C總線進(jìn)行控制。這里簡(jiǎn)要介紹I2C總線的工作原理及操作時(shí)序。2021/8/531 1、電氣特性;、電氣特性;2 2、尋址無(wú)需片選;、尋址無(wú)需片選;3 3、多主和主從、多主和主從4 4、MTMT、MRMR、ST

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

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

4、只有當(dāng)需要關(guān)閉電平備用狀態(tài),只有當(dāng)需要關(guān)閉I I2 2C C總線時(shí),總線時(shí),SCLSCL線才會(huì)箝線才會(huì)箝位在低電平。位在低電平。2 2、 SCLSCL線上為高電平時(shí),線上為高電平時(shí),SDASDA線上的數(shù)據(jù)信號(hào)才會(huì)有效,線上的數(shù)據(jù)信號(hào)才會(huì)有效, SCLSCL低時(shí),低時(shí),SDASDA數(shù)據(jù)無(wú)效。因此,只有當(dāng)數(shù)據(jù)無(wú)效。因此,只有當(dāng)SCLSCL線為低電平時(shí),線為低電平時(shí),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總線信號(hào)的時(shí)序總線信號(hào)的時(shí)

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

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

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

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

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

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

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

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

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

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

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

16、)數(shù)據(jù)保持時(shí)間數(shù)據(jù)保持時(shí)間 = 總線周期總線周期(s) * SDA保持值保持值 = 1/4000000 * 7 = 1.75uS 如果數(shù)據(jù)保持時(shí)間不夠,可以修改如果數(shù)據(jù)保持時(shí)間不夠,可以修改ICR的數(shù)值,比如設(shè)置為的數(shù)值,比如設(shè)置為7,對(duì)應(yīng)的,對(duì)應(yīng)的SCL分頻數(shù)為分頻數(shù)為40,SDA保持值為保持值為10,將,將mul修改為修改為1,此時(shí),此時(shí)100KHz的波特率不的波特率不變,但數(shù)據(jù)保持時(shí)間為變,但數(shù)據(jù)保持時(shí)間為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”時(shí)允許,此時(shí)對(duì)應(yīng)的管腳不再是普通的時(shí)允許,此時(shí)對(duì)應(yīng)的管腳不再是普通的I/O管腳管腳了。了。6-IICIEIIC中斷允許是否打開(kāi),中斷允許是否打開(kāi),“1”時(shí)打開(kāi),一般都要使用中斷進(jìn)行數(shù)據(jù)的傳輸。時(shí)打開(kāi),一般都要使用中斷進(jìn)行數(shù)據(jù)的傳輸。5-MST主模式選擇位,當(dāng)從主模式選擇位,當(dāng)從“0”到到“1”改變時(shí),會(huì)產(chǎn)生改變時(shí),會(huì)產(chǎn)生S信號(hào),且器件改為主模式;信號(hào),且器件改

18、為主模式;當(dāng)從當(dāng)從“1”切換到切換到“0”時(shí),會(huì)產(chǎn)生時(shí),會(huì)產(chǎn)生P信號(hào),且器件改為了從模式。信號(hào),且器件改為了從模式。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”,對(duì)于從模式來(lái)說(shuō),對(duì)于從模式來(lái)說(shuō),該位需要根據(jù)狀態(tài)寄存器該位需要根據(jù)狀態(tài)寄存器IICS中的中的SRW位來(lái)決定。位來(lái)決定。3-TXAK該位決定收到數(shù)據(jù)后是否發(fā)送該位決定收到數(shù)據(jù)后是否發(fā)送ACK信號(hào),無(wú)論是主還是從模式。信號(hào),無(wú)論是主還是從模式?!?”接收到

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

20、寄存器中的任何一位將清除此位。當(dāng)IICC中IICIE位為1且IAAS也為1時(shí),中斷。0:不確定 1:確定為從5-BUSY總線忙標(biāo)志。當(dāng)檢測(cè)到START信號(hào)時(shí),該位置“1”,當(dāng)檢測(cè)到STOP信號(hào),該位自動(dòng)清“0”。主從模式無(wú)所謂。4-ARBL 總線仲裁丟失時(shí)該位置總線仲裁丟失時(shí)該位置“1”,通過(guò)軟件對(duì)其寫(xiě)“1”手動(dòng)清“0”。2-SRW從讀從讀/寫(xiě)寫(xiě),“1”從機(jī)發(fā)送,“0”從機(jī)接收1-IICIFIIC的中斷掛號(hào)位,的中斷掛號(hào)位,該位只能通過(guò)軟件對(duì)其寫(xiě)“1”清除??梢栽O(shè)置該位的事件:1、一個(gè)字節(jié)傳送完成,TCF為1;2、該機(jī)(一定是從機(jī))地址被成功匹配,即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ù)寫(xiě)入模式下,當(dāng)數(shù)據(jù)寫(xiě)入IICD時(shí),就啟動(dòng)一次數(shù)據(jù)傳時(shí),就啟動(dòng)一次數(shù)據(jù)傳輸過(guò)程,而且數(shù)據(jù)都是高位在前。在輸過(guò)程,而且數(shù)據(jù)都是高位在前。在“主接收主接收MR”模式下,讀該模式下,讀該數(shù)據(jù)寄存器將會(huì)啟動(dòng)下一個(gè)字節(jié)的數(shù)據(jù)傳輸。數(shù)據(jù)寄存器將會(huì)啟動(dòng)下一個(gè)字節(jié)的數(shù)據(jù)傳輸。2021/8/525中斷事件中斷事件中斷源中斷源狀態(tài)狀態(tài)標(biāo)志標(biāo)志局部使能局部使能完成完成1字節(jié)傳輸字節(jié)傳輸TCF

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

23、檢測(cè)中斷:)地址檢測(cè)中斷:當(dāng)本身確定的地址當(dāng)本身確定的地址(IIC(IIC地址寄存器地址寄存器) )與呼叫地址匹配時(shí),狀態(tài)寄存器中與呼叫地址匹配時(shí),狀態(tài)寄存器中IAASIAAS位被置位被置1 1。這時(shí)如。這時(shí)如果果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)識(shí)主從關(guān)系和數(shù)據(jù)是標(biāo)識(shí)主從關(guān)系和數(shù)據(jù)傳輸方向的一個(gè)標(biāo)簽,切記使用時(shí)注意這兩位)。傳輸方向的一個(gè)標(biāo)簽,切記使用時(shí)注意這兩位)。(3 3)仲裁丟失中斷)仲裁丟失中斷2021/8/527軟件

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

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

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

27、/ /int Send_init_check(void);int Send_init_check(void); / /* *聲名發(fā)送條件檢測(cè)函數(shù)聲名發(fā)送條件檢測(cè)函數(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; / /* * 開(kāi)啟開(kāi)啟IICIIC功能功能* */ / IICC_IICIE=1; IICC_IICIE=1; / /* *使能使能IICIIC中斷中斷* */ / Send_init(); Send_init();/ /* *主機(jī)發(fā)送初始化主機(jī)發(fā)送初始化* */ / for(;) for(;) _RESET_WATCHDOG(); _RESET_WATCHDOG(); / /*

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

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)答信號(hào)、一個(gè)數(shù)據(jù)發(fā)送完畢、沒(méi)有地址匹配(主收到應(yīng)答信號(hào)、一個(gè)數(shù)據(jù)發(fā)送完畢、沒(méi)有地址匹配(主1 1* */ / /* *機(jī)此位永遠(yuǎn)為機(jī)此位永遠(yuǎn)為0 0)、沒(méi)有仲裁丟失,返回)、沒(méi)有仲裁丟失,返回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;/ /* *通過(guò)向此位寫(xiě)通過(guò)向此位寫(xiě)1 1,對(duì)其清零,對(duì)其清零* */ / 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)生停止信號(hào)產(chǎn)生停止信號(hào)* */ / 2021/8/532從機(jī)接收程序從機(jī)接收程序#include #include #include derivative.h #include derivative.h int Rvc_init_check(void); /int Rvc_init_check(void); /* *聲名接收

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

34、 */ / IICC_IICEN=1; IICC_IICEN=1;/ /* *開(kāi)啟開(kāi)啟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 / /* *接收條件檢測(cè)接收條件檢測(cè)* */ /int Rvc_init_check()int

35、Rvc_init_check()if(IICS_TCF)& (!IICS_ARBL)if(IICS_TCF)& (!IICS_ARBL)/ /* *一個(gè)數(shù)據(jù)接收完畢、沒(méi)有仲裁丟失(若同時(shí)沒(méi)有地址匹配,可以接收下一個(gè)數(shù)一個(gè)數(shù)據(jù)接收完畢、沒(méi)有仲裁丟失(若同時(shí)沒(méi)有地址匹配,可以接收下一個(gè)數(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; / /* *通過(guò)向此位寫(xiě)通過(guò)向此位寫(xiě)1 1,對(duì)其清零,對(duì)其清零* */ / 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()/* *滿足接收條件,可以接滿足接收條件,可以接/ /* *收下個(gè)收下個(gè)數(shù)據(jù)數(shù)據(jù)* */ / RcvDatai+=IICD; RcvDatai+=IICD;/ /* *接收數(shù)據(jù)接收數(shù)據(jù)* */ / if(i=4) if(i=4) / /* *如果接收完畢,則點(diǎn)亮如果接收完畢,則點(diǎn)亮LED1LED1燈燈* */ / PTBDD_PTBDD6=1; PTBDD_PTBDD6=1; PTBD_PTBD6=0; PTBD_PTBD6=0; 2021/8/534從機(jī)發(fā)送、主機(jī)接收從機(jī)發(fā)送、

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

39、); / /* *聲名聲名接收接收條件初始條件初始化函數(shù)化函數(shù)* */ /int Rcv_init_check(void);int Rcv_init_check(void);/ /* *聲名聲名接收接收條件檢測(cè)函數(shù)條件檢測(cè)函數(shù)* */ /Byte addr=0 x05;Byte addr=0 x05;/ /* *從機(jī)地址(最后一位從機(jī)地址(最后一位“1 1”代表主機(jī)接收)代表主機(jī)接收)* */ /Byte Rcv_data5;Byte Rcv_data5;/ /* *用來(lái)接收數(shù)據(jù)的數(shù)組用來(lái)接收數(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;/ /* * 開(kāi)啟開(kāi)啟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)生開(kāi)始信號(hào)產(chǎn)生開(kāi)始信號(hào)* */ / IICD=addr; / IICD=addr; /* *發(fā)送從機(jī)地址發(fā)送從機(jī)地址* */ / / /* *接收條件檢測(cè)接收條件檢測(cè)* */ /in

42、t Rcv_init_check() int Rcv_init_check() if(IICS_TCF)& (!IICS_IAAS) & (!IICS_ARBL)if(IICS_TCF)& (!IICS_IAAS) & (!IICS_ARBL)/ /* *一個(gè)數(shù)據(jù)發(fā)送完畢、沒(méi)有地址匹配(主機(jī)此位永遠(yuǎn)為一個(gè)數(shù)據(jù)發(fā)送完畢、沒(méi)有地址匹配(主機(jī)此位永遠(yuǎn)為0 0)、沒(méi)有仲裁丟)、沒(méi)有仲裁丟失,返回失,返回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; /* *通過(guò)向此位寫(xiě)通過(guò)向此位寫(xiě)1 1,對(duì)其清,對(duì)其清零零* */ / 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; / /* *點(diǎn)亮點(diǎn)亮LED2LED2,以示接收完畢,以示接收完畢* */ / PTBD_PTBD7=0; PTBD_PTBD7=0; STOP_SIGNAL STOP_SIGNAL / /* *產(chǎn)生停止信號(hào)產(chǎn)生停止信號(hào)* */ / 2021/8/538從機(jī)程序從機(jī)程序#include #include #include derivative.h #include derivative.h int Send_init_check(void);int Send_init_check(void); / /

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論