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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12928|回復: 12
打印 上一主題 下一主題
收起左側(cè)

STC單片機內(nèi)部EEPROM的使用-記錄上電次數(shù)

  [復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:74187 發(fā)表于 2018-10-12 09:28 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
大多數(shù)情況下,大家存儲掉電的數(shù)據(jù)都是用的24C02,在一些需要考慮成本的場合,內(nèi)部的EEPROM也是可以考慮使用的,這個程序介紹一下,STC內(nèi)部的EEPROM的使用,程序的功能是記錄上電次數(shù),然后加1,在數(shù)碼管上顯示出來。源碼 006 內(nèi)部EEPROM使用.rar (47.73 KB, 下載次數(shù): 173)


  1. /*******************************************************************************
  2. * 文件名: 數(shù)碼管顯示上電計數(shù)值
  3. * 描  述: 上電計數(shù)
  4. * 功  能:數(shù)碼管的使用  11.0592MHZ
  5. * 作  者:大核桃
  6. * 版本號:1.0.1(2017.05.23)
  7. *******************************************************************************/
  8. #include "stc15w.h"//頭文件
  9. #include "intrins.h"

  10. /*******************************************************************************
  11. * 文件名: 重定義
  12. * 描  述:   
  13. * 功  能:
  14. * 作  者:大核桃
  15. * 版本號:1.0.1(2017.05.23)
  16. *******************************************************************************/
  17. typedef unsigned char uint8;
  18. typedef unsigned int  uint16;
  19. typedef unsigned long uint32;

  20. /*******************************************************************************
  21. * 文件名:共陽數(shù)碼管真值表
  22. * 描  述:
  23. * 功  能:
  24. * 作  者:大核桃
  25. * 版本號:1.0.1(2015.03.03)
  26. *******************************************************************************/
  27. code uint8 LedChar[] = {
  28.         0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
  29.         0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e
  30. };

  31. uint16 counter;

  32. /*******************************************************************************
  33. * 文件名:單獨位定義
  34. * 描  述:   
  35. * 功  能:
  36. * 作  者:大核桃
  37. * 版本號:1.0.1(2017.05.23)
  38. *******************************************************************************/
  39. sbit LED0 = P1^0;//第1組LED
  40. sbit LED1 = P1^1;//第2組LED
  41. sbit LED2 = P1^2;//第3組LED                                 
  42. sbit LED3 = P1^3;//第4組LED
  43. sbit LED4 = P1^4;//第5組LED
  44. sbit LED5 = P3^2;//第6組LED
  45. sbit LED6 = P0^0;//第7組LED
  46. sbit LED7 = P0^1;//第8組LED

  47. sbit LEDS1 = P3^3;//數(shù)碼管1
  48. sbit LEDS2 = P3^4;//數(shù)碼管2
  49. sbit LEDS3 = P3^6;//數(shù)碼管3
  50. sbit LEDS4 = P3^7;//數(shù)碼管4
  51. /*******************************************************************************
  52. * 文件名:全局變量定義區(qū)域
  53. * 描  述:
  54. * 功  能:
  55. * 作  者:大核桃
  56. * 版本號:1.0.1(2017.05.23)
  57. *******************************************************************************/
  58. #define CMD_IDLE    0               //空閑模式
  59. #define CMD_READ    1               //IAP字節(jié)讀命令
  60. #define CMD_PROGRAM 2               //IAP字節(jié)編程命令
  61. #define CMD_ERASE   3               //IAP扇區(qū)擦除命令

  62. #define ENABLE_IAP  0x82            //if SYSCLK<20MHz
  63. /*******************************************************************************
  64. * 文件名:函數(shù)前置聲明
  65. * 描  述:   
  66. * 功  能:
  67. * 作  者:大核桃
  68. * 版本號:1.0.1(2017.05.23)
  69. *******************************************************************************/
  70. void Mcu_Port_Init();
  71. void LedScan();
  72. void Delay500ms(); //24MHZ
  73. void Time0_Init();//定時器0
  74. void IapIdle();
  75. uint8 IapReadByte(uint16 addr);
  76. void IapProgramByte(uint16 addr, uint8 dat);
  77. void IapEraseSector(uint16 addr);
  78. #define Delay()                {_nop_();_nop_();_nop_();_nop_();}
  79. /*******************************************************************************
  80. * 文件名
  81. * 描  述: 主函數(shù)  
  82. * 功  能:入口
  83. * 作  者:大核桃
  84. * 版本號:1.0.1(2017.05.23)
  85. *******************************************************************************/
  86. void main(void)
  87. {                                       
  88.         counter = IapReadByte(0x0000);//讀取數(shù)據(jù)
  89.         counter++;//寫
  90.         Mcu_Port_Init();//IO上電初始化
  91.         Time0_Init();
  92.         IapEraseSector(0x0000);//擦除數(shù)據(jù)
  93.         IapProgramByte(0x0000, counter);//寫入數(shù)據(jù)
  94.         LED0 = 0;//第1組LED,如果使能請置為1
  95.         LED1 = 0;
  96.         LED2 = 0;
  97.         LED3 = 0;
  98.         LED4 = 0;
  99.         LED5 = 0;
  100.         LED6 = 0;
  101.         LED7 = 0;

  102.         while(1);
  103. }

  104. /*******************************************************************************
  105. * 文件名:void LedScan()
  106. * 描  述: LED刷新
  107. * 功  能:
  108. * 作  者:大核桃
  109. * 版本號:1.0.1(2017.05.23)
  110. *******************************************************************************/
  111. void LedScan()
  112. {
  113.         static uint8 i = 0;

  114.         P2 = 0Xff;
  115.         switch(i)
  116.         {
  117.                 case 0: LEDS4 = 0;LEDS1 = 1;P2 = LedChar[counter / 1000 % 10];i++;break;
  118.                 case 1: LEDS1 = 0;LEDS2 = 1;P2 = LedChar[counter / 100 % 10];i++;break;
  119.                 case 2: LEDS2 = 0;LEDS3 = 1;P2 = LedChar[counter / 10 % 10];i++;break;
  120.                 case 3: LEDS3 = 0;LEDS4 = 1;P2 = LedChar[counter % 10];i = 0;break;

  121.                 default:break;
  122.         }
  123. }

  124. /*******************************************************************************
  125. * 文件名:void Time0_Init()
  126. * 描  述: 定時器0初始化
  127. * 功  能:1毫秒@11.0592MHz 1T
  128. * 作  者:大核桃
  129. * 版本號:1.0.1(2017.05.23)
  130. *******************************************************************************/
  131. void Time0_Init(void)
  132. {
  133.         AUXR |= 0x80;                //定時器時鐘1T模式
  134.         TMOD &= 0xF0;                //設(shè)置定時器模式
  135.         TL0 = 0xCD;                    //設(shè)置定時初值
  136.         TH0 = 0xD4;                    //設(shè)置定時初值
  137.         ET0 = 1;
  138.         TR0 = 1;                    //定時器0開始計時
  139.         EA = 1;               
  140. }

  141. /*******************************************************************************
  142. * 文件名:
  143. * 描  述: 中斷函數(shù)
  144. * 功  能:1毫秒@11.0592MHz
  145. * 作  者:大核桃
  146. * 版本號:1.0.1(2017.05.23)
  147. *******************************************************************************/
  148. void ET0_IRQHandler() interrupt 1
  149. {
  150.         LedScan();               
  151. }

  152. /*******************************************************************************
  153. * 文件名:void Mcu_Port_Init()
  154. * 描  述: io初始化
  155. * 功  能:
  156. * 作  者:大核桃
  157. * 版本號:1.0.1(2017.05.23)
  158. *******************************************************************************/
  159. void Mcu_Port_Init()
  160. {
  161.         //將P0口低二位配置為推挽輸出
  162.         //234567位配置位高阻輸入
  163.         P0M1 = 0xFC;//1111 1100
  164.         P0M0 = 0X03;//0000 0011
  165.         //P0 = 0X01;//第6個
  166.         //P0 = 0X02;//第7個
  167.         //高3位配置高阻輸入,用作模擬口
  168.         //其他配置推挽輸出,驅(qū)動LED
  169.         P1M1 = 0xE0;//1110 0000
  170.         P1M0 = 0X1F;//0001 1111
  171.         //P2口配置準雙向口
  172.         P2M1 = 0X00;
  173.         P2M0 = 0X00;
  174.         P2 = 0Xff; //上電為1111 1111

  175. //        //P54,P55口為推挽輸出
  176.         P5M1 = 0X00;
  177.         P5M0 = 0X00;
  178.         P5 = 0xFF;

  179.         //P37,P36,3.2,P3.3 P3.4口為推挽輸出
  180.         P3M1 = 0X00;
  181.         P3M0 = 0XFC;
  182.         P3 = 0X23; //0010 0111//第5個LED端口        
  183. }

  184. /*******************************************************************************
  185. * 文件名:void Delay500ms()                //@24.000MHz
  186. * 描  述:Y5內(nèi)核延時
  187. * 功  能:
  188. * 作  者:大核桃
  189. * 版本號:1.0.1(2017.05.23)
  190. *******************************************************************************/
  191. void Delay500ms()                //@24.000MHz
  192. {
  193.         unsigned char i, j, k;

  194.         _nop_();
  195.         _nop_();
  196.         i = 46;
  197.         j = 153;
  198.         k = 245;
  199.         do
  200.         {
  201.                 do
  202.                 {
  203.                         while (--k);
  204.                 } while (--j);
  205.         } while (--i);
  206. }

  207. /*******************************************************************************
  208. * 文件名:void IapIdle()
  209. * 描  述:關(guān)閉IAP
  210. * 功  能:
  211. * 作  者:大核桃
  212. * 版本號:1.0.1(2017.05.23)
  213. *******************************************************************************/
  214. void IapIdle()
  215. {
  216.     IAP_CONTR = 0;                  //關(guān)閉IAP功能
  217.     IAP_CMD = 0;                    //清除命令寄存器
  218.     IAP_TRIG = 0;                   //清除觸發(fā)寄存器
  219.     IAP_ADDRH = 0x80;               //將地址設(shè)置到非IAP區(qū)域
  220.     IAP_ADDRL = 0;
  221. }
  222. /*******************************************************************************
  223. * 文件名:uint8 IapReadByte(uint16 addr)
  224. * 描  述:從ISP/IAP/EEPROM區(qū)域讀取一字節(jié)
  225. * 功  能:
  226. * 作  者:大核桃
  227. * 版本號:1.0.1(2017.05.23)
  228. *******************************************************************************/
  229. uint8 IapReadByte(uint16 addr)
  230. {
  231.     uint8 dat;                       //數(shù)據(jù)緩沖區(qū)

  232.     IAP_CONTR = ENABLE_IAP;         //使能IAP
  233.     IAP_CMD = CMD_READ;             //設(shè)置IAP命令
  234.     IAP_ADDRL = addr;               //設(shè)置IAP低地址
  235.     IAP_ADDRH = addr >> 8;          //設(shè)置IAP高地址
  236.     IAP_TRIG = 0x5a;                //寫觸發(fā)命令(0x5a)
  237.     IAP_TRIG = 0xa5;                //寫觸發(fā)命令(0xa5)
  238.         _nop_();                        //等待ISP/IAP/EEPROM操作完成
  239.     dat = IAP_DATA;                 //讀ISP/IAP/EEPROM數(shù)據(jù)
  240.     IapIdle();                      //關(guān)閉IAP功能

  241.     return dat;                     //返回
  242. }
  243. /*******************************************************************************
  244. * 文件名:void IapProgramByte(uint16 addr, uint8 dat)
  245. * 描  述: 寫一字節(jié)數(shù)據(jù)到ISP/IAP/EEPROM區(qū)域
  246. * 功  能:
  247. * 作  者:大核桃
  248. * 版本號:1.0.1(2017.05.23)
  249. *******************************************************************************/
  250. void IapProgramByte(uint16 addr, uint8 dat)
  251. {
  252.     IAP_CONTR = ENABLE_IAP;         //使能IAP
  253.     IAP_CMD = CMD_PROGRAM;          //設(shè)置IAP命令
  254.     IAP_ADDRL = addr;               //設(shè)置IAP低地址
  255.     IAP_ADDRH = addr >> 8;          //設(shè)置IAP高地址
  256.     IAP_DATA = dat;                 //寫ISP/IAP/EEPROM數(shù)據(jù)
  257.     IAP_TRIG = 0x5a;                //寫觸發(fā)命令(0x5a)
  258.     IAP_TRIG = 0xa5;                //寫觸發(fā)命令(0xa5)
  259.         _nop_();                        //等待ISP/IAP/EEPROM操作完成
  260.     IapIdle();
  261. }

  262. /*******************************************************************************
  263. * 文件名:void IapEraseSector(uint16 addr)
  264. * 描  述: 扇區(qū)擦除
  265. * 功  能:
  266. * 作  者:大核桃
  267. * 版本號:1.0.1(2017.05.23)
  268. *******************************************************************************/
  269. void IapEraseSector(uint16 addr)
  270. {
  271.     IAP_CONTR = ENABLE_IAP;         //使能IAP
  272.     IAP_CMD = CMD_ERASE;            //設(shè)置IAP命令
  273.     IAP_ADDRL = addr;               //設(shè)置IAP低地址
  274.     IAP_ADDRH = addr >> 8;          //設(shè)置IAP高地址
  275.     IAP_TRIG = 0x5a;                //寫觸發(fā)命令(0x5a)
  276.     IAP_TRIG = 0xa5;                //寫觸發(fā)命令(0xa5)
  277.     _nop_();                        //等待ISP/IAP/EEPROM操作完成
  278.     IapIdle();
  279. }

復制代碼



評分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏9 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:59884 發(fā)表于 2019-4-16 16:27 | 只看該作者
謝謝樓主分享!
回復

使用道具 舉報

板凳
ID:556147 發(fā)表于 2019-7-14 01:04 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

地板
ID:590752 發(fā)表于 2019-7-26 13:17 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

5#
ID:27027 發(fā)表于 2019-10-8 22:09 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

6#
ID:258210 發(fā)表于 2019-11-15 15:24 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

7#
ID:477474 發(fā)表于 2020-2-5 13:25 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

8#
ID:94510 發(fā)表于 2020-10-11 08:22 | 只看該作者
剛學習 請問一下 這個程序使用的芯片是STC15W什么型號的  謝謝
回復

使用道具 舉報

9#
ID:428114 發(fā)表于 2021-3-25 14:20 | 只看該作者
STC的內(nèi)部EEPROM,擦除是整個扇區(qū)的操作,比較郁悶。
回復

使用道具 舉報

10#
ID:1049825 發(fā)表于 2022-10-31 20:41 | 只看該作者
樓主的帖子都看了下,很多都還沒詳細研究,先收藏了,真是寶貝。
回復

使用道具 舉報

11#
ID:47634 發(fā)表于 2023-2-19 11:01 | 只看該作者
很好的例子,EEPROM編程學習了
回復

使用道具 舉報

12#
ID:1107339 發(fā)表于 2023-12-31 21:55 | 只看該作者
very nice!
回復

使用道具 舉報

13#
ID:67838 發(fā)表于 2024-12-29 22:59 | 只看該作者

謝謝樓主分享!辛苦了
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人在线免费电影 | 欧美一区二区成人 | 精品久久久久香蕉网 | 久久综合一区二区三区 | 伦理午夜电影免费观看 | 亚洲乱码一区二区 | 美国十次成人欧美色导视频 | 精品国产乱码久久久久久88av | 亚洲综合网站 | 色综合一区二区 | 国产精品中文字幕在线观看 | 中文字幕在线第二页 | 国产一区二区三区四区hd | 91在线视频播放 | 国产美女精品 | 国产精品99久久久精品免费观看 | 九九av| 一区二区三区四区免费视频 | 日韩精品一区二区三区视频播放 | 亚洲综合色 | 日韩视频在线观看一区二区 | 精品国产乱码久久久久久88av | 欧美aaaaa| 久久综合九九 | 亚洲视频一 | 成人国产在线视频 | 综合久久久久久久 | 天天狠狠 | 久久精品一二三影院 | 国产乱码精品一品二品 | 黄色片a级 | 中文字幕国产在线 | 国产在线视频一区 | 国产精品久久久久久久久久免费看 | 人人看人人干 | 中文字幕在线观看一区 | 日韩福利在线 | 一区二区三区欧美 | 国产电影一区二区在线观看 | 成人片免费看 | 国产欧美精品一区二区色综合朱莉 |