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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

請問STC單片機的eeprom 的寫入問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:518902 發表于 2020-9-21 21:11 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我知道stc的eeprom是flash做出來的eeprom,不是嚴格意義上的,但是我想  它不是flash閃存嗎 必須通過擦除才能把0變成1,我想:如果我這樣:在第一個扇區寫入 00 FF FF...........FF

然后我又對它修改一番 改成寫入 00 00 FF.....FF,不知能不能直接寫入成功呢?
于是我編寫了程序,發現毫無反應.......無語中
不知道大家有試過嗎? 能否直接寫入(新的0數值而不先擦除)  呢
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:807591 發表于 2020-9-22 08:40 | 只看該作者
必須是整個扇區擦除后都是FF....可以對任意一個字節寫數據...
回復

使用道具 舉報

板凳
ID:213173 發表于 2020-9-22 08:54 | 只看該作者
樓主的想法是正確的,可能是測試方法不對得不到預想結果。這是用TX-1C實驗板的測試程序,下載時勾選擦除用戶EEPROM區。
  1. #include <reg52.h>      //52系列單片機頭文件
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. //定義ISP的操作命令
  6. #define RdCommand 0x01                //讀命令
  7. #define PrgCommand 0x02                //寫命令
  8. #define EraseCommand 0x03        //擦除命令
  9. #define WaitTime 0x01                 //定義CPU的等待時間,寫入硬件延時
  10. /*STC89系列EEPROM寄存器聲明*/
  11. sfr ISP_DATA=0xe2;                //0000,0000 EEPROM數據寄存器
  12. sfr ISP_ADDRH=0xe3;                //0000,0000 EEPROM地址高字節
  13. sfr ISP_ADDRL=0xe4;                //0000,0000 EEPROM地址第字節
  14. sfr ISP_CMD=0xe5;                   //xxxx,xx00 EEPROM命令寄存器
  15. sfr ISP_TRIG=0xe6;                //0000,0000 EEPRPM命令觸發寄存器
  16. sfr ISP_CONTR=0xe7;                //0000,x000 EEPROM控制寄存器

  17. sbit dula=P2^6;  //聲明U1鎖存器的鎖存端
  18. sbit wela=P2^7;  //聲明U2鎖存器的鎖存端

  19. uchar code table[]={
  20. 0x3f,0x06,0x5b,0x4f,
  21. 0x66,0x6d,0x7d,0x07,
  22. 0x7f,0x6f,0x77,0x7c,
  23. 0x39,0x5e,0x79,0x71};

  24. uchar data dis_buf[3];
  25. uchar num,i;

  26. void delayms(uint xms)   
  27. {
  28.         uint i,j;
  29.         for(i=xms;i>0;i--)        //i=xms即延時約xms毫秒
  30.                 for(j=110;j>0;j--);
  31. }

  32. void display()  //顯示子函數
  33. {
  34.         P0=0x00;      dula=1;dula=0;
  35.         P0=~(0x01<<i);wela=1;wela=0;
  36.         P0=dis_buf[i];dula=1;dula=0;
  37.         i++;
  38.         i%=3;  
  39. }
  40. /* ================ 打開 ISP,IAP 功能 ================= */
  41. void ISP_IAP_enable(void)
  42. {
  43.         EA = 0;       /* 關中斷   */
  44.         ISP_CONTR = ISP_CONTR & 0x18;       /* 0001,1000 */
  45.         ISP_CONTR = ISP_CONTR | WaitTime; /* 寫入硬件延時 */
  46.         ISP_CONTR = ISP_CONTR | 0x80;       /* ISPEN=1  */
  47. }
  48. /* =============== 關閉 ISP,IAP 功能 ================== */
  49. void ISP_IAP_disable(void)
  50. {
  51.         ISP_CONTR = ISP_CONTR & 0x7f; /* ISPEN = 0 */
  52.         ISP_TRIG = 0x00;
  53.         EA   =   1;   /* 開中斷 */
  54. }
  55. /* ================ 公用的觸發代碼 ==================== */
  56. void ISPgoon(void)
  57. {
  58.         ISP_IAP_enable();   /* 打開 ISP,IAP 功能 */
  59.         ISP_TRIG = 0x46;  /* 觸發ISP_IAP命令字節1 */
  60.         ISP_TRIG = 0xb9;  /* 觸發ISP_IAP命令字節2 */
  61.         _nop_();
  62. }
  63. /* ==================== 字節讀 ======================== */
  64. unsigned char byte_read(unsigned int byte_addr)
  65. {
  66.         ISP_ADDRH = (unsigned char)(byte_addr >> 8);/* 地址賦值 */
  67.         ISP_ADDRL = (unsigned char)(byte_addr & 0x00ff);
  68.         ISP_CMD   = ISP_CMD & 0xf8;   /* 清除低3位  */
  69.         ISP_CMD   = ISP_CMD | RdCommand; /* 寫入讀命令 */
  70.         ISPgoon();       /* 觸發執行  */
  71.         ISP_IAP_disable();    /* 關閉ISP,IAP功能 */
  72.         return (ISP_DATA);    /* 返回讀到的數據 */
  73. }
  74. /* ================== 扇區擦除 ======================== */
  75. void SectorErase(unsigned int sector_addr)
  76. {
  77.         unsigned int iSectorAddr;
  78.         iSectorAddr = (sector_addr & 0xfe00); /* 取扇區地址 */
  79.         ISP_ADDRH = (unsigned char)(iSectorAddr >> 8);
  80.         ISP_ADDRL = 0x00;
  81.         ISP_CMD = ISP_CMD & 0xf8;   /* 清空低3位  */
  82.         ISP_CMD = ISP_CMD | EraseCommand; /* 擦除命令3  */
  83.         ISPgoon();       /* 觸發執行  */
  84.         ISP_IAP_disable();    /* 關閉ISP,IAP功能 */
  85. }
  86. /* ==================== 字節寫 ======================== */
  87. void byte_write(unsigned int byte_addr, unsigned char original_data)
  88. {
  89.         ISP_ADDRH = (unsigned char)(byte_addr >> 8);  /* 取地址  */
  90.         ISP_ADDRL = (unsigned char)(byte_addr & 0x00ff);
  91.         ISP_CMD  = ISP_CMD & 0xf8;    /* 清低3位 */
  92.         ISP_CMD  = ISP_CMD | PrgCommand;  /* 寫命令2 */
  93.         ISP_DATA = original_data;   /* 寫入數據準備 */
  94.         ISPgoon();       /* 觸發執行  */
  95.         ISP_IAP_disable();     /* 關閉IAP功能 */
  96. }

  97. void main()
  98. {
  99.         num=byte_read(0x2000);//讀取EEPROM中數據
  100.         byte_write(0x2000,num<<1);//從低位加0,寫入新數據。只能寫0不可寫1!
  101.         if(num==0)//上電第9次
  102.                 SectorErase(0x2000);//擦除扇區重新恢復0xff
  103.         while(1)
  104.         {
  105.                 dis_buf[0]=table[num/100%10];
  106.                 dis_buf[1]=table[num/10%10];
  107.                 dis_buf[2]=table[num%10];
  108.                 display();
  109.                 delayms(1);
  110.         }
  111. }
