打印

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

[复制链接]
5492|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 | 只看该作者
打错了一个字,一般人看到打错字的都不愿意回。

使用特权

评论回复
5
lj9010|  楼主 | 2011-9-1 17:54 | 只看该作者
4# 宋业科
请问哪个字

使用特权

评论回复
6
心静自然凉| | 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

使用特权

评论回复
7
lj9010|  楼主 | 2011-9-2 09:31 | 只看该作者
6# 心静自然凉



是STC12C5A16CCP/PWM单片机   e部分我改成c了,但是程序下载进去后发现eeprom还是没起作用,断电后,里面的内容就恢复初始值了!

使用特权

评论回复
8
a38128895| | 2011-9-2 10:17 | 只看该作者
确定程序读写没问题?

使用特权

评论回复
9
lj9010|  楼主 | 2011-9-2 10:19 | 只看该作者
8# a38128895
没问题的、、以前编译测试没问题的

使用特权

评论回复
10
xyz769| | 2011-9-2 10:58 | 只看该作者
  贴程序

使用特权

评论回复
11
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,  我主程序调用的,大家看看有问题吗?

使用特权

评论回复
12
心静自然凉| | 2011-9-2 12:59 | 只看该作者


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

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

使用特权

评论回复
13
lj9010|  楼主 | 2011-9-13 08:47 | 只看该作者
12# 心静自然凉


谢谢你的指点,问题已经解决了!

使用特权

评论回复
14
autopccopy| | 2011-9-13 12:58 | 只看该作者
对,PDF有现成的C语言范例的!:handshake

使用特权

评论回复
15
swustlx86| | 2013-5-3 11:38 | 只看该作者
不知楼主是如何解决的  现在遇到STC EEPROM问题  望指点一二

使用特权

评论回复
16
outstanding| | 2013-7-18 11:52 | 只看该作者

使用特权

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

本版积分规则

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

5

主题

74

帖子

1

粉丝