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