打印

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

[复制链接]
1635|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 | 只看该作者

唉,误人不浅啊...

使用特权

评论回复
5
后学| | 2008-4-22 08:31 | 只看该作者

stc是flash

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

74

主题

121

帖子

1

粉丝