版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
8.1I2C總線
8.2單片機(jī)與24C16接口的設(shè)計(jì)
8.3習(xí)題實(shí)例八外部存儲(chǔ)器的應(yīng)用設(shè)計(jì)學(xué)習(xí)目標(biāo)
◆理解I2C總線的工作過(guò)程。
◆理解I2C總線中數(shù)據(jù)的有效性、起始和停止條件、字節(jié)傳送與應(yīng)答、數(shù)據(jù)幀格式、I2C總線尋址。
◆理解I2C總線典型信號(hào)的軟件模擬。
◆理解24C16的讀/寫操作。
工作任務(wù)
◆設(shè)計(jì)、制作與調(diào)試單片機(jī)與24C16接口電路。
◆設(shè)計(jì)、調(diào)試單片機(jī)與24C16接口軟件。
◆撰寫設(shè)計(jì)文檔與測(cè)試報(bào)告。8.1I2C總線
學(xué)習(xí)目標(biāo)◆理解I2C總線的工作過(guò)程?!衾斫釯2C總線中數(shù)據(jù)的有效性、起始和停止條件、字節(jié)傳送與應(yīng)答、數(shù)據(jù)幀格式、I2C總線尋址?!衾斫釯2C總線典型信號(hào)的軟件模擬。
I2C總線(InterICBus)是Philips半導(dǎo)體(現(xiàn)NXP半導(dǎo)體)推出的一種串行總線,是一種簡(jiǎn)單的雙向兩線總線,可用來(lái)實(shí)現(xiàn)IC間的有效控制。8.1.1I2C總線概述
I2C總線只要求兩條信號(hào)線:一條為串行時(shí)鐘線(SCL),另一條為串行數(shù)據(jù)線(SDA)。連接在總線上的器件通過(guò)兩線來(lái)傳遞信息。微控制器、LCD驅(qū)動(dòng)器、存儲(chǔ)器或鍵盤接口都有一個(gè)唯一的地址,且都可以作為一個(gè)發(fā)送器或接收器,在數(shù)據(jù)傳輸時(shí)還可以看做是主機(jī)或從機(jī)。
I2C總線是一個(gè)多主機(jī)總線。主機(jī)是啟動(dòng)數(shù)據(jù)的傳送、發(fā)出時(shí)鐘信號(hào)、傳送結(jié)束時(shí)發(fā)出終止信號(hào)的器件。被主機(jī)尋址的器件稱為從機(jī)。通常主機(jī)由各種單片機(jī)或其他微處理器充當(dāng),從機(jī)可以是各種單片機(jī)或微處理器,也可以是其他器件,如存儲(chǔ)器、LCD驅(qū)動(dòng)器、時(shí)鐘日歷器件等。在多主機(jī)系統(tǒng)中,可能出現(xiàn)同時(shí)幾個(gè)主機(jī)企圖啟動(dòng)總線傳送數(shù)據(jù)的情況。為了避免混亂,保證數(shù)據(jù)的可靠傳輸,任何時(shí)刻總線只能由某一臺(tái)主機(jī)控制。I2C總線通過(guò)總線仲裁來(lái)決定由哪一個(gè)器件控制。當(dāng)有兩個(gè)或多個(gè)主機(jī)嘗試發(fā)送信息到總線時(shí),在其他主機(jī)都送“0”的情況下,首先送“1”的主機(jī)將丟失仲裁。該過(guò)程中的時(shí)鐘信號(hào)是由各個(gè)主機(jī)產(chǎn)生的異步時(shí)鐘信號(hào)線與的結(jié)果。
I2C總線上,通常由主機(jī)產(chǎn)生時(shí)鐘信號(hào)。在總線上傳輸數(shù)據(jù)時(shí),每個(gè)主機(jī)產(chǎn)生自己的時(shí)鐘信號(hào)。僅在慢速的從機(jī)器件控制時(shí)鐘并延長(zhǎng)時(shí)鐘信號(hào)或在發(fā)生仲裁時(shí)被另一個(gè)主機(jī)改變的情況下,主機(jī)產(chǎn)生的時(shí)鐘才會(huì)被改變。
SDA和SCL都為雙向線路,都通過(guò)一個(gè)電流源或上拉電阻連接到正電源。當(dāng)總線空閑時(shí),兩條線路都是高電平。連接到總線的器件輸出級(jí)必須是漏極開路或集電極開路,才能執(zhí)行線與的功能。I2C總線上數(shù)據(jù)的傳輸速率在標(biāo)準(zhǔn)模式下可達(dá)100kb/s,在快速模式下可達(dá)400kb/s,在高速模式下可達(dá)3.4Mb/s。連接到總線的接口數(shù)量只由總線的最大電容為
400pF的限制決定。
【練習(xí)】
項(xiàng)目:I2C通信系統(tǒng)設(shè)計(jì)。
項(xiàng)目編號(hào):EX8_1。
任務(wù)要求:設(shè)計(jì)一個(gè)由單片機(jī)、LCD控制器、日歷芯片、外部存儲(chǔ)器(所有器件均有I2C接口)組成的系統(tǒng),畫出結(jié)構(gòu)框圖。
分析:I2C總線器件間通過(guò)SDA、SCL進(jìn)行通信。顯然,結(jié)構(gòu)框圖如圖8-1所示。圖8-1I2C通信系統(tǒng)的結(jié)構(gòu)框圖
8.1.2I2C總線的數(shù)據(jù)傳輸
1.?dāng)?shù)據(jù)的有效性
SDA線上的數(shù)據(jù)必須在時(shí)鐘的高電平期間保持穩(wěn)定。數(shù)據(jù)線的高或低電平狀態(tài)的變換只有在SCL線上的時(shí)鐘信號(hào)為低電平時(shí)才能改變,如圖8-2所示。
注意:在I2C總線上,每一位數(shù)據(jù)位的傳送都與時(shí)鐘脈沖相對(duì)應(yīng),邏輯“0”和邏輯“1”的信號(hào)電平取決于相應(yīng)的正端電源(即上拉電阻所接電源)電壓。圖8-2位傳輸?shù)挠行砸?guī)定
2.起始和停止條件
SCL線為高電平期間,SDA線由高電平向低電平變化表示起始條件;SCL線為高電平時(shí),SDA線由低電平向高電平變化表示停止條件,如圖8-3所示。圖8-3起始和停止條件起始和停止條件均由主機(jī)產(chǎn)生??偩€在起始條件產(chǎn)生后,就處于被占用狀態(tài);在停止條件產(chǎn)生的某段時(shí)間后,總線處于空閑狀態(tài)。
如果連接到總線上的器件具有I2C總線的硬件接口,那么檢測(cè)起始和停止條件就比較簡(jiǎn)便。對(duì)于不具備I2C總線硬件接口的單片機(jī)來(lái)說(shuō),為了檢測(cè)到起始和停止條件,必須保證在每個(gè)時(shí)鐘周期內(nèi)對(duì)數(shù)據(jù)線采樣兩次。
3.字節(jié)的傳送與應(yīng)答
I2C總線進(jìn)行數(shù)據(jù)傳送時(shí),無(wú)傳送字節(jié)數(shù)的限制,但每個(gè)字節(jié)必須保證是8位,并且每個(gè)字節(jié)后必須跟一個(gè)應(yīng)答位。數(shù)據(jù)傳送時(shí),先傳送最高位。如果從機(jī)要完成某些其他功能后才能接收或發(fā)送下一個(gè)完整的字節(jié),則可以使SCL線保持低電平迫使主機(jī)進(jìn)入等待狀態(tài)。直到從機(jī)準(zhǔn)備好接收下一個(gè)數(shù)據(jù)字節(jié)時(shí),數(shù)據(jù)傳輸繼續(xù)并釋放SCL線。傳輸過(guò)程的應(yīng)答時(shí)序如圖8-4所示。圖8-4應(yīng)答時(shí)序應(yīng)答時(shí)鐘脈沖由主機(jī)產(chǎn)生,在應(yīng)答時(shí)鐘脈沖期間,主機(jī)釋放SDA線(為高)。在應(yīng)答時(shí)鐘脈沖期間,從機(jī)必須將SDA線拉低,使其在該時(shí)鐘脈沖為高電平期間保持穩(wěn)定的低電平。
由于某種原因從機(jī)不對(duì)主機(jī)尋址信號(hào)應(yīng)答時(shí),必須將數(shù)據(jù)線置于高電平,而由主機(jī)產(chǎn)生一個(gè)停止條件以結(jié)束總線的數(shù)據(jù)傳送。
如果從機(jī)對(duì)主機(jī)進(jìn)行了應(yīng)答,但在數(shù)據(jù)傳送一段時(shí)間后無(wú)法繼續(xù)接收更多的數(shù)據(jù),則從機(jī)可以通過(guò)對(duì)無(wú)法接收的第一個(gè)數(shù)據(jù)字節(jié)的非應(yīng)答通知主機(jī),主機(jī)則應(yīng)發(fā)出終止信號(hào)以結(jié)束數(shù)據(jù)的繼續(xù)傳送。
當(dāng)主機(jī)接收數(shù)據(jù)時(shí),它收到最后一個(gè)數(shù)據(jù)字節(jié)后,必須向從機(jī)發(fā)出一個(gè)結(jié)束傳送的信號(hào)。該信號(hào)是由對(duì)從機(jī)的非應(yīng)答來(lái)實(shí)現(xiàn)的。然后,從機(jī)釋放SDA線,以允許主機(jī)產(chǎn)生停止條件。
4.?dāng)?shù)據(jù)幀格式
I2C總線上傳輸?shù)臄?shù)據(jù)既包括地址信號(hào),又包括數(shù)據(jù)信號(hào)。完整的數(shù)據(jù)傳輸如圖8-5所示,在起始條件后必須傳送一個(gè)從機(jī)的地址(7位),第8位是數(shù)據(jù)的傳送方向(讀/寫)位?!?”表示主機(jī)發(fā)送數(shù)據(jù)(寫),“1”表示主機(jī)接收數(shù)據(jù)(讀)。每次數(shù)據(jù)傳送總是由主機(jī)產(chǎn)生的停止條件結(jié)束。如果主機(jī)希望繼續(xù)占用總線進(jìn)行新的數(shù)據(jù)傳送,則可以不產(chǎn)生停止條件,馬上再次發(fā)出起始條件對(duì)另一從機(jī)進(jìn)行尋址。因此,在總線的一次數(shù)據(jù)傳送過(guò)程中,可以有以下幾種讀/寫組合方式。圖8-5完整的數(shù)據(jù)傳輸
(1)主機(jī)向從機(jī)發(fā)送數(shù)據(jù),數(shù)據(jù)傳送方向在整個(gè)傳送過(guò)程中不變,如圖8-6所示。圖8-6讀/寫組合方式1注:圖中陰影部分表示數(shù)據(jù)由主機(jī)向從機(jī)傳送,無(wú)陰影部分表示數(shù)據(jù)由從機(jī)向主機(jī)傳送。A表示應(yīng)答,表示非應(yīng)答。S表示起始條件,P表示停止條件。
(2)主機(jī)在第一個(gè)字節(jié)后,立即從從機(jī)中讀數(shù)據(jù),如圖8-7所示。圖8-7讀/寫組合方式2
(3)在每次傳送過(guò)程中,當(dāng)需要改變傳送方向時(shí),起始條件和從機(jī)地址都被重復(fù)產(chǎn)生一次,且兩次讀/寫方向位正好反相,如圖8-8所示。
由圖8-6~圖8-8可以看出,無(wú)論哪種組合方式,起始條件、停止條件和地址均由主機(jī)發(fā)出;數(shù)據(jù)字節(jié)的傳送方向則由尋址字節(jié)中的方向位規(guī)定;每個(gè)字節(jié)的傳送都必須有應(yīng)答位(A或)相隨。圖8-8讀/寫組合方式3
5.I2C總線的尋址
通常,I2C總線在起始條件后的第一個(gè)字節(jié)決定了主機(jī)選擇哪一個(gè)從機(jī)。第一字節(jié)就是尋址字節(jié)。
1)尋址字節(jié)的位定義
尋址字節(jié)的格式如圖8-9所示。圖8-9尋址字節(jié)的格式圖8-9中,D7~D0位組成從機(jī)地址。D0位是數(shù)據(jù)傳送方向位,當(dāng)D0為0時(shí),表示主機(jī)寫信息到被選中的從機(jī);當(dāng)D0為1時(shí),表示主機(jī)向從機(jī)讀信息。
主機(jī)發(fā)送一個(gè)地址后,總線上的每個(gè)從機(jī)都將7位地址碼與自己的地址進(jìn)行比較。若一樣,則認(rèn)為它被主機(jī)尋址,根據(jù)讀/寫位判斷自己是發(fā)送器或接收器。
從機(jī)地址由一個(gè)固定部分和一個(gè)可編程部分組成。在同一個(gè)系統(tǒng)中可能接入多個(gè)相同的從機(jī),從機(jī)地址中可編程部分決定了可接入同一I2C總線的最大數(shù)目。例如,一個(gè)從機(jī)的7位尋址位有4位為固定位,3位為可編程位,也就是說(shuō)可尋址8個(gè)相同的從機(jī)。
2)尋址字節(jié)中的特殊地址
I2C總線委員會(huì)協(xié)調(diào)I2C地址的分配。I2C總線委員會(huì)規(guī)定了I2C總線的一些特殊地址。其中,兩組8個(gè)地址(0000×××和1111×××)保留作特殊用途,如表8-1所示。通用呼叫地址用于尋址連接到I2C總線上的所有設(shè)備。如果設(shè)備不需要從通用呼叫地址獲取數(shù)據(jù),則它可以不響應(yīng)通用呼叫地址;否則,設(shè)備接收到這個(gè)地址后應(yīng)作應(yīng)答,并把自己置為從機(jī)接收器方式以接收隨后的各字節(jié)數(shù)據(jù)。除遇到不能處理的數(shù)據(jù)字節(jié)時(shí)可以不作應(yīng)答,否則收到每個(gè)字節(jié)后都應(yīng)作應(yīng)答。第一字節(jié)為通用呼叫地址,其含義在第二字節(jié)說(shuō)明,如圖8-10所示,具體說(shuō)明將在后面介紹。圖8-10通用呼叫地址格式第二字節(jié)為“00000110(06H)”時(shí),所有能響應(yīng)通用呼叫地址的從機(jī)設(shè)備復(fù)位,并由硬件裝入從機(jī)地址的可編程部分。但要求能響應(yīng)命令的從機(jī)設(shè)備復(fù)位時(shí)不拉低SDA和SCL線,以免堵塞總線。
第二字節(jié)為“00000100(04H)”時(shí),所有能響應(yīng)通用呼叫地址并通過(guò)硬件來(lái)定義其可編程地址的從機(jī)設(shè)備,將鎖定地址中的可編程位,但不進(jìn)行復(fù)位。
如果第二字節(jié)的最低位(LSB)?B為1,則該兩個(gè)字節(jié)命令稱為硬件通用呼叫命令。該命令由硬件主機(jī)設(shè)備發(fā)出。硬件主機(jī)設(shè)備就是不能發(fā)送所要尋訪從機(jī)設(shè)備地址的發(fā)送器,如鍵盤掃描器等。
3)起始字節(jié)
單片機(jī)可以用兩種方法接入I2C總線。自身帶有I2C總線硬件接口的單片機(jī),可通過(guò)編程來(lái)響應(yīng)由I2C總線請(qǐng)求而產(chǎn)生的中斷。當(dāng)單片機(jī)不具備I2C總線接口時(shí),必須通過(guò)軟件不斷地檢測(cè)總線,以便及時(shí)地響應(yīng)總線的請(qǐng)求。單片機(jī)檢測(cè)總線或定時(shí)查詢總線的次數(shù)越多,可用于執(zhí)行自身功能的時(shí)間就越少。因此,對(duì)于依靠軟件定時(shí)查詢總線的單片機(jī)來(lái)說(shuō),其工作速度的減慢與快速的硬件設(shè)備就出現(xiàn)了矛盾。這時(shí)I2C總線上的數(shù)據(jù)傳送可以由一個(gè)較長(zhǎng)的起始過(guò)程加以引導(dǎo),如圖8-11所示。圖8-11起始字節(jié)過(guò)程起始字節(jié)由起始條件、起始字節(jié)、應(yīng)答位、重復(fù)起始條件(Sr)組成。
請(qǐng)求訪問(wèn)總線的主機(jī)發(fā)出起始信號(hào)后,發(fā)送起始字節(jié)(00000001),另一個(gè)單片機(jī)可以以一個(gè)比較低的速率采樣SDA線,直到檢測(cè)到起始字節(jié)中的7個(gè)“0”中的一個(gè)為止。在檢測(cè)到SDA線上的高電平后,單片機(jī)就可以用較高的采樣速率,以便尋找作為同步信號(hào)使用的第二個(gè)起始信號(hào)Sr。
在起始信號(hào)后的應(yīng)答時(shí)鐘脈沖僅僅是為了和總線所使用的格式一致,并不要求設(shè)備在這個(gè)脈沖期間作應(yīng)答。
【練習(xí)】
項(xiàng)目:?jiǎn)巫止?jié)數(shù)據(jù)發(fā)送。
項(xiàng)目編號(hào):EX8_2。
任務(wù)要求:SDA接P0.0,SCL接P0.1,編程實(shí)現(xiàn)一個(gè)字節(jié)的數(shù)據(jù)傳輸(數(shù)據(jù)已放于累加器A中)。
分析步驟:
(1)熟悉數(shù)據(jù)傳輸?shù)挠行砸?guī)定。
(2)熟悉I2C數(shù)據(jù)的傳輸過(guò)程。
(3)學(xué)會(huì)將一字節(jié)數(shù)據(jù)轉(zhuǎn)化為一位一位輸出。參考代碼如下:
MOV R0, #08H
WLP: RLC A ;取數(shù)據(jù)位
MOV P0.0, C
NOP
SETB P0.1 ;模擬時(shí)鐘信號(hào)
NOP
NOP
NOP
NOP
NOP
CLR P0.1
DJNZ R0, WLP
8.1.3I2C總線的軟件模擬
MCS-51單片機(jī)不帶I2C總線接口。當(dāng)它與帶I2C總線接口的器件進(jìn)行連接時(shí),不能直接相連。可以通過(guò)硬件來(lái)實(shí)現(xiàn)MCS-51單片機(jī)與I2C總線接口芯片間的通信,比如I2C總線/并行轉(zhuǎn)換器,還可以采用軟件模擬來(lái)實(shí)現(xiàn)。所謂軟件模擬,就是用單片機(jī)的I/O口來(lái)模擬I2C總線的工作時(shí)序,從而達(dá)到能夠訪問(wèn)帶I2C總線接口器件的目的。下面介紹利用STC89C51的P1.0、P1.1來(lái)模擬I2C總線的工作時(shí)序。
1.I2C總線的典型信號(hào)模擬
為了保證數(shù)據(jù)傳送的可靠性,標(biāo)準(zhǔn)的I2C總線的數(shù)據(jù)傳送有嚴(yán)格的時(shí)序要求,如I2C總線的時(shí)鐘信號(hào)的最小的低電平周期為7.7μs,最小的高電平周期為4μs等。
I2C總線的起始條件、停止條件、發(fā)送“0”及發(fā)送“1”的模擬時(shí)序如圖8-12所示。
表8-2所示為I2C總線的時(shí)序特性。由表8-2可見,除了SDA、SCL線的信號(hào)下降時(shí)間為最大值外,其他參數(shù)只有最小值。這表明I2C總線的數(shù)據(jù)傳送中,可以利用時(shí)間同步機(jī)制展寬低電平周期,迫使主機(jī)處于等待狀態(tài),使傳送速率降低。圖8-12典型信號(hào)的模擬時(shí)序(a)起始條件;(b)停止條件;(c)發(fā)送“0”;(d)發(fā)送“1”對(duì)于一個(gè)新的起始條件,要求起始前總線的空閑時(shí)間TBUF大于7.7μs,而對(duì)于一個(gè)重復(fù)的起始條件,要求建立時(shí)間TSU;STA也必須大于7.7μs。所以,圖8-12中的起始條件信號(hào)適用于數(shù)據(jù)模擬傳送中任何情況下的起始操作。起始條件到第一個(gè)時(shí)鐘脈沖的時(shí)間間隔應(yīng)大于7.0μs。
對(duì)于終止條件,要保證大于7.7μs的信號(hào)建立時(shí)間TSU;STO,則在終止條件結(jié)束時(shí)要釋放總線,使SDA、SCL維持在高電平上,在大于7.7μs后才可以進(jìn)行第一次起始操作。在單主系統(tǒng)中,為了防止非正常傳送,終止條件后SCL可以設(shè)置為低電平。對(duì)于一個(gè)新的起始條件,要求起始前總線的空閑時(shí)間TBUF大于7.7μs,而對(duì)于一個(gè)重復(fù)的起始條件,要求建立時(shí)間TSU;STA也必須大于7.7μs。所以,圖8-12中的起始條件信號(hào)適用于數(shù)據(jù)模擬傳送中任何情況下的起始操作。起始條件到第一個(gè)時(shí)鐘脈沖的時(shí)間間隔應(yīng)大于7.0μs。
對(duì)于終止條件,要保證大于7.7μs的信號(hào)建立時(shí)間TSU;STO,則在終止條件結(jié)束時(shí)要釋放總線,使SDA、SCL維持在高電平上,在大于7.7μs后才可以進(jìn)行第一次起始操作。在單主系統(tǒng)中,為了防止非正常傳送,終止條件后SCL可以設(shè)置為低電平。對(duì)于發(fā)送應(yīng)答位、非應(yīng)答位而言,與發(fā)送數(shù)據(jù)“0”和“1”的信號(hào)定時(shí)要求完全相同。只要滿足在時(shí)鐘高電平大于7.0μs期間,SDA線上有確定的電平狀態(tài)即可。
2.典型信號(hào)的模擬子程序
設(shè)主機(jī)采用STC89C51,晶振頻率為6MHz,則幾個(gè)典型信號(hào)的模擬程序如下:
(1)起始子程序:
(2)終止信號(hào):
STOP:
CLRP1.1
SETBP1.0
NOP
NOP
SETBP1.1
NOP
NOP
CLRP1.0
RET
(3)發(fā)送應(yīng)答位:
ACK:
CLRP1.1
SETBP1.0
NOP
NOP
NOP
CLRP1.0
SETBP1.1
RET
(4)發(fā)送非應(yīng)答信號(hào):
NACK:
SETBP1.1
SETBP1.0
NOP
NOP
CLRP1.0
CLRP1.1
RET
【練習(xí)】
項(xiàng)目:起始條件信號(hào)模擬。
項(xiàng)目編號(hào):EX8_3。
任務(wù)要求:用MCS-51單片機(jī)的P0.0、P0.1分別連接I2C器件的SDA和SCL,編程模擬起始條件信號(hào)。
分析步驟:
(1)熟悉I2C起始條件的時(shí)序。
(2)編程實(shí)現(xiàn)。參考代碼如下:
SETBP0.0
SETBP0.1
NOP
NOP
CLRP0.0
NOP
NOP
CLRP0.18.2單片機(jī)與24C16接口的設(shè)計(jì)學(xué)習(xí)目標(biāo)◆理解EEPROM的作用?!衾斫?4C16的讀/寫操作。
工作任務(wù)◆設(shè)計(jì)、制作與調(diào)試單片機(jī)與24C16接口電路?!粼O(shè)計(jì)、調(diào)試單片機(jī)與24C16接口軟件。◆撰寫設(shè)計(jì)文檔與測(cè)試報(bào)告。
在某些單片機(jī)應(yīng)用系統(tǒng)中,常常希望能夠保存一些歷史數(shù)據(jù)以便以后查看,比如溫度測(cè)量系統(tǒng)中保存某時(shí)刻溫度,這種情況下通常需要為系統(tǒng)配置電可擦除可編程只讀存儲(chǔ)器(ElectricallyErasableProgrammableReadOnlyMemory,EEPROM)。EEPROM既具有ROM的非易失性的優(yōu)點(diǎn),又能像RAM一樣隨機(jī)地進(jìn)行讀/寫,可多次重復(fù)改寫,保留信息的時(shí)間長(zhǎng)(FAIRCHILD公司的FM24C16可進(jìn)行100萬(wàn)次改寫,信息保留超過(guò)40年)。EEPROM芯片有兩類接口:并行接口和串行接口。由于EEPROM的體積小,因此在使用中占用的系統(tǒng)資源少,可以減小用戶電路板的面積和引線數(shù)目。在傳輸速率要求不太高的系統(tǒng)中常采用串行接口的EEPROM芯片。本節(jié)將介紹采用I2C總線的串行EEPROM的讀/寫操作。要求:將內(nèi)部RAM中30H開始的10個(gè)存儲(chǔ)單元初始化為0~9,并將這10個(gè)數(shù)據(jù)寫入FM24C16中30H開始的10個(gè)存儲(chǔ)單元,再將FM24C16中的10個(gè)數(shù)據(jù)讀出,存入單片機(jī)的內(nèi)部RAM中40H開始的10個(gè)存儲(chǔ)單元。
1.硬件設(shè)計(jì)
采用STC89C51的P1.1口模擬I2C總線的SDA線,P1.0口模擬SCL線,連接電路如圖8-13所示。圖8-13連接電路圖圖8-13中,F(xiàn)M24C16為FAIRCHILD公司生產(chǎn)的16kb標(biāo)準(zhǔn)I2C總線接口串行EEPROM。其引腳分布如圖8-14所示,各引腳功能見表8-3。
注意:FM24C16的SDA和SCL是漏極開路的,需加上拉電阻,典型值為4.7k。圖8-14FM24C16的引腳圖圖8-13中,I2C為I2C協(xié)議分析器,它允許用戶監(jiān)視I2C總線并能與之進(jìn)行交互。該分析器允許用戶查看I2C總線上傳送的數(shù)據(jù),還允許用戶作為主機(jī)或從機(jī)向總線發(fā)送數(shù)據(jù)。它的SCL腳連至I2C總線的時(shí)鐘線,SDA腳連至數(shù)據(jù)線。
2.軟件設(shè)計(jì)
1)?FM24C16的讀/寫操作
I2C總線EEPROM在I2C總線上作為從機(jī)工作,主機(jī)通過(guò)從機(jī)地址訪問(wèn)某設(shè)備。I2C總圖8-15從機(jī)地址格式線EEPROM的從機(jī)地址格式如圖8-15所示。圖中,設(shè)備特征碼表征器件類型,對(duì)于EEPROM,其設(shè)備特征碼為“1010”;設(shè)備/頁(yè)選擇位A2、A1、A0用于芯片選擇或芯片內(nèi)的頁(yè)選擇,對(duì)于FM24C16,這三位用于頁(yè)選擇;最低位(LSB)表征當(dāng)前操作為讀(為1)或?qū)?為0)。主機(jī)將從機(jī)地址發(fā)送出去并得到響應(yīng)(ACKNOWLEDGE)后,發(fā)送存儲(chǔ)單元地址就可以訪問(wèn)具體存儲(chǔ)單元。圖8-15從機(jī)地址格式
(1)寫操作。FM24C16支持兩類寫操作:字節(jié)寫入(ByteWrite)和頁(yè)寫入(PageWrite)。字節(jié)寫入幀格式如圖8-16所示。圖8-16字節(jié)寫入幀格式頁(yè)寫入幀格式如圖8-17所示。圖8-17頁(yè)寫入格式
(2)讀操作。讀操作有三種:讀當(dāng)前地址存儲(chǔ)單元的數(shù)據(jù)、讀指定地址存儲(chǔ)單元的數(shù)據(jù)、讀連續(xù)存儲(chǔ)單元的數(shù)據(jù)。
讀當(dāng)前地址存儲(chǔ)單元的數(shù)據(jù)幀格式如圖8-18所示。圖8-18讀當(dāng)前地址存儲(chǔ)單元的數(shù)據(jù)幀格式一旦含有被設(shè)置成R/
=1的EEPROM芯片地址輸入,并由EEPROM發(fā)出應(yīng)答信號(hào),當(dāng)前地址(上一次讀或?qū)懖僮鲿r(shí)最后一個(gè)被訪問(wèn)存儲(chǔ)單元的下一單元的地址值)所指向存儲(chǔ)單元的數(shù)據(jù)就被串行輸出。單片機(jī)在讀完一幀數(shù)據(jù)后,發(fā)送非應(yīng)答信號(hào),接著發(fā)送一個(gè)“停止”信號(hào)。
讀指定地址存儲(chǔ)單元的數(shù)據(jù)幀格式如圖8-19所示。單片機(jī)先發(fā)送EEPROM芯片地址(R/
=0)和EEPROM存儲(chǔ)單元地址,得到EEPROM的應(yīng)答后,再發(fā)送一個(gè)“啟動(dòng)”信號(hào),在發(fā)送帶有R/
=1的EEPROM芯片地址后,EEPROM產(chǎn)生相應(yīng)的應(yīng)答信號(hào),并串行輸出數(shù)據(jù)。在讀完一幀數(shù)據(jù)后,發(fā)送非應(yīng)答信號(hào),接著發(fā)送一個(gè)“停止”信號(hào)。圖8-19讀指定地址存儲(chǔ)單元的數(shù)據(jù)幀格式讀連續(xù)存儲(chǔ)單元的數(shù)據(jù)幀格式如圖8-20所示。圖8-20讀連續(xù)存儲(chǔ)單元的數(shù)據(jù)幀格式讀連續(xù)地址存儲(chǔ)單元的數(shù)據(jù)可以從當(dāng)前地址開始,也可以從一個(gè)指定的地址開始。在單片機(jī)接收到一幀8位數(shù)據(jù)后,用應(yīng)答信號(hào)做出響應(yīng)。只要EEPROM接收到一個(gè)應(yīng)答信號(hào),它就繼續(xù)對(duì)數(shù)據(jù)存儲(chǔ)單元的地址自動(dòng)增量調(diào)整一次,并順序串行輸出字節(jié)數(shù)據(jù)。當(dāng)超過(guò)存儲(chǔ)單元的最大地址溢出時(shí),數(shù)據(jù)字節(jié)單元的地址將“滾動(dòng)循環(huán)”,繼續(xù)從第一頁(yè)串行輸出數(shù)據(jù)幀。當(dāng)需要結(jié)束操作時(shí),單片機(jī)在接收到一幀數(shù)據(jù)后,只要發(fā)送一非應(yīng)答信號(hào),接著發(fā)送一個(gè)“停止”信號(hào)即可。
2)流程圖
本例中包含多個(gè)子程序,在此給出寫單字節(jié)、讀單字節(jié)、寫多字節(jié)、讀多字節(jié)的流程圖,如圖8-21和圖8-22所示。圖8-21單字節(jié)讀/寫流程圖(a)寫單字節(jié);(b)讀單字節(jié)圖8-22多字節(jié)讀/寫流程圖(a)寫多字節(jié);(b)讀多字節(jié)
;發(fā)送數(shù)據(jù)緩存區(qū)初始化,將10個(gè)連續(xù)字節(jié)分別賦值為00H~09H
MOV A, #0
MOV R0, #30H
S1: MOV @R0, A
INC R0
INC A
CJNE R0, #3AH, S1
NOP
NOP
NOP ;起始條件的鎖定時(shí)間大于7.7μs
CLR SDA ;發(fā)送起始信號(hào)
NOP
NOP
NOP
NOP ;起始條件的鎖定時(shí)間大于7.7μs
CLR SCL ;鉗住I2C總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù)
NOP
RET
;***************************************************
;子程序名:STOP
;描述:停止I2C總線子程序,即發(fā)送I2C總線的停止條件
;***************************************************
STOP: CLR SDA ;發(fā)送停止條件的數(shù)據(jù)信號(hào)
NOP
NOP
SETB SCL ;發(fā)送停止條件的時(shí)鐘信號(hào)
NOP
NOP
NOP
NOP NOP ;起始條件的建立時(shí)間大于7.7μs
SETB SDA ;發(fā)送I2C總線的停止信號(hào)
NOP
NOP
NOP
NOP
NOP ;延遲時(shí)間大于7.7μs
RET
;*********************************************
;子程序名:MACK
;描述:發(fā)送應(yīng)答信號(hào)子程序
;*********************************************
MACK:CLR SDA ;將SDA置0
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP ;保持?jǐn)?shù)據(jù)時(shí)間,大于7.7μs CLR SCL
NOP
NOP
RET
;**********************************************
;子程序名:MNACK
;描述:發(fā)送非應(yīng)答信號(hào)子程序
;***********************************************
MNACK:SETB SDA ;將SDA置1
NOP
NOP
SETB SCL NOP
NOP
NOP
NOP
NOP
CLR SCL ;保持?jǐn)?shù)據(jù)時(shí)間,大于7.7μs
NOP
NOP
RET
;*************************************************
;子程序名:CACK
;描述:檢查應(yīng)答位子程序,返回值A(chǔ)CK=1時(shí)表示有應(yīng)答
;************************************************
CACK: SETB SDA
NOP
NOP
SETB SCL
CLR ACK
NOP
NOP MOV C, SDA
JC CEND
SETB ACK ;判斷應(yīng)答位
CEND: NOP
CLR SCL
NOP
RET
;*********************************************
;子程序名:WRBYTE
;描述:發(fā)送字節(jié)子程序,字節(jié)數(shù)據(jù)放入ACC
;*********************************************
WRBYTE:
MOV R0, #08H
WRBYTE:
MOV R0, #08H
WLP: RLC A ;取數(shù)據(jù)位
JC WRI
SJMP WRO ;判斷數(shù)據(jù)位
WLP1: DJNZ R0, WLP
NOP
RET
WRI: SETB SDA ;發(fā)送1
NOP
SETB SCL NOP
NOP
NOP
NOP
NOP
CLR SCL
SJMP WLP1
WRO: CLR SDA ;發(fā)送0
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
CLR SCL
SJMP WLP1
;********************************************
;子程序名:RDBYTE
;描述:讀取字節(jié)子程序,讀出的數(shù)據(jù)存放在ACC中
;*********************************************
RDBYTE:
MOV R0, #08H
RLP: SETB SDA
NOP
SETB SCL ;時(shí)鐘線為高,接收數(shù)據(jù)位
NOP
NOP MOV C, SDA ;讀取數(shù)據(jù)位
MOV A, R2
CLR SCL ;將SCL拉低,時(shí)間大于7.7μs
RLC A ;進(jìn)行數(shù)據(jù)位的處理
MOV R2, A
NOP
NOP
NOP
DJNZ R0, RLP ;未夠8位,繼續(xù)讀入
RET
;****************************************
;子程序名:延時(shí)
;說(shuō)明:選用工作寄存器組1
;****************************************
DELAY:
PUSH PSW
CLRRS1
SETB RS0
MOV R5, #20
D1: MOV R6, #248
D2: MOV R7, #248
DJNZ R7, $
DJNZ R6, D2
DJNZ R5, D1
POPPSW
RET
END
3.仿真調(diào)試
1)?I2CDEBUGGER運(yùn)行窗口介紹
將源程序生成.hex文件并將其加載至單片機(jī)便可進(jìn)行調(diào)試,前面章節(jié)已介紹如何操作,此處不再贅述,僅介紹如何用I2CDEBUGGER調(diào)試I2C總線應(yīng)用系統(tǒng)。
運(yùn)行起來(lái)后,就能看到I2CDEBUGGER的運(yùn)行時(shí)窗口,如圖8-23所示。該窗口主要由五個(gè)部分組成。圖8-23I2CDEBUGGER運(yùn)行窗口①輸入數(shù)據(jù)顯示區(qū):該區(qū)域?yàn)镮2CDEBUGGER的主窗口,用于顯示I2C總線上的活動(dòng)情況。
②緩沖序列列表。該區(qū)域用于顯示在下一可用時(shí)機(jī)將通過(guò)I2C終端傳輸?shù)囊魂?duì)序列。可以通過(guò)從序列輸入框添加緩沖序列。
③預(yù)定義序列列表:該區(qū)域顯示預(yù)先編制的數(shù)據(jù)序列,該數(shù)據(jù)序列在SCL腳的控制下通過(guò)SDA腳的傳輸。可以通過(guò)從序列輸入框添加預(yù)定義序列。④序列輸入框:該輸入框允許用戶輸入序列,可以放至預(yù)定義列表,也可以放至緩沖列表。該輸入框支持的語(yǔ)法如表8-4所示。注意:十六進(jìn)制數(shù)和二進(jìn)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 物理電學(xué)詳細(xì)課程設(shè)計(jì)
- 維修數(shù)控機(jī)床課程設(shè)計(jì)
- 粘土仿真花藝課程設(shè)計(jì)
- 油藏工程與原理課程設(shè)計(jì)
- 系統(tǒng)控制課程設(shè)計(jì)浙理
- 禮儀課程設(shè)計(jì)綜合
- 模具塑料模課程設(shè)計(jì)
- 寵物快速修剪課程設(shè)計(jì)
- 漸進(jìn)式打法課程設(shè)計(jì)
- 精準(zhǔn)課程設(shè)計(jì)
- 成人有創(chuàng)機(jī)械通氣氣道內(nèi)吸引技術(shù)操作解讀護(hù)理課件
- 貴州省黔南布依族苗族自治州2023-2024學(xué)年九年級(jí)上學(xué)期期末數(shù)學(xué)試題(含答案)
- 基坑開挖降水課件
- (小學(xué))語(yǔ)文教師書寫《寫字教學(xué)講座》教育教研講座教學(xué)培訓(xùn)課件
- 智能膠囊內(nèi)鏡導(dǎo)航算法研究
- 人力資源產(chǎn)業(yè)園可行性方案
- 《新疆大學(xué)版學(xué)術(shù)期刊目錄》(人文社科)
- 2024年初級(jí)社會(huì)工作者《社會(huì)工作綜合能力》模擬試卷一
- 重慶市2023-2024學(xué)年高一上學(xué)期期末聯(lián)合檢測(cè)物理試卷(含答案解析)
- 糖尿病性視網(wǎng)膜病變匯報(bào)演示課件
- GB/T 43575-2023區(qū)塊鏈和分布式記賬技術(shù)系統(tǒng)測(cè)試規(guī)范
評(píng)論
0/150
提交評(píng)論