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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3770|回復: 6
收起左側

STC15W408AS單片機的內部EEPROM使用程序

[復制鏈接]
ID:926564 發表于 2021-12-22 21:32 | 顯示全部樓層 |閱讀模式
  1. #include <STC15F2K60S2.H>
  2. #include <math.h>    //Keil library  
  3. #include <stdio.h>   //Keil library        

  4. #include "EEPROM.h"



  5. #define FOSC    11059200UL
  6. #define BAUD    115200
  7. #define     URMD    0           //0:使用定時器2作為波特率發生器
  8.                                 //1:使用定時器1的模式0(16位自動重載模式)作為波特率發生器
  9.                                 //2:使用定時器1的模式2(8位自動重載模式)作為波特率發生器
  10.                                                                
  11.                                                                

  12. void InitUart();



  13. void main()
  14. {
  15.         uint datas;
  16.     uint i=0;
  17.         uint j=0;
  18.         uint m=0;
  19.         InitUart();
  20.         

  21.   while(EEPROM_init()==0);
  22.         TI=1;printf("Erase succeeded.\n");TI=0;                     //1111,1100 擦除成功

  23.     for (i=0; i<512; i++)           //編程512字節
  24.     {
  25.         IapProgramByte(IAP_ADDRESS+i,i);                                
  26.     }
  27. TI=1;printf("2");TI=0;                     //1111,1100 擦除成功
  28.     while (j<512)
  29.         {
  30.                 datas=IapReadByte(IAP_ADDRESS+j);
  31.                 TI=1;
  32.                 printf("%x:",IAP_ADDRESS+j);
  33.                 printf("%d\n",datas);
  34.                 TI=0;
  35.                 j++;
  36.                 Delay(1);
  37.         }
  38. }



  39. /*----------------------------
  40. 初始化串口
  41. ----------------------------*/
  42. void InitUart()
  43. {
  44.     SCON = 0x5a;                //設置串口為8位可變波特率
  45. #if URMD == 0
  46.     T2L = (65536 - (FOSC/4/BAUD));
  47.     T2H = (65536 - (FOSC/4/BAUD)) >> 8;
  48.     AUXR = 0x14;                //T2為1T模式, 并啟動定時器2
  49.     AUXR |= 0x01;               //選擇定時器2為串口1的波特率發生器
  50. #elif URMD == 1
  51.     AUXR = 0x40;                //定時器1為1T模式
  52.     TMOD = 0x00;                //定時器1為模式0(16位自動重載)
  53.     TL1 = (65536 - (FOSC/4/BAUD));
  54.     TH1 = (65536 - (FOSC/4/BAUD)) >> 8;
  55.     TR1 = 1;                    //定時器1開始啟動
  56. #else
  57.     TMOD = 0x20;                //設置定時器1為8位自動重裝載模式
  58.     AUXR = 0x40;                //定時器1為1T模式
  59.     TH1 = TL1 = (256 - (FOSC/32/BAUD));
  60.     TR1 = 1;
  61. #endif
  62. }
