|
實(shí)驗(yàn)外部存儲(chǔ)期間不方便 看了內(nèi)部有2K的數(shù)據(jù)
代碼如下 .C文件可直接移植
#include <STC89C5xRC.H>
#include <intrins.h>
#define Read 0x01 //讀指令
#define Write 0x02 //寫(xiě)指令
#define Erase 0x03 //擦除指令
#define ENABLE_IAP 0x81 //速度20Mhz
//操作完成一次之后 進(jìn)入待機(jī)模式 等待下一次命令 無(wú)ISP操作
void ISP_IAP_disable(void)
{
ISP_CONTR = 0x00;
ISP_CMD = 0x00;
ISP_TRIG = 0x00;
}
//讀一個(gè)字節(jié) addr是讀的地址
unsigned char ReadEeProm(unsigned int addr)
{
unsigned char dat;
ISP_CONTR = ENABLE_IAP;
ISP_CMD = Read;
ISP_ADDRH = (unsigned char)(addr>>8);
ISP_ADDRL = (unsigned char)addr;
ISP_TRIG = 0x46;
ISP_TRIG = 0xB9;
_nop_();
ISP_IAP_disable();
dat = ISP_DATA;
return dat;
}
//擦除一個(gè)扇區(qū)的內(nèi)容 addr擦除扇區(qū)的地址
void EraseEeProm(unsigned int addr)
{
ISP_CONTR = ENABLE_IAP;
ISP_CMD = Erase;
ISP_ADDRH = (unsigned char)(addr>>8);
ISP_ADDRL = (unsigned char)addr;
ISP_TRIG = 0x46;
ISP_TRIG = 0xB9;
_nop_();
ISP_IAP_disable();
}
//寫(xiě)一個(gè)字節(jié)的內(nèi)容 addr地址 dat待寫(xiě)入數(shù)據(jù)
void WriteEeProm(unsigned int addr,unsigned char dat)
{
//EraseEeProm(addr); //一個(gè)字節(jié)需要先擦除這個(gè)扇區(qū)
ISP_CONTR = ENABLE_IAP;
ISP_CMD = Write;
ISP_ADDRH = (unsigned char)(addr>>8);
ISP_ADDRL = (unsigned char)addr;
ISP_DATA = dat;
ISP_TRIG = 0x46;
ISP_TRIG = 0xB9;
_nop_();
ISP_IAP_disable();
}
//連續(xù)讀多個(gè)字節(jié) *str存儲(chǔ)讀到數(shù)據(jù)緩沖區(qū) addr從哪個(gè)地址開(kāi)始讀 len讀多少個(gè)字節(jié)
void Reading(unsigned char *str,unsigned int addr,unsigned char len)
{
while(len--)
{
*str++ = ReadEeProm(addr++);
}
}
void ValToString(unsigned char *str,unsigned int dat)
{
unsigned char len = 0; //計(jì)算當(dāng)前轉(zhuǎn)換到多少
unsigned char buf[5];
do{
buf[len] = dat%10 + '0';
dat /=10;
len++;
}while(dat>0);
while(len--)
{
*str++ = buf[len];
}
*str = '\0';
}
|
-
-
-
內(nèi)部EEPOM.zip
2020-7-16 18:57 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
46.64 KB, 下載次數(shù): 135, 下載積分: 黑幣 -5
|