#include <REG51.H>
#include <intrins.h>
sfr ISP_DATA = 0xE2;
sfr ISP_ADDRH = 0xE3;
sfr ISP_ADDRL = 0xE4;
sfr ISP_CMD = 0xE5;
sfr ISP_TRIG = 0xE6;
sfr ISP_CONTR = 0xE7;
sbit CONTR = 0xB4; //P3.4
extern void DataFlashByteWrite(unsigned int address, unsigned char bytedata);
extern unsigned char DataFlashLoad(unsigned int address);
extern void DataFlashPageErase(unsigned int address);
void main(void)
{
EA = 0;
// SP = 0xe0;
// ISP_CONTR = 0x40;
DataFlashPageErase(0x1000);
DataFlashByteWrite(0x1000,0x03);
// P3=ISP_DATA;
ISP_DATA=0x00;
if (DataFlashLoad(0x1000)==0x03)
CONTR=0;
}
void DataFlashByteWrite(unsigned int address, unsigned char bytedata)
{
ISP_CONTR=0x80;
ISP_CMD=0x02;
ISP_ADDRH=address/256;
ISP_ADDRL=address%256;
ISP_DATA=bytedata;
ISP_TRIG=0x46;
ISP_TRIG=0x89; //waiting for write over
_nop_();
ISP_CONTR=0;
ISP_CMD=0;
ISP_TRIG=0;
ISP_ADDRH=0;
ISP_ADDRL=0;
}
unsigned char DataFlashLoad(unsigned int address)
{
idata unsigned char temp;
ISP_CONTR=0x80;
ISP_CMD=0x01;
ISP_ADDRH=address/256;
ISP_ADDRL=address%256;
ISP_TRIG=0x46;
ISP_TRIG=0x89; //waiting for read over
_nop_();
temp=ISP_DATA;
ISP_CONTR=0;
ISP_CMD=0;
ISP_TRIG=0;
ISP_ADDRH=0;
ISP_ADDRL=0;
return temp;
}
void DataFlashPageErase(unsigned int address) //erase 512 Bytes(one page word);
{
ISP_CONTR=0x80;
ISP_CMD=0x03;
ISP_ADDRH=address/256;
ISP_ADDRL=address%256;
ISP_TRIG=0x46;
ISP_TRIG=0x89; //waiting for erase over
_nop_();
ISP_CONTR=0;
ISP_CMD=0;
ISP_TRIG=0;
ISP_ADDRH=0;
ISP_ADDRL=0;
}