王九龍 鄭貴金
(綏化學(xué)院電氣工程學(xué)院 黑龍江綏化 152061)
基于proteus的C51單片機I2C總線的實現(xiàn)
王九龍 鄭貴金
(綏化學(xué)院電氣工程學(xué)院 黑龍江綏化 152061)
I2C總線是由Philips公司設(shè)計的一款具有兩根接口的總線,其中一個接口為SCL,為時鐘信號,另一個接口為SDA,是數(shù)據(jù)信號,這種總線具有很多有優(yōu)點,如:接口線的數(shù)量少,通信速度比較快等。由于80C51系列單片機并沒有配置I2C總線接口,給I2C總線的使用帶來了不便。文章分別通過C語言與匯編語言分別對I2C時序進行編程,模擬了I2C總線在芯片間的通信。并在proteus軟件上進行了讀寫仿真驗證。
I2C 總線;proteus;數(shù)據(jù)傳輸;AT24C04
I2C總線是能夠自動找尋從器件的地址、使得較高速率設(shè)備與較低速率的設(shè)備之間實現(xiàn)同步傳輸和優(yōu)化的挑選需要的從器件進行高性能數(shù)據(jù)傳送的總線。這種總線是以串行的方式在主期間與從器件之間進行數(shù)據(jù)傳送的。I2C總線有兩根可以進行雙向數(shù)據(jù)傳送的端口,一個端口是SDA,另一個端口是SCL[1-2]。其中,SCL負責時鐘信號的輸入,用來控制數(shù)據(jù)雙向傳送的時間順序,SDA負責數(shù)據(jù)的串行輸入,互相連接設(shè)備的所有數(shù)據(jù)端口均懸掛在此線上。圖1為所示I2C的架構(gòu)。
圖1 I2C總線的架構(gòu)
(一)I2C總線的典型信號及實現(xiàn)。I2C總線的數(shù)據(jù)傳輸有嚴格的時序要求,但主要包括以下四種典型信號:1)起始信號 S,2)終止信號 P,3)發(fā)送應(yīng)答信號(0),4)發(fā)送非應(yīng)答信號(1)[3-4]。如圖2所示。
圖2 起始信號、終止信號、發(fā)送應(yīng)答信號、發(fā)送非應(yīng)答信號時序
1.起始信號S。起始信號是用來啟動該總線的,為了保證起始信號有效,需要嚴格按照圖2所示的時間順序進行,其中兩種信號的持續(xù)時間,均不能低于圖中所標示的時間。實現(xiàn)程序如下:
2.終止信號P。終止信號是用來釋放該總線的,為了保證終止信號有效,需要嚴格按照圖2所示的時間順序進行,其中兩種信號的持續(xù)時間,均不能低于圖中所標示的時間。實現(xiàn)程序如下:
3.發(fā)送應(yīng)答信號(0)。從器件通過接受應(yīng)答信號通知主器件,一個字節(jié)的數(shù)據(jù)已被成功接受。只有嚴格按照圖中所標示的時間順序進行且兩種信號的持續(xù)時間均不低于所標注的時間,發(fā)送應(yīng)答信號才有效。實現(xiàn)程序如下:
4.發(fā)送非應(yīng)答信號(1)。從器件通過接受非應(yīng)答信號通知主器件,一個字節(jié)的數(shù)據(jù)接受失敗。只有嚴格按照圖中所標示的時間順序進行且兩種信號的持續(xù)時間均不低于所標注的時間,發(fā)送非應(yīng)答信號才有效。實現(xiàn)程序如下:
(二)I2C總線的讀寫傳輸格式。
1.主機的寫操作格式。首先,主機會先發(fā)出起始信號S,從而使得I2C總線啟動;之后進行從器件的選擇,會下發(fā)一個控制字節(jié);剛才被選中的從器件在進行確認地址后,會在SDA線上發(fā)送一個應(yīng)答信號,以回復(fù)主器件。主機接收到應(yīng)答信號后開始數(shù)據(jù)傳送。傳送數(shù)據(jù)開始后,主機發(fā)送一個字節(jié)內(nèi)容以確認寫入地址,當主機接收到從器件發(fā)送回來的應(yīng)答信號之后,主機開始一個個發(fā)送需要傳送的字節(jié)的每一位(從高位到低位)。每完成一個數(shù)據(jù)需等待一個回答。當主機發(fā)送了P信號后,總線的控制權(quán)將被交出,終止操作[5]。如圖3。
圖3 主機寫操作格式
2.主機的讀操作格式。對從機進行讀出時,主機須先發(fā)送一個對該從器件的控制字節(jié)即“偽寫”。偽寫的目的是選擇讀出從器件,從器件確認是自己的地址后,在總線上產(chǎn)生一個應(yīng)答信號作為響應(yīng)。隨后,主機發(fā)送一個字節(jié)數(shù)據(jù)以確定讀出首地址,主機收到從器件的應(yīng)答信號后,重復(fù)一次起始信號,并將數(shù)據(jù)傳送方向確定為“讀出”。收到應(yīng)答信號后開始讀取各字節(jié)。每讀取一個字節(jié),主機都要回復(fù)應(yīng)答信號。直到所有的數(shù)據(jù)讀取完后,主機將返回一個“非應(yīng)答信號(0)”,以通知從器件所有的數(shù)據(jù)均以讀取完畢,隨后,主機將會發(fā)出一個P信號,總線的控制權(quán)將被交出,結(jié)束操作[6]。如圖4。
圖4 主機讀操作格式
為了模擬I2C總線在89C51系列單片機背景下芯片間的通信。本文在proteus上搭建了AT89C51單片機與AT24C04C的通信模型[7]。AT24C04 E2PROM是典型的I2C總線接口器件,容量為512B[8-9]。仿真電路模型如圖5所示。
圖5 AT89C51與AT24C04C通信仿真電路
仿真電路包含復(fù)位電路、晶振電路、I2C通訊部分電路與輸出電路四部分。利用P1.4口輸出SCL時鐘信號,利用P1.5口輸出SDA數(shù)據(jù)信號[10-11]。
在上文給出的通信仿真電路上,模擬AT89C51與AT24C04C通信[12-13]。
(一)模擬AT89C51單片機向AT24C04C內(nèi)寫入數(shù)據(jù)。通過控制SCL時鐘線與SDA信號線,預(yù)將16個十六進制數(shù)分別寫入AT24C04C的0x00~0x0f單元中。對應(yīng)單元的內(nèi)容見表1。
表1 16個單元內(nèi)的16個數(shù)據(jù)對照表
仿真運行后,AT24C04C0x00~0x0f單元的數(shù)據(jù)見圖6。
圖6 仿真后AT24C04C中0x00~0x0f單元的數(shù)據(jù)
由此可見,AT24C04C的0x00~0x0f單元內(nèi)的數(shù)據(jù)與預(yù)寫入數(shù)據(jù)內(nèi)容一致,AT89C51單片機向AT24C04C內(nèi)寫入數(shù)據(jù)仿真成功。
(二)模擬AT89C51單片機從AT24C04C內(nèi)讀出數(shù)據(jù)。將剛剛寫入的16個數(shù)據(jù)從AT24C04C內(nèi)部讀入89C51單片機[14],并由P2.0口輸出,驅(qū)動共陽極的8個LED等閃爍,根據(jù)讀出數(shù)據(jù)可知,將產(chǎn)生流水燈的效果。P2口的字節(jié)地址為0xa0,當然,也可從C51的特殊功能寄存器(SFR)內(nèi)讀該數(shù)據(jù)。如圖7、如圖8所示。
圖7 P2口輸出0x04時,對應(yīng)的仿真現(xiàn)象
圖8 89C51單片機SFR的0xa0中同一時刻數(shù)據(jù)
經(jīng)過仿真驗證,89C51單片機所讀數(shù)據(jù)與所寫數(shù)據(jù)一致,AT89C51單片機向AT24C04C內(nèi)讀出數(shù)據(jù)仿真成功。
本文通過proteus搭建了AT89C51單片機與AT24C04C芯片進行I2C通信的仿真電路,經(jīng)proteus仿真通信模型驗證后,表明數(shù)據(jù)的寫入與讀取均能順利完成。在C51系列單片機沒有I2C總線的情況下,成功模擬出I2C總線在芯片間的通信。并使用C語言與匯編語言編寫出I2C的4種典型時序及其數(shù)據(jù)的讀寫格式。經(jīng)驗證,程序簡潔有效。
[1]李全利.單片機原理及接口技術(shù)[M].北京:高等教育出版社,2009.
[2]李朝青.單片機原理及接口技術(shù)[M].北京:北京航空航天大學(xué)出版社,2005.
[3]馬忠梅,等.單片機的C語言應(yīng)用程序設(shè)計[M].北京:北京航空航天大學(xué)出版社,2007.
[4]伍馮潔.Proteus虛擬仿真技術(shù)在I2C總線通信中的應(yīng)用[J].太赫茲科學(xué)與電子信息學(xué)報,2015(4):675-678.
[5]黃鑫,王玉林,謝靜.基于I2C總線的單片機系統(tǒng)設(shè)計與虛擬仿真[J].儀器儀表用戶,2010(4):44-46.
[6]劉文光,張銘銘.51單片機I2C總線接口仿真研究[J].電子制作,2012(10):1-2.
[7]張遠輝,張鼎,許昌,等.基于Proteus的XY數(shù)控工作臺仿真模型設(shè)計[J].實驗技術(shù)與管理,2015(3):133-136.
[8]趙輝,董德存.I2C總線技術(shù)及其應(yīng)用實例[J].微型電腦應(yīng)用,2005(4):61-63+66.
[9]石宗義.I2C總線時序分析及其模擬[J].太原理工大學(xué)學(xué)報,2004(1):53-56.
[10]劉心紅,郭福田,孫振興,等.Proteus仿真技術(shù)在單片機教學(xué)中的應(yīng)用[J].實驗技術(shù)與管理,2007(3):96-98+102.
[11]汪寧.Proteus軟件的單片機仿真方法[J].山東輕工業(yè)學(xué)院學(xué)報(自然科學(xué)版),2007(1):24-27.
[12]周靈彬,張靖武.PROTEUS的單片機教學(xué)與應(yīng)用仿真[J].單片機與嵌入式系統(tǒng)應(yīng)用,2008(1):76-79.
[13]葉建波,朱雙東.基于Proteus的單片機電路的虛擬仿真[J].電子工程師,2008(11):23-24+67.
[14]陳知紅,王錦蘭.Proteus仿真軟件在電工學(xué)中的應(yīng)用[J].實驗技術(shù)與管理,2014(2):93-95+128.
[責任編輯 鄭麗娟]
TP273
A
2095-0438(2017)08-0151-05
2017-02-02
王九龍(1988-),男,陜西寶雞人,綏化學(xué)院電氣工程學(xué)院助教,碩士,研究方向:嵌入式開發(fā)設(shè)計。