找回密码
 注册
关于网站域名变更的通知
查看: 481|回复: 5
打印 上一主题 下一主题

STC15系列单片机的内部EEPROM使用问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-11-8 10:34 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
芯片是STC15W4K56S4,在加入eeprom相关程序后,期望存储数据,但实际情况是,外部修改的数据在电路板掉电后,再次接电源时,修改的数据并没有保存,不确定是函数的问题,还是数据根本没有写进去,请求解答,有涉及到EEPROM的部分程序如下:4 ^7 Z) E/ ?2 f5 H) t% a/ z. M

9 [; p- a: a* a. G( p2 e+ u
  • #include
  • #include        "STC15Fxxxx.H"
  • #define MAIN_Fosc                24000000UL
  • #define LcmXPixel 128
  • #define LcmYPixel 64
  • #define MIN(A,B) ((A)<(B)?(A)B))
  • #define Uchar unsigned char
  • #define Uint unsigned int
  • #define        timer0_Reload        (MAIN_Fosc / 1000)
  • #define CMD_IDLE       0
  • #define CMD_READ       1
  • #define CMD_PROGRAM    2
  • #define CMD_ERASE      3
  • #define MileageAddr    64
  • #define BLaddr         1024
  • u16 Buf[12][3]={{5,1,1},{5,3,1},{10,3,2},{5,6,2},{10,6,3},{15,4,3}};
  • Uchar IAPreadbyte(Uint addr);
  • void IAPprogrambyte(Uint addr , Uchar dat);
  • void IAPerasesector(Uint addr);
  • void IAPidle();
  • void writeDatas(Uint addr , Uchar *pdat , Uchar n);
  • void writeDatas(Uint addr , Uchar *pdat , Uchar n)
  • {
  •         Uchar i;
  •         IAPerasesector(addr);
  •         for(i=0;i
  •         {
  •                 IAPprogrambyte(addr+i,pdat);
  •         }
  • }
  • void main( void )
  • {
  •                 Uchar contrast=30;
  •                 DelayMS(10);
  •                 RES = 0;
  •                 DelayMS(200);
  •                 RES = 1;
  •                 DelayMS(50);
  •                 LcmInit();
  •                 ds1302_init();
  •                 ds1302_write_time();
  •                 P0M1 = 0;        P0M0 = 0;
  •                 P1M1 = 0;        P1M0 = 0;
  •                 P2M1 = 0;        P2M0 = 0;
  •                 P3M1 = 0;        P3M0 = 0;
  •                 P4M1 = 0;        P4M0 = 0;
  •                 P5M1 = 0;        P5M0 = 0;
  •                 P6M1 = 0;        P6M0 = 0;
  •                 P7M1 = 0;        P7M0 = 0;
  •                 INT_CLKO |= 0x20;
  •                 display_index = 0;
  •                 AUXR |= 0x80;
  •                 TMOD &= 0xF0;
  •                 TL0 = 0x00;//        TH0 = (u8)(Timer0_Reload / 256);
  •                 TH0 = 0xDC;//        TL0 = (u8)(Timer0_Reload % 256);
  •                 ET0 = 1;        //Timer0 interrupt enable
  •                 TR0 = 1;        //Timer0 run
  •                 EA = 1;
  •                 TF0 = 0;
  •                 Buf[select_2-2][0]=IAPreadbyte(0x0000);
  •                 while(1)
  •         {
  •                 if(pagenum==21)
  •                          {
  •                  LcmPutStr(0,0,"________________");
  •                  LcmPutNum(7,4,Buf[select_2-2][1]);//LcmPutStr(100,4,"h");
  •                  LcmPutNum(43,4,Buf[select_2-2][0]);//LcmPutStr(50,4,"ml");
  •                  LcmPutNum(84,4,Buf[select_2-2][2]);//LcmPutStr(50,4,"d");
  •                                  if(select_21==1){LcmPutStr(10,0,">");LcmPutStr(10,4," ");        LcmPutStr(45,4," ");LcmPutStr(87,4," ");LcmPutStr(30,6," ");}
  •                                  if(select_21==2){LcmPutStr(10,4,">");LcmPutStr(10,0," ");LcmPutStr(45,4," ");        LcmPutStr(87,4," ");LcmPutStr(30,6," ");}        //
  •                                  if(select_21==3){LcmPutStr(45,4,">");LcmPutStr(10,0," ");LcmPutStr(10,4," ");        LcmPutStr(87,4," ");LcmPutStr(30,6," ");}        //
  •                                  if(select_21==4){LcmPutStr(87,4,">");LcmPutStr(10,0," ");LcmPutStr(10,4," ");        LcmPutStr(45,4," ");LcmPutStr(30,6," ");}        //
  •                  if(B2PressOnce==1)
  •                                  {
  •                     B2PressOnce=0;
  •                      if(select_21==2){if(Buf[select_2-2][1]<24){Buf[select_2-2][1]++; }else{Buf[select_2-2][1]=0;}}
  •                      if(select_21==3){if(Buf[select_2-2][0]<15){Buf[select_2-2][0]++; }else{Buf[select_2-2][0]=0;}}
  •                              if(select_21==4){if(Buf[select_2-2][2]<10){Buf[select_2-2][2]++; }else{Buf[select_2-2][2]=0;}}
  •                  }
  •                  if(B3PressOnce==1)
  •                  {
  •                     B3PressOnce=0;
  •                      if(select_21==1)   {select_21=2;}
  •                      else if(select_21==2){select_21=3;}
  •                              else if(select_21==3){select_21=4;}
  •                              else if(select_21==4){select_21=1;}
  •                  }
  •                  if(B4PressOnce==1)
  •                          {
  •                     B4PressOnce=0;
  •                     if(select_21==1){pagenum=2;LcmClear(0x00);}
  •                     else {pagenum=3;LcmClear(0x00);}
  •                   }
  •                                  writeDatas(0x0000,&Buf[select_2-2][0],4);
  •                        }
  •                    }
  • }
  • void IAPidle(void)
  • {
  •         IAP_CONTR = 0;
  •         IAP_CMD   = 0;
  •         IAP_TRIG  = 0;
  •         IAP_ADDRH = 0x80;
  •         IAP_ADDRL = 0;
  • }
  • Uchar IAPreadbyte(Uint addr)
  • {
  •         Uchar dat;
  •         IAP_CONTR = 0x83;
  •         IAP_CMD   = CMD_READ;
  •         IAP_ADDRL = addr;
  •         IAP_ADDRH = addr>>8;
  •         IAP_TRIG  = 0x5A;
  •   IAP_TRIG  = 0xA5;
  •         _nop_();
  •         dat = IAP_DATA;
  •         IAPidle();
  •   return dat;
  • }
  • void IAPerasesector(Uint addr)
  • {
  •         IAP_CONTR  = 0x83;
  •         IAP_CMD     = CMD_ERASE;
  •         IAP_ADDRL   = addr;
  •         IAP_ADDRH   = addr>>8;
  •         IAP_TRIG    = 0x5A;
  •         IAP_TRIG    = 0xA5;
  •         _nop_();
  •         IAPidle();
  • }
  • void IAPprogrambyte(Uint addr , Uchar dat)
  • {
  •   IAP_CONTR   = 0x83;
  •         IAP_CMD     = CMD_PROGRAM;
  •         IAP_ADDRL   = addr;
  •         IAP_ADDRH   = addr>>8;
  •         IAP_DATA    = dat;
  •         IAP_TRIG    = 0x5A;
  •         IAP_TRIG    = 0xA5;
  •         _nop_();
  •         IAPidle();
  • }
    9 A/ D9 v2 y: D

) O1 I3 t) ]# ]( P! c2 ~9 p$ _
+ k% i9 G3 c! H- E

该用户从未签到

2#
发表于 2022-11-8 11:21 | 只看该作者
有可能没有写进去,你写个测试程序试一下
头像被屏蔽
  • TA的每日心情
    奋斗
    2022-11-8 15:10
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    3#
    发表于 2022-11-8 13:30 | 只看该作者
    提示: 作者被禁止或删除 内容自动屏蔽

    该用户从未签到

    4#
    发表于 2022-11-8 13:42 | 只看该作者
    别弄这么复杂的程序好吗?就写一个最简单的程序,先写一个固定的数据,看看写入的效果。

    该用户从未签到

    5#
    发表于 2022-11-8 13:55 | 只看该作者
    顺便问一下,只写5个字节,擦除这5个字节,能写入吗?
    头像被屏蔽
  • TA的每日心情
    奋斗
    2022-11-8 15:10
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    6#
    发表于 2022-11-8 15:06 | 只看该作者
    提示: 作者被禁止或删除 内容自动屏蔽
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-6-13 21:36 , Processed in 0.078125 second(s), 29 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表