请教: 在晓奇老师的网站上下了个 读写 STC 自己带的 EEPROM 的例子
//--------------------字节读------------------------------------------- uchar8 byte_read(uint byte_addr) { ISP_ADDRH = (uchar8)(byte_addr >> 8); /* 地址赋值 */ ISP_ADDRL = (uchar8)(byte_addr & 0x00ff);
ISP_CMD = ISP_CMD & 0xf8; /* 清除低3位 */ ISP_CMD = ISP_CMD | RdCommand; /* 写入读命令 */
ISPgoon(); /* 触发执行 */ ISP_IAP_disable(); /* 关闭ISP,IAP功能 */
return (ISP_DATA); /* 返回读到的数据 */ } //--------------------字节读-------------------------------------------
//--------------------扇区擦除----------------------------------------- void SectorErase(uint sector_addr) { uint iSectorAddr; iSectorAddr = (sector_addr & 0xfe00); /* 取扇区地址 */ ISP_ADDRH = (uchar8)(iSectorAddr >> 8); ISP_ADDRL = 0x00;
ISP_CMD = ISP_CMD & 0xf8; /* 清空低3位 */ ISP_CMD = ISP_CMD | EraseCommand; /* 擦除命令3 */
ISPgoon(); /* 触发执行 */ ISP_IAP_disable(); /* 关闭ISP,IAP功能 */
} //--------------------扇区擦除-----------------------------------------
//--------------------字节写------------------------------------------- void byte_write(uint byte_addr, uchar8 original_data) { ISP_ADDRH = (uchar8)(byte_addr >> 8); /* 取地址 */ ISP_ADDRL = (uchar8)(byte_addr & 0x00ff);
ISP_CMD = ISP_CMD & 0xf8; /* 清低3位 */ ISP_CMD = ISP_CMD | PrgCommand; /* 写命令2 */ ISP_DATA = original_data; /* 写入数据准备 */
ISPgoon(); /* 触发执行 */ ISP_IAP_disable(); /* 关闭IAP功能 */ } //--------------------字节写-------------------------------------------
问题1: 晓奇老师的: #define BaseAddr 0x4000 #define EndAddr 0xf3ff
可是我在 资料上看到的(stc89c54rd) 的第一扇区是: 起始地址:8000h
老师为什么写 #define BaseAddr 0x4000
问题2 假设我想把 int i = 80; 我想把 i 写到 0x8001
那么需要首先把 0x8001 搽除吗? 直接在 0x8001 上,可以不? (直接写,就可以把原先写的覆盖了不?)
谢谢! |