久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2263|回復: 2
打印 上一主題 下一主題
收起左側

STC15系列單片機的內部EEPROM使用問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:708768 發表于 2021-6-23 14:01 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
芯片是stc15W4K56S4,在加入eeprom相關程序后,期望存儲數據,但實際情況是,外部修改的數據在電路板掉電后,再次接電源時,修改的數據并沒有保存,不確定是函數的問題,還是數據根本沒有寫進去,請求解答,有涉及到EEPROM的部分單片機程序如下:
  1. #include <intrins.h>
  2. #include        "STC15Fxxxx.H"

  3. #define MAIN_Fosc                24000000UL        
  4. #define LcmXPixel 128
  5. #define LcmYPixel 64
  6. #define MIN(A,B) ((A)<(B)?(A):(B))
  7. #define Uchar unsigned char
  8. #define Uint unsigned int
  9. #define        Timer0_Reload        (MAIN_Fosc / 1000)        
  10.         
  11. #define CMD_IDLE       0
  12. #define CMD_READ       1
  13. #define CMD_PROGRAM    2
  14. #define CMD_ERASE      3
  15. #define MileageAddr    64
  16. #define BLaddr         1024

  17. u16 Buf[12][3]={{5,1,1},{5,3,1},{10,3,2},{5,6,2},{10,6,3},{15,4,3}};

  18. Uchar IAPreadbyte(Uint addr);
  19. void IAPprogrambyte(Uint addr , Uchar dat);
  20. void IAPerasesector(Uint addr);
  21. void IAPidle();
  22. void writeDatas(Uint addr , Uchar *pdat , Uchar n);

  23. void writeDatas(Uint addr , Uchar *pdat , Uchar n)
  24. {
  25.         Uchar i;
  26.         IAPerasesector(addr);
  27.         for(i=0;i<n;i++)
  28.         {
  29.                 IAPprogrambyte(addr+i,pdat[i]);
  30.         }
  31. }

  32. void main( void )
  33. {
  34.                 Uchar contrast=30;
  35.                 DelayMS(10);
  36.                 RES = 0;
  37.                 DelayMS(200);
  38.                 RES = 1;
  39.                 DelayMS(50);
  40.                 LcmInit();
  41.                 ds1302_init();
  42.                 ds1302_write_time();
  43.                 P0M1 = 0;        P0M0 = 0;         
  44.                 P1M1 = 0;        P1M0 = 0;         
  45.                 P2M1 = 0;        P2M0 = 0;         
  46.                 P3M1 = 0;        P3M0 = 0;         
  47.                 P4M1 = 0;        P4M0 = 0;         
  48.                 P5M1 = 0;        P5M0 = 0;         
  49.                 P6M1 = 0;        P6M0 = 0;         
  50.                 P7M1 = 0;        P7M0 = 0;         

  51.                 INT_CLKO |= 0x20;  
  52.                 display_index = 0;
  53.                 AUXR |= 0x80;        
  54.                 TMOD &= 0xF0;               
  55.                 TL0 = 0x00;//        TH0 = (u8)(Timer0_Reload / 256);
  56.                 TH0 = 0xDC;//        TL0 = (u8)(Timer0_Reload % 256);
  57.                 ET0 = 1;        //Timer0 interrupt enable
  58.                 TR0 = 1;        //Timer0 run
  59.                 EA = 1;               
  60.                 TF0 = 0;

  61.                 Buf[select_2-2][0]=IAPreadbyte(0x0000);

  62.                 while(1)
  63.         {        
  64.                 if(pagenum==21)
  65.                          {
  66.                  LcmPutStr(0,0,"________________");                          
  67.                                  
  68.                  LcmPutNum(7,4,Buf[select_2-2][1]);//LcmPutStr(100,4,"h");
  69.                  LcmPutNum(43,4,Buf[select_2-2][0]);//LcmPutStr(50,4,"ml");
  70.                  LcmPutNum(84,4,Buf[select_2-2][2]);//LcmPutStr(50,4,"d");                                 
  71.                                          
  72.                                  if(select_21==1){LcmPutStr(10,0,">");LcmPutStr(10,4," ");        LcmPutStr(45,4," ");LcmPutStr(87,4," ");LcmPutStr(30,6," ");}        
  73.                                  if(select_21==2){LcmPutStr(10,4,">");LcmPutStr(10,0," ");LcmPutStr(45,4," ");        LcmPutStr(87,4," ");LcmPutStr(30,6," ");}        //
  74.                                  if(select_21==3){LcmPutStr(45,4,">");LcmPutStr(10,0," ");LcmPutStr(10,4," ");        LcmPutStr(87,4," ");LcmPutStr(30,6," ");}        //
  75.                                  if(select_21==4){LcmPutStr(87,4,">");LcmPutStr(10,0," ");LcmPutStr(10,4," ");        LcmPutStr(45,4," ");LcmPutStr(30,6," ");}        //                                

  76.                  if(B2PressOnce==1)
  77.                                  {
  78.                     B2PressOnce=0;
  79.                      if(select_21==2){if(Buf[select_2-2][1]<24){Buf[select_2-2][1]++; }else{Buf[select_2-2][1]=0;}}
  80.                      if(select_21==3){if(Buf[select_2-2][0]<15){Buf[select_2-2][0]++; }else{Buf[select_2-2][0]=0;}}
  81.                              if(select_21==4){if(Buf[select_2-2][2]<10){Buf[select_2-2][2]++; }else{Buf[select_2-2][2]=0;}}
  82.                  }        
  83.                  if(B3PressOnce==1)
  84.                  {
  85.                     B3PressOnce=0;
  86.                      if(select_21==1)   {select_21=2;}
  87.                      else if(select_21==2){select_21=3;}
  88.                              else if(select_21==3){select_21=4;}
  89.                              else if(select_21==4){select_21=1;}                                         
  90.                  }                                         
  91.                  if(B4PressOnce==1)
  92.                          {
  93.                     B4PressOnce=0;
  94.                     if(select_21==1){pagenum=2;LcmClear(0x00);}
  95.                     else {pagenum=3;LcmClear(0x00);}
  96.                   }                                       
  97.                                  writeDatas(0x0000,&Buf[select_2-2][0],4);
  98.                        }
  99.                    }
  100. }
  101. void IAPidle(void)
  102. {
  103.         IAP_CONTR = 0;                        
  104.         IAP_CMD   = 0;                        
  105.         IAP_TRIG  = 0;                        
  106.         IAP_ADDRH = 0x80;               
  107.         IAP_ADDRL = 0;               
  108. }
  109. Uchar IAPreadbyte(Uint addr)
  110. {
  111.         Uchar dat;
  112.         IAP_CONTR = 0x83;
  113.         IAP_CMD   = CMD_READ;
  114.         IAP_ADDRL = addr;
  115.         IAP_ADDRH = addr>>8;
  116.         IAP_TRIG  = 0x5A;
  117.   IAP_TRIG  = 0xA5;
  118.         _nop_();
  119.         dat = IAP_DATA;
  120.         IAPidle();
  121.   return dat;
  122. }
  123. void IAPerasesector(Uint addr)
  124. {
  125.         IAP_CONTR  = 0x83;
  126.         IAP_CMD     = CMD_ERASE;
  127.         IAP_ADDRL   = addr;
  128.         IAP_ADDRH   = addr>>8;
  129.         IAP_TRIG    = 0x5A;
  130.         IAP_TRIG    = 0xA5;
  131.         _nop_();
  132.         IAPidle();
  133. }
  134. void IAPprogrambyte(Uint addr , Uchar dat)
  135. {
  136.   IAP_CONTR   = 0x83;
  137.         IAP_CMD     = CMD_PROGRAM;
  138.         IAP_ADDRL   = addr;
  139.         IAP_ADDRH   = addr>>8;
  140.         IAP_DATA    = dat;
  141.         IAP_TRIG    = 0x5A;
  142.         IAP_TRIG    = 0xA5;
  143.         _nop_();
  144.         IAPidle();
  145. }
