找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4563|回復(fù): 9
打印 上一主題 下一主題
收起左側(cè)

STC12C5A60S2單片機自帶1k EEPROM 如何寫入字符串

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:523982 發(fā)表于 2019-5-16 23:50 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
STC12C5A60S2單片機自帶1k EEPROM 如何寫入字符串?
最近在做一個課題,想利用 STC12C5A60S2單片機自帶的1k EEPROM寫入類似“115029.00,A,”這樣的字符串,
然后通過串口打印出來,不過卡在這一塊了,有沒有大佬提點一下。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:365802 發(fā)表于 2019-5-17 08:05 | 只看該作者
我記得ISP的程式上有EEPROM使用的例子,先搞明白那個,是怎麼寫入一個Byte的,然後結(jié)合數(shù)據(jù)手冊。解決你的問題。
回復(fù)

使用道具 舉報

板凳
ID:123289 發(fā)表于 2019-5-17 08:49 | 只看該作者
對于單片機來說,無所謂字串字符這一說,這些說法都是人為的,它們都是0101的二進制數(shù),將這些數(shù)據(jù)寫入EEPROM就可以了。
回復(fù)

使用道具 舉報

地板
ID:213173 發(fā)表于 2019-5-17 09:16 | 只看該作者
可以參考官方STC15W系列的多字節(jié)連續(xù)操作EEPROM例程。
  1. /* 如果要在程序中使用此代碼,請在程序中注明使用了STC的資料及程序        */
  2. /* 如果要在文章中應(yīng)用此代碼,請在文章中注明使用了STC的資料及程序        */
  3. /*---------------------------------------------------------------------*/

  4. //本示例在Keil開發(fā)環(huán)境下請選擇Intel的8058芯片型號進行編譯
  5. //若無特別說明,工作頻率一般為11.0592MHz


  6. #include "reg51.h"
  7. #include "intrins.h"

  8. typedef bit BOOL;
  9. typedef unsigned char BYTE;
  10. typedef unsigned int WORD;

  11. #define ERROR   0
  12. #define OK      1

  13. //-----------------------------------------------

  14. sfr IAP_DATA    =   0xC2;           //IAP數(shù)據(jù)寄存器
  15. sfr IAP_ADDRH   =   0xC3;           //IAP地址寄存器高字節(jié)
  16. sfr IAP_ADDRL   =   0xC4;           //IAP地址寄存器低字節(jié)
  17. sfr IAP_CMD     =   0xC5;           //IAP命令寄存器
  18. sfr IAP_TRIG    =   0xC6;           //IAP命令觸發(fā)寄存器
  19. sfr IAP_CONTR   =   0xC7;           //IAP控制寄存器

  20. sbit Begin_LED  =   P1^0;
  21. sbit ERROR_LED  =   P1^3;
  22. sbit OK_LED     =   P1^7;

  23. #define CMD_IDLE    0               //空閑模式
  24. #define CMD_READ    1               //IAP字節(jié)讀命令
  25. #define CMD_PROGRAM 2               //IAP字節(jié)編程命令
  26. #define CMD_ERASE   3               //IAP扇區(qū)擦除命令

  27. #define     URMD    0               //0:使用定時器2作為波特率發(fā)生器
  28.                                     //1:使用定時器1的模式0(16位自動重載模式)作為波特率發(fā)生器
  29.                                     //2:使用定時器1的模式2(8位自動重載模式)作為波特率發(fā)生器

  30. sfr P0M1 = 0x93;
  31. sfr P0M0 = 0x94;
  32. sfr P1M1 = 0x91;
  33. sfr P1M0 = 0x92;
  34. sfr P2M1 = 0x95;
  35. sfr P2M0 = 0x96;
  36. sfr P3M1 = 0xb1;
  37. sfr P3M0 = 0xb2;
  38. sfr P4M1 = 0xb3;
  39. sfr P4M0 = 0xb4;
  40. sfr P5M1 = 0xC9;
  41. sfr P5M0 = 0xCA;
  42. sfr P6M1 = 0xCB;
  43. sfr P6M0 = 0xCC;
  44. sfr P7M1 = 0xE1;
  45. sfr P7M0 = 0xE2;

  46. sfr T2H   = 0xd6;                   //定時器2高8位
  47. sfr T2L   = 0xd7;                   //定時器2低8位

  48. sfr  AUXR       =   0x8e;           //輔助寄存器                              

  49. //#define ENABLE_IAP 0x80           //if SYSCLK<30MHz
  50. //#define ENABLE_IAP 0x81           //if SYSCLK<24MHz
  51. #define ENABLE_IAP  0x82            //if SYSCLK<20MHz
  52. //#define ENABLE_IAP 0x83           //if SYSCLK<12MHz
  53. //#define ENABLE_IAP 0x84           //if SYSCLK<6MHz
  54. //#define ENABLE_IAP 0x85           //if SYSCLK<3MHz
  55. //#define ENABLE_IAP 0x86           //if SYSCLK<2MHz
  56. //#define ENABLE_IAP 0x87           //if SYSCLK<1MHz

  57. //測試地址
  58. #define IAP_ADDRESS 0x0400

  59. void IapIdle();
  60. BYTE IapReadByte(WORD addr);
  61. void IapProgramByte(WORD addr, BYTE dat);
  62. void IapEraseSector(WORD addr);
  63. BYTE sequential_write_flash_in_one_sector(WORD begin_addr, WORD counter, BYTE array[]);
  64. BYTE write_flash_with_protect_in_one_sector(WORD begin_addr, WORD counter, BYTE array[]);
  65. void InitUart();
  66. BYTE SendData(BYTE dat);

  67. #define display_Begin_LED() Begin_LED = 0
  68. #define off_Begin_LED()     Begin_LED = 1
  69. #define display_OK_LED()    OK_LED = 0
  70. #define off_OK_LED()        OK_LED = 1
  71. #define display_ERROR_LED() ERROR_LED = 0
  72. #define off_ERROR_LED()     ERROR_LED = 1

  73. //#define USED_BYTE_QTY_IN_ONE_SECTOR   1
  74. //#define USED_BYTE_QTY_IN_ONE_SECTOR   2
  75. //#define USED_BYTE_QTY_IN_ONE_SECTOR   4
  76. //#define USED_BYTE_QTY_IN_ONE_SECTOR   8
  77. //#define USED_BYTE_QTY_IN_ONE_SECTOR   16
  78. //#define USED_BYTE_QTY_IN_ONE_SECTOR   32
  79. //#define USED_BYTE_QTY_IN_ONE_SECTOR   64
  80. #define USED_BYTE_QTY_IN_ONE_SECTOR     128
  81. //#define USED_BYTE_QTY_IN_ONE_SECTOR   256
  82. //#define USED_BYTE_QTY_IN_ONE_SECTOR   512

  83. #define DEBUG_Data_Memory_Begin_Sector_addr     0x0400

  84. BYTE xdata protect_buffer[USED_BYTE_QTY_IN_ONE_SECTOR];

  85. /* 測試常量數(shù)組 */
  86. BYTE code Test_array_total[512] =
  87. {
  88.     0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
  89.     0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,
  90.     0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,
  91.     0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
  92.     0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,
  93.     0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,
  94.     0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,
  95.     0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,
  96.     0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,
  97.     0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,
  98.     0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,
  99.     0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf,
  100.     0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,
  101.     0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf,
  102.     0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef,
  103.     0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff,
  104.     0xff,0xfe,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf3,0xf2,0xf1,0xf0,
  105.     0xef,0xee,0xed,0xec,0xeb,0xea,0xe9,0xe8,0xe7,0xe6,0xe5,0xe4,0xe3,0xe2,0xe1,0xe0,
  106.     0xdf,0xde,0xdd,0xdc,0xdb,0xda,0xd9,0xd8,0xd7,0xd6,0xd5,0xd4,0xd3,0xd2,0xd1,0xd0,
  107.     0xcf,0xce,0xcd,0xcc,0xcb,0xca,0xc9,0xc8,0xc7,0xc6,0xc5,0xc4,0xc3,0xc2,0xc1,0xc0,
  108.     0xbf,0xbe,0xbd,0xbc,0xbb,0xba,0xb9,0xb8,0xb7,0xb6,0xb5,0xb4,0xb3,0xb2,0xb1,0xb0,
  109.     0xaf,0xae,0xad,0xac,0xab,0xaa,0xa9,0xa8,0xa7,0xa6,0xa5,0xa4,0xa3,0xa2,0xa1,0xa0,
  110.     0x9f,0x9e,0x9d,0x9c,0x9b,0x9a,0x99,0x98,0x97,0x96,0x95,0x94,0x93,0x92,0x91,0x90,
  111.     0x8f,0x8e,0x8d,0x8c,0x8b,0x8a,0x89,0x88,0x87,0x86,0x85,0x84,0x83,0x82,0x81,0x80,
  112.     0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x78,0x77,0x76,0x75,0x74,0x73,0x72,0x71,0x70,
  113.     0x6f,0x6e,0x6d,0x6c,0x6b,0x6a,0x69,0x68,0x67,0x66,0x65,0x64,0x63,0x62,0x61,0x60,
  114.     0x5f,0x5e,0x5d,0x5c,0x5b,0x5a,0x59,0x58,0x57,0x56,0x55,0x54,0x53,0x52,0x51,0x50,
  115.     0x4f,0x4e,0x4d,0x4c,0x4b,0x4a,0x49,0x48,0x47,0x46,0x45,0x44,0x43,0x42,0x41,0x40,
  116.     0x3f,0x3e,0x3d,0x3c,0x3b,0x3a,0x39,0x38,0x33,0x36,0x35,0x34,0x33,0x32,0x31,0x30,
  117.     0x2f,0x2e,0x2d,0x2c,0x2b,0x2a,0x29,0x28,0x27,0x26,0x25,0x24,0x23,0x22,0x21,0x20,
  118.     0x1f,0x1e,0x1d,0x1c,0x1b,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x10,
  119.     0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00
  120. };

  121. void main()
  122. {
  123.     P0M0 = 0x00;
  124.     P0M1 = 0x00;
  125.     P1M0 = 0x00;
  126.     P1M1 = 0x00;
  127.     P2M0 = 0x00;
  128.     P2M1 = 0x00;
  129.     P3M0 = 0x00;
  130.     P3M1 = 0x00;
  131.     P4M0 = 0x00;
  132.     P4M1 = 0x00;
  133.     P5M0 = 0x00;
  134.     P5M1 = 0x00;
  135.     P6M0 = 0x00;
  136.     P6M1 = 0x00;
  137.     P7M0 = 0x00;
  138.     P7M1 = 0x00;

  139.     InitUart();
  140.   
  141. //  if(sequential_write_flash_in_one_sector(DEBUG_Data_Memory_Begin_Sector_addr, USED_BYTE_QTY_IN_ONE_SECTOR, Test_array_total))
  142. //      display_OK_LED();
  143. //  else
  144. //      display_ERROR_LED();

  145.     if(write_flash_with_protect_in_one_sector(DEBUG_Data_Memory_Begin_Sector_addr+0x3, USED_BYTE_QTY_IN_ONE_SECTOR-0x30, Test_array_total))
  146.         display_OK_LED();
  147.     else
  148.         display_ERROR_LED();

  149.     while(1);
  150. }

  151. /*----------------------------
  152. 關(guān)閉IAP
  153. ----------------------------*/
  154. void IapIdle()
  155. {
  156.     IAP_CONTR = 0;                  //關(guān)閉IAP功能
  157.     IAP_CMD = 0;                    //清除命令寄存器
  158.     IAP_TRIG = 0;                   //清除觸發(fā)寄存器
  159.     IAP_ADDRH = 0x80;               //將地址設(shè)置到非IAP區(qū)域
  160.     IAP_ADDRL = 0;
  161. }

  162. /*----------------------------
  163. 從ISP/IAP/EEPROM區(qū)域讀取一字節(jié)
  164. ----------------------------*/
  165. BYTE IapReadByte(WORD addr)
  166. {
  167.     BYTE dat;                       //數(shù)據(jù)緩沖區(qū)

  168.     IAP_CONTR = ENABLE_IAP;         //使能IAP
  169.     IAP_CMD = CMD_READ;             //設(shè)置IAP命令
  170.     IAP_ADDRL = addr;               //設(shè)置IAP低地址
  171.     IAP_ADDRH = addr >> 8;          //設(shè)置IAP高地址
  172.     IAP_TRIG = 0x5a;                //寫觸發(fā)命令(0x5a)
  173.     IAP_TRIG = 0xa5;                //寫觸發(fā)命令(0xa5)
  174.     _nop_();                        //等待ISP/IAP/EEPROM操作完成
  175.     dat = IAP_DATA;                 //讀ISP/IAP/EEPROM數(shù)據(jù)
  176.     IapIdle();                      //關(guān)閉IAP功能

  177.     return dat;                     //返回
  178. }

  179. /*----------------------------
  180. 寫一字節(jié)數(shù)據(jù)到ISP/IAP/EEPROM區(qū)域
  181. ----------------------------*/
  182. void IapProgramByte(WORD addr, BYTE dat)
  183. {
  184.     IAP_CONTR = ENABLE_IAP;         //使能IAP
  185.     IAP_CMD = CMD_PROGRAM;          //設(shè)置IAP命令
  186.     IAP_ADDRL = addr;               //設(shè)置IAP低地址
  187.     IAP_ADDRH = addr >> 8;          //設(shè)置IAP高地址
  188.     IAP_DATA = dat;                 //寫ISP/IAP/EEPROM數(shù)據(jù)
  189.     IAP_TRIG = 0x5a;                //寫觸發(fā)命令(0x5a)
  190.     IAP_TRIG = 0xa5;                //寫觸發(fā)命令(0xa5)
  191.     _nop_();                        //等待ISP/IAP/EEPROM操作完成
  192.     IapIdle();
  193. }

  194. /*----------------------------
  195. 扇區(qū)擦除
  196. ----------------------------*/
  197. void IapEraseSector(WORD addr)
  198. {
  199.     IAP_CONTR = ENABLE_IAP;         //使能IAP
  200.     IAP_CMD = CMD_ERASE;            //設(shè)置IAP命令
  201.     IAP_ADDRL = addr;               //設(shè)置IAP低地址
  202.     IAP_ADDRH = addr >> 8;          //設(shè)置IAP高地址
  203.     IAP_TRIG = 0x5a;                //寫觸發(fā)命令(0x5a)
  204.     IAP_TRIG = 0xa5;                //寫觸發(fā)命令(0xa5)
  205.     _nop_();                        //等待ISP/IAP/EEPROM操作完成
  206.     IapIdle();
  207. }

  208. /* 寫數(shù)據(jù)進 數(shù)據(jù)Flash存儲器, 只在同一個扇區(qū)內(nèi)寫,不保留原有數(shù)據(jù) */
  209. /* begin_addr,被寫數(shù)據(jù)Flash開始地址;counter,連續(xù)寫多少個字節(jié); array[],數(shù)據(jù)來源   */
  210. BYTE sequential_write_flash_in_one_sector(WORD begin_addr, WORD counter, BYTE array[])
  211. {
  212.     WORD i = 0;
  213.     WORD in_sector_begin_addr = 0;
  214.     WORD sector_addr = 0;

  215.     /* 判是否是有效范圍,此函數(shù)不允許跨扇區(qū)操作 */
  216.     if(counter > USED_BYTE_QTY_IN_ONE_SECTOR)
  217.         return  ERROR;
  218.     in_sector_begin_addr = begin_addr & 0x01ff;
  219.     if((in_sector_begin_addr + counter) > USED_BYTE_QTY_IN_ONE_SECTOR)
  220.         return ERROR;

  221.     /* 擦除 要修改/寫入 的扇區(qū) */
  222.     IapEraseSector(begin_addr);

  223.     for(i=0; i<counter; i++)
  224.     {
  225.         /* 寫一個字節(jié) */
  226.         IapProgramByte(begin_addr, array[i]);
  227.         /*  比較對錯 */
  228.         if (SendData(IapReadByte(begin_addr)) != array[i])
  229.         {
  230.             IapIdle();
  231.             return ERROR;
  232.         }
  233.         begin_addr++;
  234.     }
  235.     IapIdle();
  236.     return  OK;
  237. }

  238. /* 寫數(shù)據(jù)進數(shù)據(jù)Flash存儲器(EEPROM), 只在同一個扇區(qū)內(nèi)寫,保留同一扇區(qū)中不需修改的數(shù)據(jù)    */
  239. /* begin_addr,被寫數(shù)據(jù)Flash開始地址;counter,連續(xù)寫多少個字節(jié); array[],數(shù)據(jù)來源       */
  240. BYTE write_flash_with_protect_in_one_sector(WORD begin_addr, WORD counter, BYTE array[])
  241. {
  242.     WORD i = 0;
  243.     WORD in_sector_begin_addr = 0;
  244.     WORD sector_addr = 0;
  245.     WORD byte_addr = 0;

  246.     /* 判是否是有效范圍,此函數(shù)不允許跨扇區(qū)操作 */
  247.     if(counter > USED_BYTE_QTY_IN_ONE_SECTOR)
  248.         return ERROR;
  249.     in_sector_begin_addr = begin_addr & 0x01ff;
  250.     /* 假定從扇區(qū)的第0個字節(jié)開始,到USED_BYTE_QTY_IN_ONE_SECTOR-1個字節(jié)結(jié)束,后面部分不用,程序易編寫 */
  251.     if((in_sector_begin_addr + counter) > USED_BYTE_QTY_IN_ONE_SECTOR)
  252.         return ERROR;

  253.     /* 將該扇區(qū)數(shù)據(jù) 0 - (USED_BYTE_QTY_IN_ONE_SECTOR-1) 字節(jié)數(shù)據(jù)讀入緩沖區(qū)保護 */
  254.     sector_addr = (begin_addr & 0xfe00);
  255.     byte_addr = sector_addr;

  256.     for(i = 0; i < USED_BYTE_QTY_IN_ONE_SECTOR; i++)
  257.     {
  258.         protect_buffer[i] = IapReadByte(byte_addr++);
  259.     }

  260.     /* 將要寫入的數(shù)據(jù)寫入保護緩沖區(qū)的相應(yīng)區(qū)域,其余部分保留 */
  261.     for(i = 0; i < counter; i++)
  262.     {
  263.         protect_buffer[in_sector_begin_addr++] = array[i];
  264.     }

  265.     /* 擦除 要修改/寫入 的扇區(qū) */
  266.     IapEraseSector(sector_addr);

  267.     /* 將保護緩沖區(qū)的數(shù)據(jù)寫入 Data Flash, EEPROM */
  268.     byte_addr = sector_addr;
  269.     for(i = 0; i< USED_BYTE_QTY_IN_ONE_SECTOR; i++)
  270.     {
  271.         /* 寫一個字節(jié) */
  272.         IapProgramByte(byte_addr, protect_buffer[i]);
  273.         /*  比較對錯 */
  274.         if (SendData(IapReadByte(begin_addr)) != protect_buffer[i])
  275.         {
  276.             IapIdle();
  277.             return ERROR;
  278.         }
  279.         byte_addr++;
  280.     }
  281.     IapIdle();
  282.     return OK;
  283. }

  284. /*----------------------------
  285. 初始化串口
  286. ----------------------------*/
  287. void InitUart()
  288. {
  289.     SCON = 0x5a;                //設(shè)置串口為8位可變波特率
  290. #if URMD == 0
  291.     T2L = 0xd8;                 //設(shè)置波特率重裝值
  292.     T2H = 0xff;                 //115200 bps(65536-18432000/4/115200)
  293.     AUXR = 0x14;                //T2為1T模式, 并啟動定時器2
  294.     AUXR |= 0x01;               //選擇定時器2為串口1的波特率發(fā)生器
  295. #elif URMD == 1
  296.     AUXR = 0x40;                //定時器1為1T模式
  297.     TMOD = 0x00;                //定時器1為模式0(16位自動重載)
  298.     TL1 = 0xd8;                 //設(shè)置波特率重裝值
  299.     TH1 = 0xff;                 //115200 bps(65536-18432000/4/115200)
  300.     TR1 = 1;                    //定時器1開始啟動
  301. #else
  302.     TMOD = 0x20;                //設(shè)置定時器1為8位自動重裝載模式
  303.     AUXR = 0x40;                //定時器1為1T模式
  304.     TH1 = TL1 = 0xfb;           //115200 bps(256 - 18432000/32/115200)
  305.     TR1 = 1;
  306. #endif
  307. }

  308. /*----------------------------
  309. 發(fā)送串口數(shù)據(jù)
  310. ----------------------------*/
  311. BYTE SendData(BYTE dat)
  312. {
  313.     while (!TI);                 //等待前一個數(shù)據(jù)發(fā)送完成
  314.     TI = 0;                      //清除發(fā)送標(biāo)志
  315.     SBUF = dat;                  //發(fā)送當(dāng)前數(shù)據(jù)
  316.    
  317.     return dat;
  318. }

