stc单片机掉电后EEPROM中数据恢复到初始值、是什么原因

[复制链接]
6728|15
 楼主| lj9010 发表于 2011-9-1 16:43 | 显示全部楼层 |阅读模式
本帖最后由 lj9010 于 2011-9-2 10:40 编辑

是STC12C5A16CCP单片机,头文件是STC_NEW_8051.H,直接在里面定义的
sfr ISP_DATA  = 0xc2;
sfr ISP_ADDRH = 0xc3;
sfr ISP_ADDRL = 0xc4;
sfr ISP_CMD   = 0xc5;
sfr ISP_TRIG  = 0xc6;
sfr ISP_CONTR = 0xc7;
程序编译没问题,但是测试的时候就发现EEPROM没有数据的存取,花了一天时间没明白、、、第一次发帖、、、各位豪杰救救火!
 楼主| lj9010 发表于 2011-9-1 17:00 | 显示全部楼层
大家有意见说说看啦、、我好试试方法呀、、一个人搞的头大了!
 楼主| lj9010 发表于 2011-9-1 17:46 | 显示全部楼层
是不是我编译文件的一些细节问题、大家给个意见吧
宋业科 发表于 2011-9-1 17:49 | 显示全部楼层
打错了一个字,一般人看到打错字的都不愿意回。
 楼主| lj9010 发表于 2011-9-1 17:54 | 显示全部楼层
4# 宋业科
请问哪个字
心静自然凉 发表于 2011-9-1 19:09 | 显示全部楼层
是STC12C5A16CCP单片机,头文件是STC_NEW_8051.H,直接在里面定义的
sfr ISP_DATA  = 0xe2;
sfr ISP_ADDRH = 0xe3;
sfr ISP_ADDRL = 0xe4;
sfr ISP_CMD   = 0xe5;
sfr ISP_TRIG  = 0xe6;
sfr ISP_CONTR = 0xe7;
程序 ...
lj9010 发表于 2011-9-1 16:43

1.CCP这个型号是否我没见过?还是你打错了
2.寄存器定义错误,红体字部分应为 c
 楼主| lj9010 发表于 2011-9-2 09:31 | 显示全部楼层
6# 心静自然凉



是STC12C5A16CCP/PWM单片机   e部分我改成c了,但是程序下载进去后发现eeprom还是没起作用,断电后,里面的内容就恢复初始值了!
a38128895 发表于 2011-9-2 10:17 | 显示全部楼层
确定程序读写没问题?
 楼主| lj9010 发表于 2011-9-2 10:19 | 显示全部楼层
8# a38128895
没问题的、、以前编译测试没问题的
xyz769 发表于 2011-9-2 10:58 | 显示全部楼层
  贴程序
 楼主| lj9010 发表于 2011-9-2 11:01 | 显示全部楼层
#include<STC_NEW_8051.H>
#include<EEPROM.H>
void eeprom_eares(unsigned int addres)//扇区擦除。
{
            unsigned i;
      ISP_ADDRL=addres;     //低位地址
      ISP_ADDRH=addres>>8;  //高位地址
      ISP_CONTR=0x01;
      ISP_CONTR=ISP_CONTR|0x80; //设时间与充ISP操作。
      ISP_CMD=0x03;         //扇区命命令
      ISP_TRIG=0x46;        //触发
      ISP_TRIG=0xB9;        //触发启动。
      for(i=0;i<3;i++);
      ISP_ADDRL=0xff;
      ISP_ADDRH=0xff;
      ISP_CONTR=0x00;
      ISP_CMD=0x00;
      ISP_TRIG=0x00;
}
void eeprom_write(unsigned int addres,unsigned char write_data)//写数据。
{
            unsigned char i;
      ISP_DATA=write_data;   //要写入的数据。
      ISP_ADDRL=addres;     //低位地址
      ISP_ADDRH=addres>>8;  //高位地址
      ISP_CONTR=0x01;
      ISP_CONTR=ISP_CONTR|0x80; //设时间与充ISP操作。
      ISP_CMD=0x02;         //写命令
      ISP_TRIG=0x46;        //触发
      ISP_TRIG=0xB9;        //触发启动。
      for(i=0;i<3;i++);
      ISP_ADDRL=0xff;
      ISP_ADDRH=0xff;
      ISP_CONTR=0x00;
      ISP_CMD=0x00;
      ISP_TRIG=0x00;
}
unsigned char eeprom_read(unsigned int addres)
{
            unsigned char i,z;
      ISP_ADDRL=addres;     //低位地址
      ISP_ADDRH=addres>>8;  //高位地址
      ISP_CONTR=0x01;
      ISP_CONTR=ISP_CONTR|0x80; //设时间与充ISP操作。
      ISP_CMD=0x01;         //写命令
      ISP_TRIG=0x46;        //触发
      ISP_TRIG=0xB9;        //触发启动。
      for(i=0;i<3;i++);
      ISP_ADDRL=0xff;
      ISP_ADDRH=0xff;
      ISP_CONTR=0x00;
      ISP_CMD=0x00;
      ISP_TRIG=0x00;
      z=ISP_DATA;
      return(z);
}


这是eeprom.c,  我主程序调用的,大家看看有问题吗?
心静自然凉 发表于 2011-9-2 12:59 | 显示全部楼层


阅完你的程序,可以看出你对STC的eeprom操作不够熟悉,需要再认真仔细的查读PDF,上面都讲的很清楚,也有现成的示范程序,其他我就不多说了,靠你自己吧,把这个问题解决后你的能力和信心都会有所提升。

切记,阅读PDF资料一定要认真、掌握好。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| lj9010 发表于 2011-9-13 08:47 | 显示全部楼层
12# 心静自然凉


谢谢你的指点,问题已经解决了!
autopccopy 发表于 2011-9-13 12:58 | 显示全部楼层
对,PDF有现成的C语言范例的!:handshake
swustlx86 发表于 2013-5-3 11:38 | 显示全部楼层
不知楼主是如何解决的  现在遇到STC EEPROM问题  望指点一二
outstanding 发表于 2013-7-18 11:52 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:啃书本、留胡子

5

主题

74

帖子

1

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