⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stc_mcu_flash_read_write.h

📁 该头文件用于STC系列单片机内部FLASH读写,在KEIL开发环境下实际测试通过.
💻 H
字号:
// ##################################################################
//		file name : EEPROM.h
//		version : 1.0
//		c compiler : Keil
// 		STC MCU-RD+/RC inside EEPROM read/write 
// ##################################################################
#define ENABLE_ISP 0x82	// For Fm = 10MHz (40M-0x80,20M-0x81,5M-0x83)
// ==================================================================
// Sector addr: (512 bytes / sector)

// STC12C(LE)xx52xx:	0x1000,0x1200 (2 sectors)
// STC89x51(52)xx:		0x2000,0x2200,...,0x2d00,0x2e00 ( 8 sectors)
// STC89x54(55,58)xx:	0x8000,0x8200,...,0xf000,0xf200 (58 sectors)

// ==================================================================

// New sfr define for STC MCU 
sfr	ISP_DATA  =	0xe2;	// (ISP Flash Data Register): E2H
sfr	ISP_ADDRH =	0xe3;	// (ISP Flash Address High):  E3H
sfr	ISP_ADDRL = 0xe4;	// (ISP Flash Address Low):   E4H
sfr	ISP_CMD	  = 0xe5;	// Mode(1:read, 2:write, 3:erase)
sfr	ISP_TRIG  = 0xe6;	// TRIG = 46H,B9H
sfr	ISP_CONTR = 0xe7;	// 

void EEP_sector_erase(u16 sector_addr);
u8 EEP_byte_read(u16 byte_addr);
void EEP_byte_Write(u16 byte_addr, u8 wdata);
void EEP_example();	

// ==================================================================

void EEP_sector_erase(u16 sector_addr)
{
	ISP_ADDRL = sector_addr;
	ISP_ADDRH = sector_addr >> 8;

	ISP_CONTR = ENABLE_ISP;
	ISP_CMD	  = 3;						// Erase Mode = 3
	EA		  = 0;
	ISP_TRIG  = 0x46;					// TRIG command
	ISP_TRIG  = 0xb9;

	ISP_CONTR =	0;
	ISP_TRIG  =	0;
	ISP_CMD   = 0;
	EA		  = 1;
}

// ==================================================================

u8 EEP_byte_read(u16 byte_addr)
{
	ISP_ADDRL =	byte_addr;
	ISP_ADDRH =	byte_addr >> 8;

	ISP_CONTR = ENABLE_ISP;
	ISP_CMD	  = 1;						// read mode = 1
	EA 		  = 0;

	ISP_TRIG  =	0x46;
	ISP_TRIG  =	0xb9;

	ISP_CONTR =	0;
	ISP_TRIG  =	0;
	ISP_CMD   = 0;
	EA		  = 1;

	return (ISP_DATA);
}

// ==================================================================

void EEP_byte_Write(u16 byte_addr, u8 wdata)
{
	ISP_ADDRL =	byte_addr;
	ISP_ADDRH =	byte_addr >> 8;

	ISP_CONTR = ENABLE_ISP;
	ISP_CMD	  = 2;						// write mode = 2
	EA		  = 0;

	ISP_DATA  =	wdata;

	ISP_TRIG  =	0x46;
	ISP_TRIG  =	0xb9;

	ISP_CONTR =	0;
	ISP_TRIG  =	0;
	ISP_CMD   = 0;
	EA		  = 1;
}

// ==================================================================
/*
void EEP_example()	
{
 	u8 code *str = {"TEST EEPROM IS OK!"}; 	// For LCD
	u16 addr = 0x8000;						// sector addr for STC89C54RD+
	u8 i;
	u8 *ps,*pd;
	ps = str;
	pd = ABUF;						

	display_clear();

	EEP_sector_erase(addr);					// (addr) in EEPROM zoon
	for (i=0;i<strlen(str);i++)
	{
		EEP_byte_Write(addr+i, *ps);		// (addr,wdata)
		ps++;
	}
	for (i=0;i<strlen(str);i++)
	{
		*pd = EEP_byte_read(addr+i);		// (addr) in EEPROM zoon
		pd++;
	}
	display();
	d1ms(2000);
}
*/

// ##################################################################

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -