第10章 單片機(jī)應(yīng)用系統(tǒng)存儲(chǔ)器擴(kuò)展_第1頁(yè)
第10章 單片機(jī)應(yīng)用系統(tǒng)存儲(chǔ)器擴(kuò)展_第2頁(yè)
第10章 單片機(jī)應(yīng)用系統(tǒng)存儲(chǔ)器擴(kuò)展_第3頁(yè)
第10章 單片機(jī)應(yīng)用系統(tǒng)存儲(chǔ)器擴(kuò)展_第4頁(yè)
第10章 單片機(jī)應(yīng)用系統(tǒng)存儲(chǔ)器擴(kuò)展_第5頁(yè)
已閱讀5頁(yè),還剩76頁(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、第第1010章章 單片機(jī)應(yīng)用存儲(chǔ)器擴(kuò)展單片機(jī)應(yīng)用存儲(chǔ)器擴(kuò)展 10.1 系統(tǒng)資源擴(kuò)展方法 10.2 程序存儲(chǔ)器擴(kuò)展 10.2.1 程序存儲(chǔ)器擴(kuò)展方法 10.2.2 程序存儲(chǔ)器擴(kuò)展舉例 10.3 數(shù)據(jù)存儲(chǔ)器擴(kuò)展 10.3.1 數(shù)據(jù)存儲(chǔ)器擴(kuò)展方法 10.3.2 數(shù)據(jù)存儲(chǔ)器擴(kuò)展舉例 10.4 串行程序存儲(chǔ)器擴(kuò)展 10.4.1 I2C串行總線標(biāo)準(zhǔn) 10.4.2 串行程序存儲(chǔ)器擴(kuò)展舉例 10.5 全自動(dòng)洗衣機(jī)控制器存儲(chǔ)器擴(kuò)展Proteus 仿真 10.1 10.1 系統(tǒng)資源擴(kuò)展的方法系統(tǒng)資源擴(kuò)展的方法 1. 1. 最小系統(tǒng)最小系統(tǒng) 2 2系統(tǒng)擴(kuò)展的內(nèi)容系統(tǒng)擴(kuò)展的內(nèi)容 單片機(jī)應(yīng)用系統(tǒng)的擴(kuò)展一般包括以下幾 方

2、面的內(nèi)容: 外部程序存儲(chǔ)器的擴(kuò)展; 外部數(shù)據(jù)存儲(chǔ)器的擴(kuò)展; 輸入/輸出接口的擴(kuò)展; 管理功能器件的擴(kuò)展(如定時(shí)器/計(jì)數(shù)器、 中斷控制器等)。 3. 系統(tǒng)擴(kuò)展的基本方法 系統(tǒng)擴(kuò)展時(shí),常把單片機(jī)的外部引線分為三組總線: 數(shù)據(jù)線、地址線、控制線。系統(tǒng)擴(kuò)展就是將需要的外 部資源掛接到這三組總線上,使其能夠與CPU正確 通信,完成數(shù)據(jù)交換。此即總線擴(kuò)展法。 按照數(shù)據(jù)傳送的方式,擴(kuò)展可以分為并行擴(kuò)展和串行 擴(kuò)展。并行總線擴(kuò)展的一般連接方法如圖9-2所示。 地址總線地址總線 數(shù)據(jù)總線數(shù)據(jù)總線 控制總線控制總線 MOVX指令訪問(wèn)端口(寫(xiě))的時(shí)序 要點(diǎn):P0分時(shí)輸出低8位地址和8位數(shù)據(jù); 寫(xiě)端口時(shí)WR(P3.6

3、)引腳自動(dòng)產(chǎn)生負(fù)脈沖信號(hào) MOVX指令訪問(wèn)端口(讀)的時(shí)序 要點(diǎn):P0分時(shí)輸出低8位地址和8位數(shù)據(jù); 寫(xiě)端口時(shí)RD(P3.7)引腳自動(dòng)產(chǎn)生負(fù)脈沖信號(hào) (1)數(shù)據(jù)總線(DB):數(shù)據(jù)總線用于單片機(jī)與存儲(chǔ)器或 I/O口的數(shù)據(jù)傳送。由P0口提供。通常將P0口與外擴(kuò)芯片的 數(shù)據(jù)總線直接相連作為數(shù)據(jù)線。若所選存儲(chǔ)器芯片字長(zhǎng)與單 片機(jī)字長(zhǎng)一致,則只需擴(kuò)展容量。擴(kuò)展存儲(chǔ)器時(shí),所需存儲(chǔ) 器芯片數(shù)目按下式確定: 存儲(chǔ)器芯片容量 系統(tǒng)擴(kuò)展容量 芯片數(shù)目 存儲(chǔ)器芯片字長(zhǎng) 系統(tǒng)字長(zhǎng) 存儲(chǔ)器芯片容量 系統(tǒng)擴(kuò)展容量 芯片數(shù)目 若所選存儲(chǔ)器芯片字長(zhǎng)與單片機(jī)字長(zhǎng)不一致,則不僅需擴(kuò) 展容量,還需字?jǐn)U展,所需芯片數(shù)目按下式確定:

