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