STC 单片机 EEPROM 为什么只能写入地址0,其它地址写不进去,如:0x0200;说明:已经将扇区擦除。

程序结构如下:数据擦除>写入数据>读出数据。另外还发现一个问题,擦除首地址0x0200扇区时,连0扇区数据也没了。请遇到过该问题大侠来讨论,并请解决掉该问题的高手指教。多... 程序结构如下:
数据擦除>写入数据>读出数据。
另外还发现一个问题,擦除首地址0x0200扇区时,连0扇区数据也没了。
请遇到过该问题大侠来讨论,并请解决掉该问题的高手指教。多谢。
uchar read_stc(uint add)
{
IAP_DATA = 0x00;
IAP_CONTR = ENABLE_ISP;
IAP_CMD = 0x01;
IAP_ADDRH = (uchar)(add>>8)&&0xff;
IAP_ADDRL = (uchar)add&&0xff;
IAP_TRIG = 0x5A;
IAP_TRIG = 0xA5;
_nop_();
IAP_Disable();
return (IAP_DATA);
}
void write_stc(uint add, uchar ch)
{
IAP_CONTR = ENABLE_ISP;
IAP_CMD = 0x02;
IAP_ADDRH =(uchar)(add>>8)&0xff;
IAP_ADDRL =(uchar)add&0xff;
IAP_DATA = ch;//testdata[ch];
IAP_TRIG = 0x5A;
IAP_TRIG = 0xA5;
_nop_();
IAP_Disable();
}
void erase_stc(uint add)
{
IAP_CONTR = ENABLE_ISP;
IAP_CMD = 0x03;
IAP_ADDRH = (uchar)(add>>8)&&0xff;
IAP_ADDRL = (uchar)add&&0xff;
IAP_TRIG = 0x5A;
IAP_TRIG = 0xA5;
_nop_();
IAP_Disable();
}
void IAP_Disable()
{
IAP_CONTR = 0;IAP_CMD = 0;IAP_TRIG = 0; IAP_ADDRH = 0;IAP_ADDRL = 0;
}以上是我的操作程序,下载姚永平工程师的文件,略作修改。用的单片机型号是STC12C5A32S2。
展开
 我来答
gaphy2010
2011-06-16 · TA获得超过5848个赞
知道小有建树答主
回答量:786
采纳率:0%
帮助的人:825万
展开全部
/*
STC89C52 EEPROM 总大小 4k Byte;分 8 扇区;每扇区 512 Byte
!要注意,写扇区前,先将该扇区刷除!

第1扇区 0x2000 - 0x21FF
第2扇区 0x2200 - 0x23FF
第3扇区 0x2400 - 0x25FF
第4扇区 0x2600 - 0x27FF
第5扇区 0x2800 - 0x29FF
第6扇区 0x2A00 - 0x2BFF
第7扇区 0x2C00 - 0x2DFF
第8扇区 0x2E00 - 0x2FFF
*/

估计如果不是你的 STC 单片机 有问题,就是你的程序问题。
feverattack
2011-06-16 · 超过22用户采纳过TA的回答
知道答主
回答量:91
采纳率:0%
帮助的人:44.8万
展开全部
stc 这个 我刚好编完一个程序 也有扇区操作。
它这个单片有个特点 每个扇区 分为 0x200个字节 ,擦除 一下把 这个扇区所有数字都擦除了
你如果要在一个扇区写 几个数字后,你如果想 修改 只能 先把 他们都读出来,然后擦扇区,然后在把他们一个一个 写进去。
或者把他们放在不同的扇区里也可以。一个扇区放一个数字。
这是我那个程序的擦除部分
void Sector_Erase(unsigned int add )
{
IAP_CONTR = ENABLE_ISP; //打开IAP 功能, 设置Flash 操作等待时间
IAP_CMD = 0x03; //IAP/ISP/EEPROM 扇区擦除命令
add_change(add);
IAP_ADDRH = eeprom_add[1]; //设置目标单元地址的高8 位地址
IAP_ADDRL =eeprom_add[0]; //设置目标单元地址的低8 位地址
//EA = 0;
IAP_TRIG = 0x5A; //先送 5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此
IAP_TRIG = 0xA5; //送完A5h 后,ISP/IAP 命令立即被触发起动

//EA = 1;
IAP_Disable(); //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,
//一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关
}
追问
扇区擦除的程序和这个一样
追答
这个是读扇区的部分 这个跟你的一样吗?
unsigned char Byte_Read(unsigned int add)
{
IAP_DATA = 0x00;
IAP_CONTR = ENABLE_ISP; //打开IAP 功能, 设置Flash 操作等待时间
IAP_CMD = 0x01; //IAP/ISP/EEPROM 字节读命令

add_change(add);
IAP_ADDRH = eeprom_add[1]; //设置目标单元地址的高8 位地址
IAP_ADDRL =eeprom_add[0]; //设置目标单元地址的低8 位地址

//EA = 0;
IAP_TRIG = 0x5A; //先送 5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此
IAP_TRIG = 0xA5; //送完A5h 后,ISP/IAP 命令立即被触发起动

//EA = 1;
return (IAP_DATA);
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
太极天驹
2011-06-16 · TA获得超过1033个赞
知道小有建树答主
回答量:537
采纳率:50%
帮助的人:357万
展开全部
1、STC单片机必须以扇区512个字节擦除
2、写的时候,不同的型号起始地址不同,你注意查阅手册!
3、如果还搞不定再联系我!
追问
它不能单个字节擦除,这个知道
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
nathan0066
2011-06-16 · TA获得超过205个赞
知道小有建树答主
回答量:263
采纳率:0%
帮助的人:155万
展开全部
看看有没有最小擦除限制,比如是不是最小擦1K
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式