復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:123289 發表于 2021-6-23 16:08 | 只看該作者
1、先證明數據的確寫入EEPROM了。證明方式,回讀EEPROM中的數據。
2、保證接電后,至讀取數據之前這段時間內,未對EEPROM做過擦除動作。
回復

使用道具 舉報

板凳
ID:362076 發表于 2021-6-27 15:14 | 只看該作者
你定義的MAIN_Fosc是24M,按照手冊所述,IAP_CONTR寄存器的低三位WT2/WT1/WT0應當為0/0/1,即IAP_CONTR應該賦值為0x81而不是當前使用的0x83,問題會不會是這個原因造成的呢?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 女生羞羞网站 | 欧美在线视频不卡 | 精品国产99 | 国产精品第2页 | 久久成人18免费网站 | 欧美一区二区三区 | 91av视频 | 国产精品特级片 | 一区二区三区高清 | 一区二区精品 | 永久av | 亚洲免费在线观看 | 狠狠干狠狠操 | 91免费视频 | 99热.com| av永久免费| 免费在线成人网 | 亚洲一区中文 | 久在线观看 | 精品久久久久久久久久久久 | 国产精品久久久久久久久 | 水蜜桃亚洲一二三四在线 | 九九热国产精品视频 | 久久久婷婷| 中文字字幕一区二区三区四区五区 | 午夜免费观看体验区 | 久久tv在线观看 | 超碰人人插 | 精品一级毛片 | 国产在线视频一区 | 亚洲国产成人精品久久久国产成人一区 | 国产特级毛片 | 免费高清av| 欧美日韩中文国产一区发布 | 91在线电影| 亚洲三级在线 | 伊人狼人影院 | 欧美精品在线观看 | 久久毛片网站 | 特黄特色大片免费视频观看 | 美女二区 |