4、(2)地址總線(AB):地址信號(hào)用于尋 址存儲(chǔ)單元或I/O端口。由P0口和P2 口共同提供。由于P0口是分時(shí)復(fù)用傳 送地址和數(shù)據(jù)信息,所以當(dāng)P0口傳送 地址信息時(shí),由ALE信號(hào)控制經(jīng) 74LS373地址鎖存器鎖存后輸出低8位 地址A0A7,與P2口輸出的高8位地 址組成16位地址總線。 (3)控制總線(CB):控制總線用于協(xié)調(diào)控制數(shù)據(jù)信息 和地址信息的正確傳送。主要有以下幾個(gè): ALE:地址鎖存控制。ALE的下降沿控制鎖存器鎖存 P0口輸出的低8位地址。與擴(kuò)展芯片的鎖存器控制端 相連。 PSEN:程序存儲(chǔ)器ROM的讀控制信號(hào)。執(zhí)行程序存 儲(chǔ)器讀指令MOVC時(shí),該信號(hào)有效。與程序存儲(chǔ)器輸 出使能

5、端相連。 EA:程序存儲(chǔ)器選擇。0:片外程序存儲(chǔ)器;1:從 片內(nèi)程序存儲(chǔ)器開(kāi)始訪問(wèn)。 RD, WR:片外數(shù)據(jù)存儲(chǔ)器的讀寫(xiě)控制。執(zhí)行片外數(shù) 據(jù)存儲(chǔ)器讀寫(xiě)指令MOVX時(shí),信號(hào)有效。分別與擴(kuò)展 芯片的輸出使能和寫(xiě)使能線相連。 外擴(kuò)芯片的選通線由單片機(jī)多余的高位地址線直接選 通或經(jīng)地址譯碼器譯碼后選通。 4. 系統(tǒng)擴(kuò)展中的地址譯碼技術(shù) 線選法 部分譯碼法 全譯碼法 片選信號(hào)的形成方式一般有如下三種: 單片機(jī)系統(tǒng)擴(kuò)展時(shí),通常把地址線分為片內(nèi)地址 和片外地址兩部分。片內(nèi)地址是指為了尋址存儲(chǔ)器芯 片或I/O接口芯片片內(nèi)單元所需要的地址線。一般為地 址總線的低位。除了片內(nèi)地址總線外,剩余的地址線 稱為片外地址

6、線,一般為地址總線的高位。地址譯碼 是指把高位地址線譯碼后用于控制芯片的片選信號(hào)。 線選法:先將擴(kuò)展芯片的地址線與單片機(jī)的地址總線從 低位開(kāi)始順次相連后,剩余的高位地址線的一根或幾根 直接連接到各擴(kuò)展芯片的片選線上,如圖9-3所示。 二進(jìn)制表示16進(jìn)制 表示 無(wú)關(guān)位片外地址線片內(nèi)地址線 A15 A14 A13 A12 A11A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 芯 片 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 F000H . . . . . . . . . . . . . . . . 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1

7、 1 F7FFH 芯 片 1 1 1 0 10 0 0 0 0 0 0 0 0 0 0 E800H . . . . . . . . . . . . . . . 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 EFFFH 芯 片 III 1 1 0 1 10 0 0 0 0 0 0 0 0 0 0 D800H . . . . . . . . . . . . . . . . 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 DFFFH 表9-1 線選法三片存儲(chǔ)器芯片地址分配表 部分譯碼法 二進(jìn)制表示16進(jìn)制表 示 無(wú)關(guān)位片外地址線片內(nèi)地址線 A15A14 A13 A1

8、2 A11A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 芯 片 1 /0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8000H . . . . . . . . . . . . . 1 /0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 87FFH 芯 片 1 /0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 8800H . . . . . . . . . . . . . 1 /0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 8FFFH 芯 片 III 1 /0 0 0 1 00 0 0 0 0 0 0 0 0

9、0 0 9000H . . . . . . . . . . . . . 1 /0 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 97FFH 電路地址分配表 全譯碼:將A15連接到G1端 二進(jìn)制表示16進(jìn)制表 示 無(wú)關(guān)位片外地址線片內(nèi)地址線 A15A14 A13 A12 A11A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 芯 片 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8000H . . . . . . . . . . . . . 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 87FFH 芯 片 1 0 0 0 10

10、0 0 0 0 0 0 0 0 0 0 8800H . . . . . . . . . . . . . 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 8FFFH 芯 片 III 1 0 0 1 00 0 0 0 0 0 0 0 0 0 0 9000H . . . . . . . . . . . . . 1 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 97FFH A15=1時(shí),電路地址分配表 10.2 10.2 程序存儲(chǔ)器擴(kuò)展程序存儲(chǔ)器擴(kuò)展 單片機(jī)片內(nèi)的程序存儲(chǔ)器可分為ROM、EPROM、EEPROM、 Flash ROM等幾種。當(dāng)片內(nèi)程序存儲(chǔ)器容量不能滿足要求

11、時(shí), 需進(jìn)行程序存儲(chǔ)器擴(kuò)展。擴(kuò)展時(shí)要注意以下幾點(diǎn): 片外程序存儲(chǔ)器有單獨(dú)的地址編號(hào)(0000HFFFFH),可尋 址64KB范圍。雖然與數(shù)據(jù)存儲(chǔ)器地址重疊,但不會(huì)沖突。因?yàn)?使用的指令不同。程序存儲(chǔ)器與數(shù)據(jù)存儲(chǔ)器共用地址總線和數(shù)據(jù) 總線。 對(duì)片內(nèi)有ROM的單片機(jī),片內(nèi)ROM與片外ROM采用相同的操 作指令,片內(nèi)與片外程序存儲(chǔ)器的選擇由 控制 , 為高電 平選擇片內(nèi), 為低電平選擇片外。 程序存儲(chǔ)器使用單獨(dú)的控制信號(hào)和指令。讀取由 控制, 讀取數(shù)據(jù)用MOVC指令。 片外數(shù)據(jù)存儲(chǔ)器的讀寫(xiě)由 、 信號(hào)控制,用MOVX指令訪 問(wèn)。 RD EAEA EA WR PSEN 10.2.1 程序存儲(chǔ)器擴(kuò)展方法

