8051單片機(jī)的I2C接口并行擴(kuò)展
1 引 言
本文引用地址:http://www.ex-cimer.com/article/171690.htmI2C總線(xiàn)接口器件在視頻處理、移動(dòng)通信等領(lǐng)域的應(yīng)用已經(jīng)非常普遍。另外,通用的I2C總線(xiàn)接口器件,如帶I2C總線(xiàn)的RAM,ROM,A/D,D/A,LCD驅(qū)動(dòng)器等,也越來(lái)越多地應(yīng)用于計(jì)算機(jī)及自動(dòng)控制系統(tǒng)中。隨著I2C接口器件越來(lái)越廣泛的應(yīng)用,8051系列單片機(jī)與他之間的通信越來(lái)越頻繁。
8051系列單片機(jī)與I2C總線(xiàn)接口器件通信時(shí),8051的通用口與I2C總線(xiàn)器件的SCL,SDA連接。根據(jù)I2C 總線(xiàn)數(shù)據(jù)傳輸協(xié)議,8051必須對(duì)其兩個(gè)通用口進(jìn)行頻繁的置位、清零。根據(jù)基于51指令系統(tǒng)編制的匯編程序,傳送一位數(shù)據(jù),需要9個(gè)機(jī)器周期,而對(duì)于 8051,一個(gè)機(jī)器周期要耗費(fèi)6個(gè)時(shí)鐘周期,即用54個(gè)時(shí)鐘周期才能傳送一位數(shù)據(jù)。如此則極大地占用了CPU的工作時(shí)間,降低了系統(tǒng)的工作效率,導(dǎo)致I2C器件的優(yōu)勢(shì)難以顯現(xiàn)。因此,有必要設(shè)計(jì)8051與I2C總線(xiàn)的專(zhuān)用接口電路。該接口電路能夠?qū)2C總線(xiàn)上的數(shù)據(jù)進(jìn)行自動(dòng)收發(fā),而CPU只需要通過(guò)并口訪(fǎng)問(wèn)該接口電路中的有關(guān)寄存器就可以實(shí)現(xiàn)與I2C器件的數(shù)據(jù)交換,從而使整個(gè)系統(tǒng)的性能得到提高。本設(shè)計(jì)用VHDL硬件描述語(yǔ)言為工具,用ALTERA公司的 MAXPLUSⅡ軟件進(jìn)行編譯仿真,下載芯片為EPM7128SLC84-15。
2 設(shè)計(jì)目標(biāo)和要求
為了提高數(shù)據(jù)傳送的速度,設(shè)計(jì)一個(gè)I2C接口電路。8051不直接與I2C器件交換數(shù)據(jù),而是通過(guò)并口與該I2C接口電路交換數(shù)據(jù),I2C總線(xiàn)上的數(shù)據(jù)傳送也通過(guò)該I2C接口電路來(lái)完成。從而通過(guò)CPU的外部存儲(chǔ)器讀寫(xiě)指令就可實(shí)現(xiàn)與I2C器件的數(shù)據(jù)交換,使對(duì)串口的操作用并口的方式來(lái)實(shí)現(xiàn)。
在I2C接口電路內(nèi)部有一個(gè)控制寄存器CI0和一個(gè)數(shù)據(jù)寄存器CI1,即I2C接口電路占用兩個(gè)地址。通過(guò)寫(xiě)控制寄存器CI0的內(nèi)容實(shí)現(xiàn)對(duì)I2C接口電路的編程,讀寫(xiě)數(shù)據(jù)寄存器CI1的內(nèi)容實(shí)現(xiàn)與I2C器件的數(shù)據(jù)交換。在CI0中的內(nèi)容定義了8051對(duì)I2C器件進(jìn)行操作的類(lèi)型(讀或?qū)?和I2C器件內(nèi)地址的字節(jié)數(shù)等信息,使I2C接口電路能夠識(shí)別從8051傳來(lái)的數(shù)據(jù)是地址還是數(shù)據(jù)、8051將要發(fā)送數(shù)據(jù)還是接收數(shù)據(jù)以及數(shù)據(jù)的長(zhǎng)度等。
如果8051要發(fā)送數(shù)據(jù)給I2C器件,則根據(jù)I2C總線(xiàn)協(xié)議,在數(shù)據(jù)CI1接收到第一個(gè)數(shù)據(jù)后啟動(dòng)I2C總線(xiàn),然后將CI1中的數(shù)據(jù)進(jìn)行并串轉(zhuǎn)換后逐位發(fā)出,發(fā)出完畢后設(shè)置一個(gè)標(biāo)志位,使8051知道可以發(fā)送下一個(gè)總線(xiàn)后首先寫(xiě)I2C器件內(nèi)地址,然后進(jìn)行數(shù)據(jù)接收,進(jìn)行串并轉(zhuǎn)換后將接收到的數(shù)據(jù)裝入CI1中,再設(shè)置標(biāo)志位,使8051知道可以讀出數(shù)據(jù)。
根據(jù)上述設(shè)計(jì)要求,I2C接口芯片的引腳如圖1所示。其中clk可以使用獨(dú)立的時(shí)鐘,使I2C總線(xiàn)的位傳送速度遠(yuǎn)高于8051的位操作,從而可使I2C總線(xiàn)的數(shù)據(jù)傳送接近并口的數(shù)據(jù)速率;a0是地址信號(hào)輸入,a0=0時(shí)進(jìn)行CI0寫(xiě)操作,當(dāng)a0=1時(shí)進(jìn)行CI1讀/寫(xiě)操作;bz為標(biāo)志輸出位,bz=0時(shí),8051需要等待,bz=1時(shí)8051可以對(duì)CI1操作。
I2C接口芯片在系統(tǒng)中的情況如圖2所示。這里8051對(duì)I2C接口芯片操作使用了查詢(xún)方式,也可以改用中斷方式。
3 并行接口設(shè)計(jì)的實(shí)現(xiàn)
3.1 接口設(shè)計(jì)的內(nèi)部結(jié)構(gòu)
該芯片的內(nèi)部結(jié)構(gòu)圖如圖3所示。系統(tǒng)由控制寄存器CI0,數(shù)據(jù)寄存器CI1,并串轉(zhuǎn)換,串并轉(zhuǎn)換,移位寄存器以及I2C控制模塊6部分構(gòu)成。
評(píng)論