欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3999|回復(fù): 6
收起左側(cè)

STC15W408AS單片機(jī)的內(nèi)部EEPROM使用程序

[復(fù)制鏈接]
ID:926564 發(fā)表于 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:使用定時(shí)器2作為波特率發(fā)生器
  8.                                 //1:使用定時(shí)器1的模式0(16位自動(dòng)重載模式)作為波特率發(fā)生器
  9.                                 //2:使用定時(shí)器1的模式2(8位自動(dòng)重載模式)作為波特率發(fā)生器
  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字節(jié)
  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;                //設(shè)置串口為8位可變波特率
  45. #if URMD == 0
  46.     T2L = (65536 - (FOSC/4/BAUD));
  47.     T2H = (65536 - (FOSC/4/BAUD)) >> 8;
  48.     AUXR = 0x14;                //T2為1T模式, 并啟動(dòng)定時(shí)器2
  49.     AUXR |= 0x01;               //選擇定時(shí)器2為串口1的波特率發(fā)生器
  50. #elif URMD == 1
  51.     AUXR = 0x40;                //定時(shí)器1為1T模式
  52.     TMOD = 0x00;                //定時(shí)器1為模式0(16位自動(dòng)重載)
  53.     TL1 = (65536 - (FOSC/4/BAUD));
  54.     TH1 = (65536 - (FOSC/4/BAUD)) >> 8;
  55.     TR1 = 1;                    //定時(shí)器1開(kāi)始啟動(dòng)
  56. #else
  57.     TMOD = 0x20;                //設(shè)置定時(shí)器1為8位自動(dòng)重裝載模式
  58.     AUXR = 0x40;                //定時(shí)器1為1T模式
  59.     TH1 = TL1 = (256 - (FOSC/32/BAUD));
  60.     TR1 = 1;
  61. #endif
  62. }
復(fù)制代碼
  1. #include "EEPROM.h"
  2. /*----------------------------
  3. 軟件延時(shí)
  4. ----------------------------*/
  5. void Delay(BYTE n)
  6. {
  7.     WORD x;

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

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

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

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

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

  57. /*----------------------------
  58. 扇區(qū)擦除

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

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


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

評(píng)分

參與人數(shù) 2黑幣 +22 收起 理由
jacky1124 + 12 很給力!
admin + 10 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:319585 發(fā)表于 2021-12-23 07:37 來(lái)自觸屏版 | 顯示全部樓層
這個(gè)stc的單片機(jī)不錯(cuò),足夠強(qiáng)大,附帶很多東西
回復(fù)

使用道具 舉報(bào)

ID:1005344 發(fā)表于 2022-2-16 01:22 來(lái)自觸屏版 | 顯示全部樓層
liesnake 發(fā)表于 2021-12-23 07:37
這個(gè)stc的單片機(jī)不錯(cuò),足夠強(qiáng)大,附帶很多東西

謝謝分享。辛苦了
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

可以的
回復(fù)

使用道具 舉報(bào)

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

一次512字節(jié)
回復(fù)

使用道具 舉報(bào)

ID:1042619 發(fā)表于 2022-10-24 15:46 | 顯示全部樓層
    我習(xí)慣從STC開(kāi)發(fā)工具包里面調(diào)用程序,稍微改改就可以拿來(lái)用
EIO$CQRKG4_D83]4N{PU1QV.png
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表