12、 1. 程序存儲(chǔ)器擴(kuò)展的一般方法 訪問(wèn)外部程序存儲(chǔ)器時(shí)序 2. 訪問(wèn)外部程序存儲(chǔ)器的時(shí)序 EPROM芯片種類繁多,2716是其中容量較小的一 款,有24個(gè)引腳,如圖9-7。3根電源線(VCC、 Vpp、GND)、11根地址線(A0A10)、8根數(shù)據(jù) 輸出線(O0O7),其它兩根為片選端和輸出允許 端。Vpp為編程電源端,在正常工作(讀)時(shí),也接 到+5V。大容量的EPROM芯片有2732、2764、 27128、27256,它們的引腳功能與2716類似。圖9- 7中列出了它們的引腳分布。 10.2.2 程序存儲(chǔ)器擴(kuò)展舉例 1EPROM程序存儲(chǔ)器擴(kuò)展 10.2.2 程序存儲(chǔ)器擴(kuò)展舉例 【例10-

13、1】 試在8051的最小系統(tǒng)上擴(kuò)展一片EPROM 2764。 (1)線選法的單片程序存儲(chǔ)器的擴(kuò)展 上圖所示電路的8個(gè)重疊的地址范圍為: 00000000000000000001111111111111,即0000H1FFFH; 00100000000000000011111111111111,即2000H3FFFH; 01000000000000000101111111111111,即4000H5FFFH; 01100000000000000111111111111111,即6000H7FFFH; 10000000000000001001111111111111,即8000H9FFFH; 10

14、100000000000001011111111111111,即A000HBFFFH; 11000000000000001101111111111111,即C000HDFFFH; 11100000000000001111111111111111,即E000HFFFFH。 【例10-2】線選法多片程序存儲(chǔ)器擴(kuò)展:用兩片 2764擴(kuò)展16 KB的程序存儲(chǔ)器。 (2)線選法的多片程序存儲(chǔ)器擴(kuò)展 因兩根線(A13、A14)未用,故兩個(gè)芯片各有22=4個(gè)重 疊的地址空間。 重疊的地址范圍如下: 芯片1: 000000000000000000001111111111111,即0000H1FFFH; 001

15、000000000000000011111111111111,即2000H3FFFH; 010000000000000000101111111111111,即4000H5FFFH; 011000000000000000111111111111111,即6000H7FFFH; 芯片2: 100000000000000001001111111111111,即8000H9FFFH; 101000000000000001011111111111111,即A000HBFFFH; 110000000000000001101111111111111,即C000HDFFFH; 1110000000000000

16、01111111111111111,即E000HFFFFH。 【例10-3】用2764芯片擴(kuò)展8031的片外程序存儲(chǔ)器,地址范圍 為0000H3FFFH。 本例要求的地址空間是唯一確定的,所以要采用全譯碼方 法。由分配的地址范圍知:擴(kuò)展的容量為3FFFH0000H+1 =4000H =16KB,2764為8 K8位,故需要兩片。第1片的地 址范圍應(yīng)為0000H1FFFH,可見(jiàn),A15A14A13為000;第2片 的地址范圍應(yīng)為2000H3FFFH,可見(jiàn),A15A14A13為001。 地址關(guān)系如表9-3所示: (3)地址譯碼法的多片程序存儲(chǔ)器擴(kuò)展 P2.7P2.6P2.5P2. 4 P2.3P2

17、.2P2. 1 P2. 0 P0. 7 P0. 6 P0. 5 P0. 4 P0. 3 P0. 2 P0. 1 P0. 0 A15A14A13A1 2 A11A10A9A8A7A6A5A4A3A2A1A0 0 0 0 0 0 1 2E2PROM 擴(kuò)展 CEOEWE 表 10-4 E2PROM的工作方式 方 式 控 制 腳 I/O0I/O7 讀 出LLH輸出信息 寫(xiě) 入LHL數(shù)據(jù)輸入 維 持H高 阻 禁 止 寫(xiě)H 2864A提供了兩種數(shù)據(jù)寫(xiě)入操作方式, 字節(jié)寫(xiě)入和頁(yè)面 寫(xiě)入。字節(jié)寫(xiě)入每次只寫(xiě)入一個(gè)字節(jié),而且需要查詢方式判 斷寫(xiě)入是否已經(jīng)結(jié)束。頁(yè)面寫(xiě)入方式是為了提高寫(xiě)入速度而 設(shè)置的。 E2PRO

18、M的工作方式主要有讀出、寫(xiě)入、維持三種。 E2PROM即可作ROM使用,也可作RAM使用。如果將E2PROM 同時(shí)用作片外ROM和片外RAM用,連接方法如圖所示。 10.3 10.3 數(shù)據(jù)存儲(chǔ)器擴(kuò)展數(shù)據(jù)存儲(chǔ)器擴(kuò)展 外部數(shù)據(jù)存儲(chǔ)器通常設(shè)置二個(gè)數(shù)據(jù)區(qū): (1)低8位地址線尋址的外部數(shù)據(jù)區(qū)。此區(qū)域?qū)ぶ房臻g為256 個(gè)字節(jié)。CPU可以使用下列讀寫(xiě)指令來(lái)訪問(wèn)此存貯區(qū)。 讀存儲(chǔ)器數(shù)據(jù)指令:MOVX A, Ri 寫(xiě)存儲(chǔ)器數(shù)據(jù)指令:MOVX Ri, A 注意:這種情況下對(duì)外部RAM進(jìn)行操作需將P2口全部清零。 (2)16位地址線尋址的外部數(shù)據(jù)區(qū)。當(dāng)外部RAM容量較大, 要訪問(wèn)RAM地址空間大于256個(gè)字節(jié)時(shí),

