河外星系 发布于 2007-9-26 21:13:57
[求助]请问各位大虾我把sst29sf040当作数据存储器时为什么在单片机掉电和复位后程序又恢复原来初始化的值啊? sst29sf040是flash阿,数据怎么会丢失呢? hlf_2001 发布于 2007-9-26 22:25:30
 你用的什么单片机? 首先要确认一下 单片机是否收到了中断信号, 如果硬件没问题就要考虑是否是软体有问题 河外星系 发布于 2007-9-27 8:36:53
 我用的单片机为AT89C52. sst29sf040的A0-A7接74ls373的输出,74373集成在CPLD中,没画出来,A8-A14接AT89C52的 P20-P26,而A15-A18接地,因为我用不到那么大的空间,而其片选端CE接AT89C52的P27 ,所以有效范围0x0000~0x7FFF ,下面是我的程序,有问题么? unsigned char idata dig1[7]={"4 8.5 0"} void ByteProgram(uchar data SrcByte,uint Dst) { XBYTE[0x0555] = 0xAA; XBYTE[0x02AA] = 0x55; XBYTE[0x0555] = 0xA0; XBYTE[Dst] = SrcByte; wait(1,9);//等待25us }
int Erase_One_Sector(uint Dst) {
/* Issue the Sector Erase command to 39SF040 */
XBYTE[0x0555] = 0xAA; /* set up address to be 555h */ /* write data 0xAA to the address */ XBYTE[0x02AA] = 0x55; /* set up address to be 2AAh */ /* write data 0x55 to the address */ XBYTE[0x0555] = 0x80; /* set up address to be 555h */ /* write data 0x80 to the address */ XBYTE[0x0555] = 0xAA; /* set up address to be 555h */ /* write data 0xAA to the address */ XBYTE[0x02AA] = 0x55; /* set up address to be 2AAh */ /* write data 0x55 to the address */ XBYTE[Dst] = 0x20; /* set up starting address to be erased */ /* write data 0x30 to the address */ wait(85,134); /* check DATABOOK for the most */ /* accurate value -- Tse */ }
uchar ByteRead(uint addr) { uchar GetData; GetData = XBYTE[addr]; return(GetData); } void sst_save()//用于保存易丢失数据 { uchar i; Erase_One_Sector(128); for(i=0;i<4;i++) { ByteProgram(syn[2*i+1],0x0080+i); syn[2*i+1]=ByteRead(0x0080+i); } } void main() { sst_save(); }
aibxyz 发布于 2007-9-27 9:53:53
 你先不断电复位 直接写个程序验证下写进去了没 河外星系 发布于 2007-9-27 11:15:14
如果我不断电复位的话,复位后数据依然从初始化的值dig1[7]={"4 8.5 0"}开始,在我的仿真软件中查看xdata, 数据是随着我改变的数值变化而变化的阿,为什么一复位我读到的值就是初始化的值了呢?你告诉我应该怎么验证写进去了 没有好吗? 河外星系 发布于 2007-9-28 8:31:40
再给指导一下aibxyz大虾! 河外星系 发布于 2007-9-29 14:29:36
我现在能正确读出芯片ID:0xBF13这说明编址应该正确吧,读写也应该正确吧,但是为什么断电后数据恢复为初始化时的数值呢?我是将uchar idata syn[8]={"24.5 6 0"}调在LCD中显示出来,然后通过增减按键改变syn[8]={"24.5 6 0"}的数值,保存在sst29sf040中,但是为什么一断电后从新接好电源或单片机复位后,在LCD中显示的值又恢复为syn[8]={"24.5 6 0"},这是怎么回事呢? aibxyz 发布于 2007-9-29 20:22:20
 验证么,写进去然后读出来 注意,要确定是读成功了,而不是原来xdata里的数据 用仿真器看到的xdata随你的改变而改变不能说明什么 另外,建议没写一个命令,延时一下
|