串行E2PROMAT 24C512在單片機中應用
MAIN: MOV SP #60H;設堆棧
Write: MOV SlvAdr, #A0H;選擇1個器件地址
MOV ByteCnt, #08H;設寫入數據長度為8字節
MOV SubAdr1, #00H;設寫入單元首址為0020H
MOV SubAdr2, #20H;
LCALL WriteData ; 寫數據
……
Read: MOV Slvadr, #A0H;選擇1個器件地址
MOV Bytecnt, #08H;設讀出數據長度為8字節
MOV SubAdr1, #00H;設讀出單元
MOV SubAdr2, #20H;首址為0020H
LCALL ReadData; 讀數據
……
WriteData:LCALL Start; I2C總線起始條件
MOV A,SlvAdr; 取器件地址
LCALL writeByte; 發送器件地址
MOV A,SubAdr1
LCALL writeByte;發送高8位地址
MOV A,SubAdr2
LCALLwriteByte;發送低8位地址
MOVR0,#WriteDat;取寫入數據的首地址
Next:MOVA,@R0
LCALLwriteByte;寫入1字節數據
LNCR0;取下1個數據
DJNZByteCnt,Next;重復操作直到寫完全部數據
LCALLStop;發送I2C總線停止條件
LCALLDL10ms;延時10ms等待E2PROM內部數據
;寫完
RET
;讀數據子程序
ReadData:LCALLStart
MOVA,SlvAdr
LCALLWriteByte
MOVA,Subadr1
LCALLWriteByte
MOVA,Subadr2
LCALLWriteByte
LCALLStart;重復發送I2C總線起始條件
MOVA,Slvadr
SETBACC.0;R/W位置1
LCALLWriteByte
CLRACK;請讀非應答標志
MOVR0,#RdadData;讀緩沖區首址
DJNZByteCnt,Next1
SJMPLast
Next1:LCALLReadByte;接收1個字節數據
MOV@R0,A;接收數據送緩沖區
INCR0
DJNZByteCnt,Next1;重復接收
Last:SETBACK;接收最后1個字節數據
ACALLReadByte
MOV#R0,A
LCALLStop
RET
上面給出讀寫操作主程序、頁面寫入子程序及其多字節讀子程序。受篇幅限制,部分子程序沒有給出,讀者可根據AT24C512的操作時序自行編制或參閱相關文獻。
5結束語
由AT24C512與AT89C2051等非總線單片機構成的數據采集存儲系統具有體積小、成本低、可靠性高的特點,因而具有很高的應用價值。
評論