求助:EEPROM 写某个区域,一定要写搽除吗?谢谢!

[复制链接]
2974|4
 楼主| 星星电灯 发表于 2008-4-21 16:07 | 显示全部楼层 |阅读模式
请教:
在晓奇老师的网站上下了个 读写 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 上,可以不?
(直接写,就可以把原先写的覆盖了不?)

谢谢!
czha1 发表于 2008-4-21 17:40 | 显示全部楼层

不用

不用
dragon_hn 发表于 2008-4-21 22:29 | 显示全部楼层

听说STC的是假EEPROM,实际就是FLASH

xwj 发表于 2008-4-21 22:43 | 显示全部楼层

唉,误人不浅啊...

后学 发表于 2008-4-22 08:31 | 显示全部楼层

stc是flash

您需要登录后才可以回帖 登录 | 注册

本版积分规则

74

主题

121

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部