串行E2PROM 24LC65在單片機中的應(yīng)用
1. 概述
24LC65是目前容量較大的一種串行E2PROM 芯片,具有8kB的存儲容量,體積小,功耗低,可掉電保護。AT89C52單片機亦具有8kB內(nèi)部ROM,同樣具備低功耗和控制功能強等特點,由兩者構(gòu)成的單片機小系統(tǒng)硬件開銷少,數(shù)據(jù)可串行傳送,功耗低,非常實用。但是,讀、寫24LC65的程序編寫卻比較麻煩,本文將介紹對其編程的方法,并介紹采用子程序結(jié)構(gòu)編寫的已通過的寫、讀24LC65的應(yīng)用編程。
2. 24LC65與單片機的連接
2.1 24LC65的引腳功能
24LC65采用8腳DIP封裝,引腳功能如下:
1~3腳(A0、A1、A2)為三位地址輸入端;
4腳GND為接地端;
5腳SDA為二進制數(shù)據(jù)輸入輸出端;
6腳SCL為時鐘輸入端;
7腳NC懸空;
8腳VCC為5V正電源。
2.2 24LC65與單片機的連接
連接電路如圖1所示,圖中共接有8片24LC65芯片,芯片的三位地址A2、A1、A0接成8種組態(tài),由A2、A1、A0排列組成8個片選地址,因此在兩線上最多可選用8片,可尋址64kB存儲空間,每片尋址8kB,其中,1#芯片地址范圍是0000H~1FFFH,8#芯片地址范圍是 E000H~FFFFH。SDA為串行數(shù)據(jù)輸入輸出線,SCL是時鐘輸入端,每次訪問24LC65之前,必須執(zhí)行啟動I2C數(shù)據(jù)總線操作,每次結(jié)束訪問時,也必須執(zhí)行停止I2C數(shù)據(jù)總線操作,其操作時序由SCL與SDA的關(guān)系確定,如圖2的示,可以看出,當SCL為高電平時,SDA由高變低時啟動I2C總線,而SDA由低變高時,停止總線操作。若啟動總線為讀操作,則在SCL脈沖的下降沿讀出1 bit的數(shù)據(jù),若啟動寫操作,則在SCL脈沖的上升沿寫入1 bit 的數(shù)據(jù)。
3. 數(shù)據(jù)格式
對E2PROM 24LC65每次寫一個字節(jié)操作的數(shù)據(jù)格式由4個字節(jié)構(gòu)成。第1字節(jié)為:
其中,×為任意,A12、A11、A10、A9、A8為E2PROM 24LC65的高5位地址。
第3字節(jié)是E2PROM 24LC65的低8位地址A7~A0。第4字節(jié)才是8位數(shù)據(jù)。注意,每個字節(jié)后緊跟一個回答(ACK)信號。
4. 寫24LC65程序
用MCS-51單片機的指令編寫對24LC65寫一字節(jié)的子程序是關(guān)鍵,主程序連續(xù)調(diào)四次便可實現(xiàn)對24LC65寫一字節(jié)數(shù)據(jù)的目的。假設(shè)待寫入字節(jié)在單片機內(nèi)字節(jié)地址分別是6FH、6EH、…、68H,并分別存放在待寫入字節(jié)的D7、D6、…、D0位,作為調(diào)用寫一字節(jié)子程序的入口參數(shù)。由主程序啟動,并停止總線。其程序分別如下:
??;主程序啟動與停止總線
SETB P3.1??;SCL=1
SETB P3.0??;SDA=1
CLR P3.0 ;SDA=0,啟動總線
┊
┊
CLR P3.0
SETB P3.1
SETB P3.0??;停止總線操作
??; 寫一字節(jié)的子程序
MOV C,6FH??;D7位送給進位C
CLR P3.1
MOV P3.0,C
SETB P3.1;寫入D7位
CLR P3.1
MOV C,6EH??;D6位送給進位C
MOV P3.0,C
SETB P3.1??;寫入D6位
CLR P3.1
MOV C,6DH ;D5位送給進位C
MOV P3.0,C
SETB P3.1?。粚懭隓5位
CLR P3.1
MOV C,6CH
MOV P3.0,C
SETB P3.1??;寫入D4位
CLR P3.1
MOV C,6BH
MOV P3.0,C
SETB P3.1?。粚懭隓3位
CLR P3.1
MOV C,6AH
MOV P3.0,C
SETB P3.1??;寫入D2位
CLR P3.1
MOV C,69H
MOV P3.0,C
SETB P3.1 ;寫入D1位
CLR P3.1
MOV C,68H
MOV P3.0,C
SETB P3.1 ;寫入D0位
CLR P3.1
NOP
SETB P3.1?。粚懸蛔止?jié)結(jié)束
CLR P3.1 ;ACK
RET
5. 讀24LC65程序
讀24LC65程序中既有寫控制字和寫地址操作,又有讀數(shù)據(jù)的操作,其中,寫控制字和寫地址操作相同于寫24LC65程序,即前三個字節(jié)相同,只不過第三字節(jié)結(jié)束后要停止總線操作。第四字節(jié)重新啟動總線,送讀命令。只有第五字節(jié)才是讀24LC65的操作。讀24LC65的程序如下:
MOV R7,#08H
READ:SETB P3.1 ;讀一字節(jié)于A中
CLR P3.1 ;移出一位
MOV C,P3.0 ;移出一位傳給進位C
RLC A
DJNZ R7,READ
SETB P3.1
CLR P3.1??;ACK
CLR P3.0
SETB P3.1
SETB P3.0??;停止總線
RET
該程序在實際使用中運行可靠,實用性強。如果希望增加存儲容量,可以另選單片機的兩條I/O線,同樣可以連接8片24LC65芯片,組成另一64kB的串行E2PROM。