📄 stc_mcu_flash_read_write.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 + -