基于Keil C的AT24C02串行E2PROM的編程



3。2。2AT24C02頁寫操作
AT24C02允許每次寫入8個字節的頁寫操作模式,頁寫操作和字節寫操作的時序差不多都相同,不同的是在于傳送了一字節數據后并不產生停止信號,主機被允許再發送7個額外的字節。每發送一個字節數據后,AT24C02產生一個應答位。如果在發送停止信號之前,主機發送超過8個字節,AT24C02內部地址計數器將自動翻轉,先前寫入的數據被覆蓋。接收主機發送的停止信號后,AT24C02啟動內部寫周期將數據寫到數據區。因此,可以編寫一個頁寫操作的函數如下:


3。3讀操作
AT24C02的讀操作主要有立即地址讀取、隨機地址讀取和順序地址存取3種。立即地址讀取方式由一個空字節序列來加載數據地址,當從機尋址碼和數據尋址碼隨鐘輸入,并被確認時,從機必須產生另一個開始狀態,通過發出一個確認讀取的信號之后,數據便隨時鐘串行輸出,數據的讀取不通過確認狀態應答,而是通過一個停止狀態來應答。其他兩種方式基本類似,只是不需要產生另一個開始狀態,而順序地址讀取時,讀出的是連續數據。讀操作的時序圖類似于圖4的寫操作時序,因此可編出讀一個字節的函數RlByte如下:

當然,對于AT2402的讀取往往不是只一個字節,更多的時候還是想一連幾個字節一起讀取,因此,可編出連續讀取N個字節的函數如下:



4綜合應用舉例
以圖6所示硬件電路為例,調用上面所編寫的函數,將數據00H~07H送到AT24C02內部首地址為10H的地方存放,并將AT24C02內部以20H為首地址的連續8個字讀到AT89C51的內部RAM20H~27H存放。其主程序如下:


其實,AT24CXX系列的E2PROM芯片很多,但其編程不盡相同。由于C語言的編程要精準控制時間很不容易,因此往往有些工程人員碰到類似的I2C硬件結構,大多采用C語言與匯編語言混合編程的方法。經過筆者一番實踐之后,覺得上述所編寫的函數幾乎可以用到所有I2C結構的硬件,只需要大家花一點時間調試下DELAY函數的時間就可以了。
評論