基于Keil C的AT24C02串行E2PROM的編程
3。2。2AT24C02頁寫操作
AT24C02允許每次寫入8個字節(jié)的頁寫操作模式,頁寫操作和字節(jié)寫操作的時序差不多都相同,不同的是在于傳送了一字節(jié)數(shù)據(jù)后并不產(chǎn)生停止信號,主機被允許再發(fā)送7個額外的字節(jié)。每發(fā)送一個字節(jié)數(shù)據(jù)后,AT24C02產(chǎn)生一個應(yīng)答位。如果在發(fā)送停止信號之前,主機發(fā)送超過8個字節(jié),AT24C02內(nèi)部地址計數(shù)器將自動翻轉(zhuǎn),先前寫入的數(shù)據(jù)被覆蓋。接收主機發(fā)送的停止信號后,AT24C02啟動內(nèi)部寫周期將數(shù)據(jù)寫到數(shù)據(jù)區(qū)。因此,可以編寫一個頁寫操作的函數(shù)如下:
3。3讀操作
AT24C02的讀操作主要有立即地址讀取、隨機地址讀取和順序地址存取3種。立即地址讀取方式由一個空字節(jié)序列來加載數(shù)據(jù)地址,當從機尋址碼和數(shù)據(jù)尋址碼隨鐘輸入,并被確認時,從機必須產(chǎn)生另一個開始狀態(tài),通過發(fā)出一個確認讀取的信號之后,數(shù)據(jù)便隨時鐘串行輸出,數(shù)據(jù)的讀取不通過確認狀態(tài)應(yīng)答,而是通過一個停止狀態(tài)來應(yīng)答。其他兩種方式基本類似,只是不需要產(chǎn)生另一個開始狀態(tài),而順序地址讀取時,讀出的是連續(xù)數(shù)據(jù)。讀操作的時序圖類似于圖4的寫操作時序,因此可編出讀一個字節(jié)的函數(shù)RlByte如下:
當然,對于AT2402的讀取往往不是只一個字節(jié),更多的時候還是想一連幾個字節(jié)一起讀取,因此,可編出連續(xù)讀取N個字節(jié)的函數(shù)如下:
4綜合應(yīng)用舉例
以圖6所示硬件電路為例,調(diào)用上面所編寫的函數(shù),將數(shù)據(jù)00H~07H送到AT24C02內(nèi)部首地址為10H的地方存放,并將AT24C02內(nèi)部以20H為首地址的連續(xù)8個字讀到AT89C51的內(nèi)部RAM20H~27H存放。其主程序如下:
其實,AT24CXX系列的E2PROM芯片很多,但其編程不盡相同。由于C語言的編程要精準控制時間很不容易,因此往往有些工程人員碰到類似的I2C硬件結(jié)構(gòu),大多采用C語言與匯編語言混合編程的方法。經(jīng)過筆者一番實踐之后,覺得上述所編寫的函數(shù)幾乎可以用到所有I2C結(jié)構(gòu)的硬件,只需要大家花一點時間調(diào)試下DELAY函數(shù)的時間就可以了。
評論