復制代碼
  1. #include "EEPROM.h"
  2. /*----------------------------
  3. 軟件延時
  4. ----------------------------*/
  5. void Delay(BYTE n)
  6. {
  7.     WORD x;

  8.     while (n--)
  9.     {
  10.         x = 0;
  11.         while (++x);
  12.     }
  13. }
  14. /*----------------------------
  15. 關閉IAP
  16. ----------------------------*/
  17. void IapIdle()
  18. {
  19.     IAP_CONTR = 0;                  //關閉IAP功能
  20.     IAP_CMD = 0;                    //清除命令寄存器
  21.     IAP_TRIG = 0;                   //清除觸發寄存器
  22.     IAP_ADDRH = 0x80;               //將地址設置到非IAP區域
  23.     IAP_ADDRL = 0;
  24. }

  25. /*----------------------------
  26. 從ISP/IAP/EEPROM區域讀取一字節
  27. ----------------------------*/
  28. uint IapReadByte(WORD addr)
  29. {
  30.     uchar dat;                       //數據緩沖區

  31.     IAP_CONTR = ENABLE_IAP;         //使能IAP
  32.     IAP_CMD = CMD_READ;             //設置IAP命令
  33.     IAP_ADDRL = addr;               //設置IAP低地址
  34.     IAP_ADDRH = addr >> 8;          //設置IAP高地址
  35.     IAP_TRIG = 0x5a;                //寫觸發命令(0x5a)
  36.     IAP_TRIG = 0xa5;                //寫觸發命令(0xa5)
  37.     _nop_();                        //等待ISP/IAP/EEPROM操作完成
  38.     dat = IAP_DATA;                 //讀ISP/IAP/EEPROM數據
  39.     IapIdle();                      //關閉IAP功能

  40.     return dat;                     //返回
  41. }

  42. /*----------------------------
  43. 寫一字節數據到ISP/IAP/EEPROM區域
  44. ----------------------------*/
  45. void IapProgramByte(WORD addr, BYTE dat)
  46. {
  47.     IAP_CONTR = ENABLE_IAP;         //使能IAP
  48.     IAP_CMD = CMD_PROGRAM;          //設置IAP命令
  49.     IAP_ADDRL = addr;               //設置IAP低地址
  50.     IAP_ADDRH = addr >> 8;          //設置IAP高地址
  51.     IAP_DATA = dat;                 //寫ISP/IAP/EEPROM數據
  52.     IAP_TRIG = 0x5a;                //寫觸發命令(0x5a)
  53.     IAP_TRIG = 0xa5;                //寫觸發命令(0xa5)
  54.     _nop_();                        //等待ISP/IAP/EEPROM操作完成
  55.     IapIdle();
  56. }

  57. /*----------------------------
  58. 扇區擦除

  59. ----------------------------*/
  60. void IapEraseSector(WORD addr)
  61. {
  62.     IAP_CONTR = ENABLE_IAP;         //使能IAP
  63.     IAP_CMD = CMD_ERASE;            //設置IAP命令
  64.     IAP_ADDRL = addr;               //設置IAP低地址
  65.     IAP_ADDRH = addr >> 8;          //設置IAP高地址
  66.     IAP_TRIG = 0x5a;                //寫觸發命令(0x5a),每次IAP操作時,都要對IAP_TRIG先寫入5AH,再寫入A5H,ISP/IAP命令才會生效。
  67.     IAP_TRIG = 0xa5;                //寫觸發命令(0xa5)
  68.     _nop_();                        //等待ISP/IAP/EEPROM操作完成
  69.     IapIdle();
  70. }

  71. uint EEPROM_init()
  72. {
  73.         uint s;
  74.         IapEraseSector(IAP_ADDRESS);    //扇區擦除
  75.         TI=1;printf("扇區擦除\n");TI=0;
  76.        
  77.     for (s=0; s<512; s++)           //檢測是否擦除成功(全FF檢測)
  78.     {
  79.         if (IapReadByte(IAP_ADDRESS+s) != 0xff)
  80.                         return 0;
  81.         }
  82.    
  83.     Delay(10);                      //延時
  84.         return 1;
  85. }
復制代碼


Keil代碼下載: 內部EEPROM使用.rar (38.96 KB, 下載次數: 85)

評分

參與人數 2黑幣 +22 收起 理由
jacky1124 + 12 很給力!
admin + 10 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:319585 發表于 2021-12-23 07:37 來自手機 | 顯示全部樓層
這個stc的單片機不錯,足夠強大,附帶很多東西
回復

使用道具 舉報

ID:1005344 發表于 2022-2-16 01:22 來自手機 | 顯示全部樓層
liesnake 發表于 2021-12-23 07:37
這個stc的單片機不錯,足夠強大,附帶很多東西

謝謝分享。辛苦了
回復

使用道具 舉報

ID:187370 發表于 2022-10-23 18:01 | 顯示全部樓層
一次能存入大于256的數據嗎?就是多字節
回復

使用道具 舉報

ID:61207 發表于 2022-10-23 18:37 | 顯示全部樓層
NewIdeas 發表于 2022-10-23 18:01
一次能存入大于256的數據嗎?就是多字節

可以的
回復

使用道具 舉報

ID:526108 發表于 2022-10-23 19:02 | 顯示全部樓層
NewIdeas 發表于 2022-10-23 18:01
一次能存入大于256的數據嗎?就是多字節

一次512字節
回復

使用道具 舉報

ID:1042619 發表于 2022-10-24 15:46 | 顯示全部樓層
    我習慣從STC開發工具包里面調用程序,稍微改改就可以拿來用
EIO$CQRKG4_D83]4N{PU1QV.png
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品日韩一区 | 免费看色| 亚洲成人一区二区在线 | 91在线成人 | 久久精品综合 | 99久久国产综合精品麻豆 | 在线看一区二区三区 | 一区二区三区四区免费在线观看 | 日韩一区二区三区四区五区六区 | 性做久久久久久免费观看欧美 | 日韩综合在线播放 | 欧美高清视频一区 | 日日干干 | 久久久久久国产 | 亚洲欧美日韩精品久久亚洲区 | 成人国产在线视频 | 欧美一级片久久 | 亚洲成人精品国产 | 国产高清免费视频 | 久久久久久久久久久久久久国产 | 亚洲男人天堂 | 久久国产精品一区二区 | 亚洲夜夜爽 | 久久久免费电影 | 国产精品福利视频 | h视频免费在线观看 | 自拍偷拍中文字幕 | 久草热8精品视频在线观看 午夜伦4480yy私人影院 | 亚洲一区二区三区视频 | 国产91视频一区二区 | 瑟瑟视频在线看 | 国产.com | 美日韩一区二区 | 国产一区日韩在线 | 亚洲成人一级片 | 欧美日韩福利视频 | 国产精品亚洲精品日韩已方 | 久久久久久久久久久久久9999 | 91精品国产高清久久久久久久久 | 先锋资源在线 | 日韩久草|