19、則要采用如下16位 尋址指令。 讀存儲(chǔ)器數(shù)據(jù)指令:MOVX A, DPTR 寫(xiě)存儲(chǔ)器數(shù)據(jù)指令:MOVX DPTR, A 由于DPTR為16位的地址指針,故可尋址64K 字節(jié)單元 10.3.2 數(shù)據(jù)存儲(chǔ)器擴(kuò)展舉例 1 1線選法的單片數(shù)據(jù)存儲(chǔ)器擴(kuò)展線選法的單片數(shù)據(jù)存儲(chǔ)器擴(kuò)展 2.兩片數(shù)據(jù)存儲(chǔ)器的擴(kuò)展兩片數(shù)據(jù)存儲(chǔ)器的擴(kuò)展 【例10-4】 采用2114芯片在8031片外擴(kuò)展1 KB數(shù)據(jù)存儲(chǔ)器。 3 3多片數(shù)據(jù)存儲(chǔ)器擴(kuò)展多片數(shù)據(jù)存儲(chǔ)器擴(kuò)展 10.3.4 10.3.4 同時(shí)擴(kuò)展同時(shí)擴(kuò)展ROMROM和和RAMRAM 10.4 10.4 串行程序存儲(chǔ)器擴(kuò)展串行程序存儲(chǔ)器擴(kuò)展 1-wire:數(shù)據(jù)線只有1根,可實(shí)

20、現(xiàn)半雙工通信。 為Dallas 公司的專利 I2C:Philips公司提出,用于板內(nèi)芯片級(jí)通信 SPI:Motorola 公司推行的串行通信協(xié)議,其精簡(jiǎn) 接口為Microwire 。 I2C(Inter-Integrated Circuit)是飛利浦公司于二 十世紀(jì)80年代初期推出的一種“芯片互聯(lián)”串行總 線標(biāo)準(zhǔn),起初設(shè)計(jì)的最高傳送速率為100kbps,主要 用于低帶寬、短距離的板內(nèi)芯片通信。目前,I2C總 線的理論最高傳輸速率可達(dá)到3.4Mbps,且通信范圍 也早已不僅僅局限在板內(nèi)。 圖9-21 I2C總線設(shè)備連接電路 10.4.1 I10.4.1 I2 2C C串行總線標(biāo)準(zhǔn)串行總線標(biāo)準(zhǔn) 開(kāi)

21、始及停止信號(hào)的定義 圖9-22 I2C總線起停信號(hào)定義 I2C總線上只有主設(shè)備可以發(fā)起數(shù)據(jù)傳輸,由于I2C總線上允許 多個(gè)主設(shè)備共存,故某一個(gè)主設(shè)備能夠發(fā)起與從設(shè)備間的通信 的前提條件是總線當(dāng)前處于空閑狀態(tài),從而主設(shè)備可以獲得總 線控制權(quán)。為了獲取總線控制權(quán),主設(shè)備需要向總線發(fā)送一個(gè) 啟動(dòng)信號(hào)來(lái)通知總線上其他設(shè)備其對(duì)總線的征用。同理通信結(jié) 束時(shí),主設(shè)備還需要發(fā)送一個(gè)結(jié)束信號(hào)來(lái)釋放總線。I2C對(duì)啟動(dòng) 信號(hào)的定義為當(dāng)SCL處于高電平時(shí),SDA出現(xiàn)一個(gè)下降沿;停 止信號(hào)則是當(dāng)SCL處于高電平時(shí),SDA出現(xiàn)一個(gè)上升沿。I2C 的啟停信號(hào)如圖9-22所示。 I2C總線上主設(shè)備發(fā)送起始信號(hào)啟動(dòng)發(fā)送過(guò)程后,

22、還 需要發(fā)送一個(gè)控制字節(jié)來(lái)初始化從設(shè)備的地址及讀寫(xiě) 操作。 控制字節(jié)的定義如圖9-23所示,高4位數(shù)據(jù)為設(shè)備類 型號(hào),例如EEPROM的設(shè)備類型號(hào)為1010。緊接著 3位數(shù)據(jù)為從設(shè)備的地址,這三位數(shù)據(jù)的值由從設(shè)備 相應(yīng)的引腳電平來(lái)確定。最低位為讀寫(xiě)標(biāo)志,當(dāng)該位 為1時(shí),表示主設(shè)備對(duì)從設(shè)備進(jìn)行讀數(shù)據(jù)操作,當(dāng)該 位為0時(shí),表示向從設(shè)備寫(xiě)入數(shù)據(jù)。 應(yīng)答信號(hào) I2C總線傳送數(shù)據(jù)時(shí),設(shè)備需要對(duì)每一個(gè)接受到的字 節(jié)進(jìn)行應(yīng)答,具體表現(xiàn)為應(yīng)答設(shè)備在第9個(gè)時(shí)鐘周期 將SDA線下拉到低電平,即產(chǎn)生一個(gè)應(yīng)答信號(hào) (ACK)。對(duì)于主設(shè)備發(fā)起的寫(xiě)操作而言,從設(shè)備 每接受完一個(gè)字節(jié)后向總線發(fā)送一個(gè)ACK。反之, 主設(shè)備進(jìn)