復制代碼
回復

使用道具 舉報

地板
ID:65956 發表于 2020-9-22 08:54 | 只看該作者
STC的手冊已有說了,要寫之前要把要寫入的扇區給先擦除,然后再寫就能保證寫入的萬無一失,如果不擦就先寫當然也可以,但是能否寫正確就不能保證了,按官方方法操作肯定不會有問題的
回復

使用道具 舉報

5#
ID:88256 發表于 2020-9-22 09:00 | 只看該作者
不應該毫無反應的,把你的程序貼出來看看唄
回復

使用道具 舉報

6#
ID:311846 發表于 2020-9-22 09:05 | 只看該作者
不按規范操作沒試過,一般都是按照官方給的操作,沒出現過問題,你不按操作來,人家都說了錯誤會操作失敗咯!還要去試。你硬是想知道,打電話去問問廠商看他怎么設計的吧!
回復

使用道具 舉報

7#
ID:147710 發表于 2020-9-22 10:08 | 只看該作者
本帖最后由 XTXB 于 2020-9-22 10:40 編輯

STC15親測可行,STC8G要加這個命令才行:ISP_TPS = 12;(12M晶振,24M晶振要改為24)               
回復

使用道具 舉報

8#
ID:136485 發表于 2020-9-22 11:28 | 只看該作者
你要重寫必須要重新擦除,而且是一擦就是一個扇區
回復

使用道具 舉報

9#
ID:748096 發表于 2020-9-22 16:07 | 只看該作者
理論上應該可以寫入成功,只要是FF就可以寫入數據
回復

使用道具 舉報

10#
ID:518902 發表于 2020-9-22 23:23 | 只看該作者
XTXB 發表于 2020-9-22 10:08
STC15親測可行,STC8G要加這個命令才行:ISP_TPS = 12;(12M晶振,24M晶振要改為24)

是這樣呀! 謝謝您
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品欧美一区二区三区精品久久 | 日韩中文字幕久久 | 中文字幕1区 | 亚洲精品第一国产综合野 | 91精品国产91久久久久久不卞 | 麻豆国产一区二区三区四区 | 国产真实精品久久二三区 | 久久久久久久国产 | 国产亚洲精品久久情网 | 手机在线不卡av | 国产精品久久久久久一区二区三区 | 日韩天堂av | 亚洲高清在线观看 | 在线观看亚 | 久久国产精品一区二区三区 | 亚洲精品视频免费观看 | 成年精品 | 成人日韩精品 | 精品久久一区 | 中文字幕色站 | 国产第一页在线观看 | 久久精品亚洲精品 | 538在线精品 | 自拍偷拍亚洲一区 | 综合亚洲视频 | 久久免费精彩视频 | 久久综合久 | 视频1区 | 久久午夜精品福利一区二区 | 丝袜美腿一区二区三区动态图 | 国产资源在线观看 | 蜜桃特黄a∨片免费观看 | 亚洲高清av| 在线观看成人精品 | 国产日韩欧美精品一区二区 | 色先锋影音 | 日韩成人在线视频 | 99国产精品视频免费观看一公开 | 青青青伊人 | 超碰人人91 | 日韩一级免费大片 |