stc eeprom的實(shí)用讀寫演示,提供了一種eeprom動(dòng)
stc單片機(jī)EEPROM讀寫--最簡潔的的拿來就用保證沒錯(cuò)^_^簡潔至上!
sfr isp_data=0xe2;
sfr isp_addrh=0xe3;
sfr isp_addrl=0xe4;
sfr isp_cmd=0xe5;
sfr isp_trig=0xe6;
sfr isp_contr=0xe7;
unsigned char eeprom_read(unsigned int addres);
void eeprom_write(unsigned int address,unsigned char wdata);
void eeprom_eares(unsigned int addres);//扇區(qū)擦除。
void eeprom_eares(unsigned int addres)//扇區(qū)擦除。
{unsigned i;
isp_addrl=addres; //低位地址
isp_addrh=addres>>8; //高位地址
isp_contr=0x01;
isp_contr=isp_contr|0x80; //設(shè)時(shí)間與充ISP操作。
isp_cmd=0x03; //扇區(qū)命命令
isp_trig=0x46; //觸發(fā)
isp_trig=0xb9; //觸發(fā)啟動(dòng)。
for(i=0;i<3;i++);
isp_addrl=0xff;
isp_addrh=0xff;
isp_contr=0x00;
isp_cmd=0x00;
isp_trig=0x00;
}
void eeprom_write(unsigned int addres,unsigned char write_data)//寫數(shù)據(jù)。
{unsigned char i;
isp_data=write_data; //要寫入的數(shù)據(jù)。
isp_addrl=addres; //低位地址
isp_addrh=addres>>8; //高位地址
isp_contr=0x01;
isp_contr=isp_contr|0x80; //設(shè)時(shí)間與充ISP操作。
isp_cmd=0x02; //寫命令
isp_trig=0x46; //觸發(fā)
isp_trig=0xb9; //觸發(fā)啟動(dòng)。
for(i=0;i<3;i++);
isp_addrl=0xff;
isp_addrh=0xff;
isp_contr=0x00;
isp_cmd=0x00;
isp_trig=0x00;
}
unsigned char eeprom_read(unsigned int addres)
{unsigned char i,z;
isp_addrl=addres; //低位地址
isp_addrh=addres>>8; //高位地址
isp_contr=0x01;
isp_contr=isp_contr|0x80; //設(shè)時(shí)間與充ISP操作。
isp_cmd=0x01; //寫命令
isp_trig=0x46; //觸發(fā)
isp_trig=0xb9; //觸發(fā)啟動(dòng)。
for(i=0;i<3;i++);
isp_addrl=0xff;
isp_addrh=0xff;
isp_contr=0x00;
isp_cmd=0x00;
isp_trig=0x00;
z=isp_data;
return(z);
}
最給一個(gè)匯編的:
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;;; 內(nèi)部EEPROM讀寫定義
ISP_DATA EQU 0E2H ;寫入讀出數(shù)據(jù)寄存器.
ISP_ADDRH EQU 0E3H ;地址寄存器高8位
ISP_ADDRL EQU 0E4H ;地址寄存器低8位
ISP_CMD EQU 0E5H ;命令模式寄存器
ISP_TRIG EQU 0E6H ;命令觸發(fā)寄存器
ISP_CONTR EQU 0E7H ;ISP/IAP控制寄存器.
ISP_IAP_BYTE_READ EQU 1 ;字節(jié)讀
ISP_IAP_BYTE_PROGRAM EQU 2 ;字節(jié)編程,要空才能寫
ISP_IAP_SECTOR_ERASE EQU 3 ;扇區(qū)擦除,
WAIT_TIME EQU 1 ;20M以下為1
BYTE_ADDR_HIGH EQU 60H ;高位地址
BYTE_ADDR_LOW EQU 61H ;低位地址
BYTE_WRITE_DATA EQU 62H ;要寫入的數(shù)據(jù)
;***********************內(nèi)部EEPROM操作*************************
READ_EEPROM:MOV ISP_ADDRH,ISP_ADDRH ;送高地址
MOV ISP_ADDRL,ISP_ADDRL ;送低地址
MOV ISP_CONTR,#01h ;設(shè)置等等待時(shí)間
ORL ISP_CONTR,#80h ;允許ISP/IAP操作
MOV ISP_CMD,#01h ;送讀命令
MOV ISP_TRIG,#46H ;觸發(fā)
MOV ISP_TRIG,#0B9H ;觸發(fā)啟動(dòng).
NOP
NOP
MOV ISP_CONTR,#00H
MOV ISP_CMD,#00H
MOV ISP_TRIG,#00H
MOV ISP_ADDRH,#0FFH
MOV ISP_ADDRL,#0FFH
MOV 6AH,ISP_DATA ;讀出的數(shù)據(jù)放到6AH單元中。
RET
WRITE_EARES: MOV WDT,#34H
CLR EA ;關(guān)中斷
MOV ISP_ADDRH,ISP_ADDRH ;送高地址
MOV ISP_ADDRL,ISP_ADDRL ;送低地址
MOV ISP_CONTR,#1h ;設(shè)置等等待時(shí)間
ORL ISP_CONTR,#10000000B ;允許ISP/IAP操作
MOV ISP_CMD,#3h ;送扇區(qū)命令
MOV ISP_TRIG,#46H ;觸發(fā)
MOV ISP_TRIG,#0B9H ;觸發(fā)啟動(dòng).
NOP
NOP
MOV ISP_CONTR,#00H
MOV ISP_CMD,#00H
MOV ISP_TRIG,#00H
MOV ISP_ADDRH,#0FFH
MOV ISP_ADDRL,#0FFH
SETB EA
RET
WRITE_EEPROM:MOV WDT,#34H
CLR EA
MOV ISP_DATA,BYTE_WRITE_DATA ;要寫入的數(shù)據(jù)
MOV ISP_ADDRH,ISP_ADDRH ;送高地址
MOV ISP_ADDRL,ISP_ADDRL ;送低地址
MOV ISP_CONTR,#1h ;設(shè)置等等待時(shí)間
ORL ISP_CONTR,#10000000B ;允許ISP/IAP操作
MOV ISP_CMD,#02h ;送寫命令
MOV ISP_TRIG,#46H ;觸發(fā)
MOV ISP_TRIG,#0B9H ;觸發(fā)啟動(dòng).
NOP
NOP
MOV ISP_CONTR,#00H
MOV ISP_CMD,#00H
MOV ISP_TRIG,#00H
MOV ISP_ADDRH,#0FFH
MOV ISP_ADDRL,#0FFH
SETB EA ;開中斷
RET
文章版權(quán)歸西部工控xbgk所有,未經(jīng)許可不得轉(zhuǎn)載。