23、行讀操作時(shí),在收到從設(shè)備過(guò)來(lái)的一個(gè)字節(jié) 的數(shù)據(jù)后由主設(shè)備發(fā)送一個(gè)ACK應(yīng)答從設(shè)備,當(dāng)收 到從設(shè)備發(fā)過(guò)來(lái)的最后一個(gè)數(shù)據(jù)后,主設(shè)備發(fā)送一個(gè) 非應(yīng)答信號(hào)(NOACK),然后結(jié)束。 圖9-24 I2C寫(xiě)數(shù)據(jù)時(shí)序圖 I2C總線上一次完整的寫(xiě)數(shù)據(jù)時(shí)序如圖9-24所示, 在向總線發(fā)送起動(dòng)信號(hào)取得總線使用權(quán)之后,主設(shè) 備發(fā)送一個(gè)控制字節(jié),與控制字中地址相同的從設(shè) 備在收到控制字后向總線發(fā)送一個(gè)ACK應(yīng)答完成握 手。隨后主設(shè)備向從設(shè)備寫(xiě)數(shù)據(jù),從設(shè)備對(duì)收到的 每個(gè)字節(jié)都進(jìn)行應(yīng)答,直至主設(shè)備發(fā)送完全部數(shù)據(jù) 向總線發(fā)出停止信號(hào)。 I2C總線上的一次讀數(shù)據(jù)時(shí)序如圖9-25所示,首先,由 主設(shè)備向從設(shè)備發(fā)送一個(gè)讀控制字節(jié)

24、(R/W位置0)并對(duì)其 想讀取的地址進(jìn)行一次寫(xiě)操作,從設(shè)備應(yīng)答后,主設(shè)備應(yīng) 答控制信號(hào)(R/W位置1),開(kāi)始接收由從設(shè)備發(fā)送過(guò)來(lái)的 數(shù)據(jù),主設(shè)備對(duì)收到的每個(gè)字節(jié)都進(jìn)行應(yīng)答,當(dāng)收到最后 一字節(jié)數(shù)據(jù)后,主設(shè)備不做應(yīng)答,向總線發(fā)送一個(gè)非應(yīng)答 信號(hào),然后向總線發(fā)出停止信號(hào)。 圖9-25 I2C讀數(shù)據(jù)時(shí)序圖 10.4.2 串行程序存儲(chǔ)器擴(kuò)展舉例 典型的MCS-51并不包含專用的I2C接口,但可以通 過(guò)并行口線模擬,方便地?cái)U(kuò)展支持I2C總線的程序存 儲(chǔ)器。常見(jiàn)的支持I2C總線的程序存儲(chǔ)器有ATMEL 公司的AT24XX系列E2PROM和RAMTRON公司的 FM24XX系列FRAM等。由于均采用了I2C總

25、線標(biāo)準(zhǔn), 無(wú)論采用哪種類型的芯片作為程序存儲(chǔ)器,擴(kuò)展方法 均無(wú)太大區(qū)別。 圖10-26為MCS-51擴(kuò)展AT24C02 E2PROM的參考硬件電路。 圖10-26 MCS-51擴(kuò)展AT24C02 E2PROM硬件電路圖 WPWP為寫(xiě)數(shù)據(jù)保護(hù)腳,當(dāng)該引腳為高電平時(shí),為寫(xiě)數(shù)據(jù)保護(hù)腳,當(dāng)該引腳為高電平時(shí),EEPROMEEPROM處于寫(xiě)處于寫(xiě) 保護(hù)模式,該模式下數(shù)據(jù)只能從保護(hù)模式,該模式下數(shù)據(jù)只能從EEPROMEEPROM內(nèi)讀出,寫(xiě)入無(wú)效;內(nèi)讀出,寫(xiě)入無(wú)效; 在電路中,在電路中,WPWP接地,表示單片機(jī)可對(duì)接地,表示單片機(jī)可對(duì)EEPROMEEPROM進(jìn)行讀寫(xiě)操作進(jìn)行讀寫(xiě)操作。 A0A0、A1A1、A2