復(fù)制代碼
回復(fù)

使用道具 舉報

5#
ID:523982 發(fā)表于 2019-5-17 10:56 | 只看該作者
好的,謝謝各位大佬。
  1. sector_Erase(0x0000);      //擦除扇區(qū)0x0000
  2.             for(i=0;i<63;i++)
  3. {            EEPROM_Byte_write(0x0000+i,Display_GPGGA_Buffer[i]);
  4.    }
復(fù)制代碼

目前試了一下,直接讀取一一賦值,把數(shù)組內(nèi)的數(shù)據(jù)存儲到EEPROM扇區(qū)里。
回復(fù)

使用道具 舉報

6#
ID:523982 發(fā)表于 2019-5-17 10:58 | 只看該作者
yzwzfyz 發(fā)表于 2019-5-17 08:49
對于單片機來說,無所謂字串字符這一說,這些說法都是人為的,它們都是0101的二進制數(shù),將這些數(shù)據(jù)寫入EEPR ...

好的,謝謝!
回復(fù)

使用道具 舉報

7#
ID:320097 發(fā)表于 2019-5-17 15:46 | 只看該作者
不知道自帶的那個EEPROM耐用嗎,和24C02這種外部存儲器相比
回復(fù)

使用道具 舉報

8#
ID:540964 發(fā)表于 2019-5-17 20:28 | 只看該作者
首先你要明白字符串是什么,它只是一個特定格式的數(shù)組,然后你知道如何處理數(shù)組數(shù)據(jù)就自然明白字符串的讀寫方式了
回復(fù)

使用道具 舉報

9#
ID:523982 發(fā)表于 2019-5-17 21:43 | 只看該作者
歐陽云天 發(fā)表于 2019-5-17 15:46
不知道自帶的那個EEPROM耐用嗎,和24C02這種外部存儲器相比

自帶的空間太少了,而是stc的eeprom實際上是flash,不是真的eeprom,寫入只能擦除整個扇區(qū),麻煩。手冊上說可讀寫10w次,專門用還是24C02好點吧。
回復(fù)

使用道具 舉報

10#
ID:320097 發(fā)表于 2019-5-20 21:01 | 只看該作者
jakcypater 發(fā)表于 2019-5-17 21:43
自帶的空間太少了,而是stc的eeprom實際上是flash,不是真的eeprom,寫入只能擦除整個扇區(qū),麻煩。手冊上 ...

其實 我也是一直每整明白怎么去使用內(nèi)部存儲,比如就存儲一 兩個數(shù)字的話,用外部存儲器有點浪費
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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