26、A2三個(gè)管腳共同構(gòu)成三個(gè)管腳共同構(gòu)成EEPROMEEPROM的地址選通線,通過(guò)的地址選通線,通過(guò) 這三個(gè)引腳不同的電平組合可以構(gòu)成八個(gè)不同的從設(shè)備地址這三個(gè)引腳不同的電平組合可以構(gòu)成八個(gè)不同的從設(shè)備地址 SDASDA為串行數(shù)據(jù)線(為串行數(shù)據(jù)線(Serial Data LineSerial Data Line) SCL SCL為串行時(shí)鐘線(為串行時(shí)鐘線(Serial ClockSerial Clock) VCC VCC接電源正極;接電源正極; GND GND接地接地 1 1AT24C02AT24C02芯片及連線說(shuō)明芯片及連線說(shuō)明 2 2擴(kuò)展擴(kuò)展ROMROM地址確定地址確定 A0、A1、A2三個(gè)管

27、腳共同構(gòu)成EEPROM的地址選 通線,通過(guò)這三個(gè)引腳不同的電平組合可以構(gòu)成八個(gè) 不同的從設(shè)備地址,如表9-6所示,在通信時(shí),作為 主設(shè)備的單片機(jī)通過(guò)控制字節(jié)中的相應(yīng)位來(lái)選通對(duì)應(yīng) 地址的EEPROM芯片進(jìn)行通信。也就是說(shuō),在I2C 總線上,最多可擴(kuò)展8片AT24C02。 3. 3. 內(nèi)部地址結(jié)構(gòu)內(nèi)部地址結(jié)構(gòu) AT24C02內(nèi)部分為32頁(yè),每頁(yè)有8字節(jié),由此構(gòu)成32 (頁(yè))8(字節(jié))8(位)=2048位的存儲(chǔ)空間。作 為主設(shè)備的單片機(jī)對(duì)從設(shè)備AT24C02的寫(xiě)操作,可以 按字節(jié)寫(xiě)入也可以按頁(yè)面寫(xiě)入。而對(duì)于讀操作,除了由 當(dāng)前單元地址讀取和按頁(yè)面讀取外,還可以由指定隨機(jī) 地址讀取數(shù)據(jù),在隨機(jī)地址讀取

28、操作中,單片機(jī)先向總 線發(fā)送包含AT24C02從設(shè)備地址的控制字,確認(rèn) AT24C02應(yīng)答后,再進(jìn)行一次寫(xiě)操作,將要讀取的8位 單元地址發(fā)送給AT24C02。第二次收到應(yīng)答后,單片 機(jī)才開(kāi)始由AT24C02中被指定的單元讀出數(shù)據(jù)。 4. 4. 編程應(yīng)用編程應(yīng)用 【例10-6】單片機(jī)從AT24C02將地址為10H17H的8個(gè) 單元的內(nèi)容讀出,各字節(jié)數(shù)據(jù)加1后再寫(xiě)入AT24C02的原 地址。 ; _PROM_ I2CASM.ASM I2C EEPROM 讀寫(xiě)程序示例 ; 晶振頻率 12MHz ;不同頻率工作的單片機(jī)可調(diào)整NOP指令的數(shù)量來(lái)改變延時(shí) ;時(shí)間 ;-定義位變量- SCL BIT P1.2

29、 ;定義P1.2為SDA SDA BIT P1.3 ;定義P1.3為SCL ACK BIT F0 ;定義F0為ACK應(yīng)答標(biāo)志位 參考匯編程序 ;-定義字節(jié)變量- BTD EQU 30H ;定義發(fā)送數(shù)據(jù)緩沖區(qū) ;(30H3FH)首地址 BRD EQU 40H ;定義接收數(shù)據(jù)緩沖區(qū) ;(40H4FH)首地址 SLA EQU 10100000B ;設(shè)備控制字(設(shè)備類型+ ;從設(shè)備地址+讀寫(xiě)位) SUBA DATA 50H ;ROM 單元地址 ;存放在 50H RAM單元 BYTNUM DATA 51H ;要發(fā)送的字節(jié)數(shù) ;存放在 51H RAM單元 ORG 0000H AJMP MAIN ;轉(zhuǎn)入執(zhí)行

30、主程序 ;- ;主程序 ORG 0040H MAIN: MOV SP,#60H ;更改堆棧區(qū) MOV SUBA,#10H ;AT24C02的單元地址送 SUBA MOV BYTNUM,#08H ;字節(jié)數(shù)賦給BYTNUM MOV R0,#30H ;緩沖區(qū)首地址賦值,默認(rèn)使用第0 組工作寄存器 MOV R1,#40H ; SETB SDA ;總線初始化 SETB SCL LCALL DELAY LCALL RDNBYTE ;從AT24C02中連續(xù)讀出SUBA 為首地址的8字節(jié)數(shù)據(jù) MOV R4,BYTNUM ;字節(jié)數(shù)暫存于R4,用于定循環(huán)次 數(shù) NUMINC:MOV A,R1 ;將讀出的數(shù)據(jù)送AC

31、C INC A ;(ACC)=(ACC)+1 MOV R0,A ;結(jié)果保存至發(fā)送緩沖區(qū) DJNZ R4,NUMINC ;全部字節(jié)未處理完畢則繼續(xù)下 一字節(jié) LCALL DELAY ;延時(shí) LCALL WRNBYTE ;將發(fā)送緩沖區(qū)的8字節(jié)數(shù)據(jù)寫(xiě)入 AT24C02 SJMP $ ;結(jié)束,原地循環(huán) ;-下列為I2C總線讀寫(xiě)控制子程序- ;START - 發(fā)送啟動(dòng)信號(hào) ;STOP - 發(fā)送結(jié)束信號(hào) ;MACK - 發(fā)送應(yīng)答信號(hào) ;MNOACK - 發(fā)送非應(yīng)答信號(hào) ;WR1BYTE - 寫(xiě)一字節(jié)數(shù)據(jù) ;RD1BYTE - 讀一字節(jié)數(shù)據(jù) ;WRNBYTE - 寫(xiě)n字節(jié)數(shù)據(jù) ;RDNBYTE - 讀n字節(jié)

32、數(shù)據(jù) ;CWRBYTE - 設(shè)備當(dāng)前地址寫(xiě)字節(jié) ;CRDBYTE - 設(shè)備當(dāng)前地址讀字節(jié) ;DELAY - 延時(shí) ;- ;向總線發(fā)送啟動(dòng)信號(hào)子程序 START: SETB SDA ;SDA引腳置高電平 SETB SCL ;SCL引腳置高電平 ACALL DELAY47 ;延時(shí)4.7us以上 CLR SDA ;SDA引腳置低電平 ACALL DELAY4 ;延時(shí)4us以上 CLR SCL ;SCL引腳置低電平 NOP RET ;返回 ;向總線發(fā)送結(jié)束信號(hào)子程序 STOP: CLR SDA ;SDA引腳置低電平 SETB SCL ;SCL引腳置高電平 ACALL DELAY47 ;延時(shí)4.7us以

33、上 SETB SDA ;SDA引腳置高電平 ACALL DELAY47 ;延時(shí)4.7us以上 CLR SCL ;SCL引腳置低電平 NOP RET ;返回 ;發(fā)送應(yīng)答信號(hào)子程序 MACK: CLR SDA ;SDA引腳置低電平 SETB SCL ;SCL引腳置高電平 ACALL DELAY47;延時(shí)4.7us以上 CLR SCL ;SCL引腳置低電平 NOP SETB SDA ;SDA引腳置高電平 RET ;返回 ;發(fā)送非應(yīng)答信號(hào)子程序 MNOACK:SETB SDA ;SDA引腳置高電平 SETB SCL ;SCL引腳置高電平 ACALL DELAY47;延時(shí)4.7us以上 CLR SCL

34、;SCL引腳置低電平 NOP CLR SDA ;SDA引腳置低電平 RET ;返回 ;應(yīng)答位檢測(cè)子程序(ACK=0 無(wú)應(yīng)答;ACK=1 收到應(yīng)答) CHKACK:SETB SDA ;SDA引腳置高電平 SETB SCL ;SCL引腳置高電平 CLR ACK ;應(yīng)答標(biāo)志位清零 NOP ;延時(shí) NOP JNB SDA,CHKEND ;如果SDA電平無(wú)變化,說(shuō)明沒(méi) ;收到應(yīng)答信號(hào)結(jié)束檢查 SETB ACK ;SDA電平被拉低,則應(yīng)答標(biāo)志位置1 CHKEND:NOP CLR SCL ;SCL引腳置低電平 ACALL DELAY4 ;延時(shí) RET ;返回 ;寫(xiě)一字節(jié)數(shù)據(jù)子函數(shù) WR1BYTE:MOV R

35、0,#08H ;8位數(shù)據(jù),分8次送總線 WLP: RLC A ;將數(shù)據(jù)最高位放入C MOV SDA,C ;將位數(shù)據(jù)送至SDA SETB SCL ;SCL置1 ACALL DELAY47;延時(shí)4.7us以上 CLR SCL ;SCL置0 DJNZ R0,WLP ;8位數(shù)據(jù)未送完繼續(xù)下一位 NOP ;8位數(shù)據(jù)全部送完,則返回 RET ;寫(xiě)數(shù)據(jù)到當(dāng)前地址子函數(shù) CWRBYTE: PUSH ACC ;ACC值暫存至堆棧區(qū) CWRLOOP: LCALL ;發(fā)送啟動(dòng)信號(hào) MOV A,SLA ;讀入當(dāng)前設(shè)備地址 LCALL WR1BYTE ;寫(xiě)1字節(jié)控制指令 LCALL CHKACK ;檢查從設(shè)備是否應(yīng)答

36、JNB ACK,RETCWR ;如果沒(méi)應(yīng)答則返回主程序 POP ACC ;如果收到應(yīng)答,恢復(fù)ACC值 LCALL WR1BYTE ;將ACC的內(nèi)容寫(xiě)入從設(shè)備 LCALL CHKACK ;檢查從設(shè)備是否應(yīng)答 LCALL STOP ;發(fā)送結(jié)束信號(hào) RET ;返回主程序 RETCWR: POP ACC ;恢復(fù)ACC的值 LCALL STOP ;發(fā)送結(jié)束信號(hào) RET ;返回 ;寫(xiě)N字節(jié)數(shù)據(jù)子函數(shù) WRNBYTE: PUSH PS ;將PSW內(nèi)容推棧保存 SETB PSW.4 ;選用第3組工作寄存器 ;(18H1FH) SETB PSW.3 MOV R3,BYTNUM ;R3用于字節(jié)數(shù)控制 LCALL

37、START ;發(fā)送啟動(dòng)信號(hào) MOV A,SLA ;控制字送累加器 LCALL WR1BYTE ;寫(xiě)控制字節(jié) LCALL CHKACK ;檢查有無(wú)應(yīng)答 JNB ACK,RETWRN ;如果從設(shè)備無(wú)應(yīng)答 ;跳轉(zhuǎn)至RETWRN返回 MOV A,SUBA ;收到應(yīng)答信號(hào),讀入目標(biāo)單元地址 LCALL WR1BYTE ;發(fā)送訪問(wèn)目標(biāo)單元地址 LCALL CHKACK ;檢查有無(wú)應(yīng)答 MOV R1,#BTD ;將發(fā)送緩沖區(qū)首地址送R1 WRDA: MOV A,R1 ;將緩沖區(qū)數(shù)據(jù)送累加器ACC LCALL WR1BYTE ;向總線寫(xiě)一字節(jié)數(shù)據(jù) LCALL CHKACK ;檢測(cè)應(yīng)答信號(hào) JNB ACK,WR

38、NBYTE ;無(wú)應(yīng)答則重新發(fā)送 INC R1 ;收到應(yīng)答,表示一字節(jié)數(shù)據(jù) ;已送至從設(shè)備,繼續(xù)下一字節(jié) DJNZ R3,WRDA ;未送完所有字節(jié)則繼續(xù) RETWRN: LCALL STOP ;所有字節(jié)數(shù)據(jù)發(fā)送完畢, ;發(fā)送停止信號(hào) POP PSW ;恢復(fù)PSW內(nèi)容(切換當(dāng)前工作寄存器組) RET ;返回 ;讀一字節(jié)數(shù)據(jù)子函數(shù) RD1BYTE:MOV R0,#08H ;8位數(shù)據(jù),分8次讀取 RLP: SETB SDA ;SDA置高電平 SETB SCL ;SCL置高電平 NOP ;延時(shí) NOP MOV C, SDA ;從SDA線上讀入位數(shù)據(jù) MOV A, R2 ;將上一次保存的中間結(jié)果恢復(fù)至

39、ACC CLR SCL ;SCL置低電平 RLC A ;將數(shù)據(jù)位存入ACC MOV R2,A ;中間結(jié)果保存至R2 ACALL DELAY4 ;延時(shí)4us以上 DJNZ R0,RLP ;8位未讀取完畢則繼續(xù)讀下一位 NOP RET ;8位讀取完畢返回,讀入的1字節(jié) ;數(shù)據(jù)保存在R2內(nèi)。 ;由當(dāng)前地址讀數(shù)據(jù)子函數(shù) CRDBYTE: LCALL START ;發(fā)送啟動(dòng)信號(hào) MOV A,SLA ;控制字送ACC INC A ;R/W位置1 LCALL WR1BYTE ;向AT24C02送控制字 LCALL CHKACK ;檢查AT24C02是否應(yīng)答 JNB ACK,RETCRD ;如無(wú)應(yīng)答,返回 L

40、CALL RD1BYTE ;收到應(yīng)答,讀取一字節(jié)數(shù)據(jù) LCALL MNOACK ;發(fā)送非應(yīng)答信號(hào) RETCRD: LCALL STOP ;發(fā)送結(jié)束信號(hào) RET ;返回 ;讀N字節(jié)數(shù)據(jù)子函數(shù) RDNBYTE: PUSH PSW ;將PSW內(nèi)容推棧保 存 SETB PSW.4 ;選用第3組工作寄存器 SETB PSW.3 MOV R3,BYTNUM ;R3用于字節(jié)數(shù)控制 LCALL START ;發(fā)送啟動(dòng)信號(hào) MOV A,SLA ;控制字送ACC LCALL WR1BYTE ;寫(xiě)控制字 LCALL CHKACK ;檢查AT24C02有無(wú)應(yīng)答 JNB ACK,RETRDN ;如果無(wú)應(yīng)答,返回 MOV

41、 A,SUBA ;起始單元地址送ACC LCALL WR1BYTE ;發(fā)送單元地址 LCALL CHKACK ;檢查AT24C02有無(wú)應(yīng)答 JNB ACK,RETRDN ;如果無(wú)應(yīng)答,返回 LCALL START ;重新發(fā)送啟動(dòng)信號(hào) MOV A,SLA ;控制字送ACC INC A ;設(shè)置為讀方式,R/W=1 LCALL WR1BYTE ;發(fā)送控制字 LCALL CHKACK ;檢查AT24C02是否應(yīng)答 JNB ACK,RDNBYTE ;如無(wú)應(yīng)答,嘗試重新連接 MOV R1,#BRD ;將接收緩沖區(qū)首地址送R1 RDN1: LCALL RD1BYTE ;讀取一字節(jié)數(shù)據(jù) MOV R1,A ;接

42、收到的數(shù)據(jù)放進(jìn)緩沖區(qū) DJNZ R3,SACK ;未讀取完所有字節(jié),繼續(xù)讀下一字節(jié) LCALL MNOACK ;所有字節(jié)讀取完成,發(fā)送非應(yīng)答信號(hào) RETRDN: LCALL STOP ;發(fā)送停止信號(hào) POP PSW ;恢復(fù)寄存器組標(biāo)志 RET ;返回 SACK: LCALL MACK ;發(fā)送應(yīng)答信號(hào) INC R1 ;指向緩沖區(qū)下一地址內(nèi)容 SJMP RDN1 ;繼續(xù)讀下一字節(jié)讀取 ;延時(shí)子函數(shù) DELAY47: NOP ;延時(shí)時(shí)間4.7uS NOP NOP NOP RET ;- DELAY4: NOP ;延時(shí)時(shí)間4uS NOP NOP RET ;- DELAY: MOV R7,#04H ;延時(shí)

43、約4ms DEL1: MOV R6,#0FFH DEL2: NOP NOP DJNZ R6,DEL2 DJNZ R7,DEL1 RET ;返回 END 10.75Proteus 10.75Proteus 仿真實(shí)例仿真實(shí)例 【例10-9】通過(guò)80C51單片機(jī)對(duì)AT24C02進(jìn)行讀寫(xiě)操作, 當(dāng)寫(xiě)按鈕按下時(shí),將外部8位數(shù)字量寫(xiě)入AT24C02中;當(dāng) 讀按鈕按下時(shí),從AT24C02內(nèi)將該數(shù)字量讀取出來(lái),并 送LED顯示。其中外部8位數(shù)字量由8位撥碼開(kāi)關(guān)控制其 各位的數(shù)值。 圖10-28 Proteus仿真電路AT24C02讀寫(xiě) 參考C程序 #include /包含頭文件 #include #inclu

44、de #include #define uchar unsigned char #define uint unsigned int #define DELAY_TIME 60 /定義常量 #define TRUE 1 #define FALSE 0 sbit SCL=P10; /用P1.0、P1.1 模擬I2C 總線 sbit SDA=P11; sbit SDAT=P12; /用P1.2、P1.3 模擬串口 sbit SCLK=P13; sbit PSB=P14; /P1.4用于控制4014的P/S端 sbit LED0=P15; /P1.5,P1.6用作LED數(shù)碼管的線選信號(hào) sbit LE

45、D1=P16; sbit STB=P17; /P1.7與4094 STB引腳相連 sbit LEDDAT=P30; /單片機(jī)的串口用于擴(kuò)展靜態(tài)LED顯示 sbit CLK=P31; sbit A0=ACC0; /定義A0為累加器的最低位 uchar LED_SEG17=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 x88, 0 x83,0 xc6,0 xa1,0 x86,0 x8e,0 xff ;/字段碼表:字符0F,滅燈 /*輸入模塊子程序*/ uchar pdat_in() uchar counter; uchar data_buf; counter=8; do A

溫馨提示

  • 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)論