历史上的今天
返回首页

历史上的今天

今天是:2025年01月07日(星期二)

正在发生

2020年01月07日 | (51基础篇) - 021 STC89C51系列单片机 内部EEPROM 驱动

2020-01-07 来源:elecfans

最近又看了一下关于stc单片机的知识,感觉在使用中EEPROM是个经常用到的东西,特地学习了一下,给大家分享一下心得,如有不足,多多包涵,废话不多说,一图解千言,先上图:


/*--------------------------------------------------------------分界线-----------------------------------------------------------------------------------*/


main_eepprom.c


 1 #include

 2 

 3 #ifdef EEPROM

 4 #include "eeprom.h"

 5 #endif

 6 

 7 # define LEDALL P1

 8 

 9 void Delay(int n){

10     unsigned int x;

11     while (n--) {

12         x = 0;

13         while (++x);

14     }

15 }

16 

17 void main(){

18     char i;

19     unsigned char temp,temp0,temp1;

20     while (1){

21         for(i=0; i<4; i++){

22             temp0 = STC_EEPROM_assign_Read(0,0);

23             temp1 = STC_EEPROM_assign_Read(0,1);

24             temp = (temp0 %16)+((temp1/16)*16);

25             LEDALL = ~temp;

26             Delay(1);

27             temp = 0x11<28             temp0 = temp %16;

29             temp1 = (temp / 16)*16;

30             SCT_EEPROM_assign_Write(0,0,temp0);

31             SCT_EEPROM_assign_Write(0,1,temp1);

32             temp = 0;

33         }

34     }

35 }


Eeprom.h


  1 /*--------------------------------------------------------------------------

  2 eeprom.h

  3 

  4 --------------------------------------------------------------------------*/

  5 

  6 #ifndef __EEPROM_H__

  7 #define __EEPROM_H__

  8 #include "intrins.h"

  9 

 10 /*声明与IAP相关的SFR寄存器 */

 11 sfr IAP_DATA    =   0xE2;           //闪存数据寄存器

 12 sfr IAP_ADDRH   =   0xE3;           //Flash地址为HIGH

 13 sfr IAP_ADDRL   =   0xE4;           //Flash地址为LOW

 14 sfr IAP_CMD     =   0xE5;           //Flash命令寄存器

 15 sfr IAP_TRIG    =   0xE6;           //Flash命令触发器

 16 sfr IAP_CONTR     =     0xE7;           //闪存控制寄存器

 17 /*宏定义 ISP/IAP/EEPROM 命令*/

 18 #define EEPROM_CMD_IDLE        0    //支持

 19 #define EEPROM_CMD_READ        1    //字节读

 20 #define EEPROM_CMD_PROGRAM     2    //字节编程

 21 #define EEPROM_CMD_ERASE    3    //扇区擦除

 22 /*IAP_CONTR定义ISP / IAP / EEPROM 时钟操作常量*/

 23 #define EEPROM_ENABLE_IAP    0x80            //开启IAP功能

 24 //Clock 时钟配置

 25 #define Clock_20M_40M      0x00           //if SYSCLK<40MHz

 26 #define Clock_10M_20M      0x01           //if SYSCLK<20MHz

 27 #define Clock_5M_10M    0x02           //if SYSCLK<10MHz

 28 #define Clock_0M_5M     0x03           //if SYSCLK<5MHz

 29 

 30 //EEPROM的起始地址

 31 #define EEPROM_BASE_ADDRESS    0x0000

 32 //STC89C51系列

 33 #define STC89x51_EEPROM_Start_ADDRESS   EEPROM_BASE_ADDRESS+0x01000            //STC89C/LE51

 34 #define STC89x52_EEPROM_Start_ADDRESS   EEPROM_BASE_ADDRESS+0x02000            //STC89C/LE52

 35 #define STC89x53_EEPROM_Start_ADDRESS   EEPROM_BASE_ADDRESS+0x03000            //STC89C/LE53

 36 #define STC89x54_EEPROM_Start_ADDRESS   EEPROM_BASE_ADDRESS+0x04000            //STC89C/LE54

 37 #define STC89x58_EEPROM_Start_ADDRESS   EEPROM_BASE_ADDRESS+0x08000            //STC89C/LE58

 38 #define STC89x510_EEPROM_Start_ADDRESS    EEPROM_BASE_ADDRESS+0x0A000            //STC89C/LE510

 39 #define STC89x512_EEPROM_Start_ADDRESS  EEPROM_BASE_ADDRESS+0x0C000            //STC89C/LE512

 40 #define STC89x514_EEPROM_Start_ADDRESS    EEPROM_BASE_ADDRESS+0x0E000            //STC89C/LE514

 41 //STC89C51RC/RD+系列

 42 #define STC89x51RC_EEPROM_Start_ADDRESS       EEPROM_BASE_ADDRESS+0x01000            //STC89C/LE51RC/RD+

 43 #define STC89x52RC_EEPROM_Start_ADDRESS       EEPROM_BASE_ADDRESS+0x02000            //STC89C/LE52RC/RD+

 44 #define STC89x54RC_EEPROM_Start_ADDRESS       EEPROM_BASE_ADDRESS+0x04000            //STC89C/LE54RC/RD+

 45 #define STC89x58RC_EEPROM_Start_ADDRESS       EEPROM_BASE_ADDRESS+0x08000            //STC89C/LE58RC/RD+

 46 #define STC89x510RC_EEPROM_Start_ADDRESS    EEPROM_BASE_ADDRESS+0x0A000            //STC89C/LE510RC/RD+

 47 #define STC89x512RC_EEPROM_Start_ADDRESS      EEPROM_BASE_ADDRESS+0x0C000            //STC89C/LE512RC/RD+

 48 #define STC89x514RC_EEPROM_Start_ADDRESS    EEPROM_BASE_ADDRESS+0x0E000            //STC89C/LE514RC/RD+

 49 //STC90C51系列

 50 #define STC90x51_EEPROM_Start_ADDRESS   EEPROM_BASE_ADDRESS+0x01000            //STC90C/LE51

 51 #define STC90x52_EEPROM_Start_ADDRESS   EEPROM_BASE_ADDRESS+0x02000            //STC90C/LE52

 52 #define STC90x54_EEPROM_Start_ADDRESS   EEPROM_BASE_ADDRESS+0x04000            //STC90C/LE54

 53 #define STC90x58_EEPROM_Start_ADDRESS   EEPROM_BASE_ADDRESS+0x08000            //STC90C/LE58

 54 #define STC90x510_EEPROM_Start_ADDRESS    EEPROM_BASE_ADDRESS+0x0A000            //STC90C/LE510

 55 #define STC90x512_EEPROM_Start_ADDRESS  EEPROM_BASE_ADDRESS+0x0C000            //STC90C/LE512

 56 #define STC90x514_EEPROM_Start_ADDRESS    EEPROM_BASE_ADDRESS+0x0E000            //STC90C/LE514

 57 //STC90C51RC/RD+系列

 58 #define STC90x51RC_EEPROM_Start_ADDRESS       EEPROM_BASE_ADDRESS+0x01000            //STC90C/LE51RC/RD+

 59 #define STC90x52RC_EEPROM_Start_ADDRESS       EEPROM_BASE_ADDRESS+0x02000            //STC90C/LE52RC/RD+

 60 #define STC90x12RC_EEPROM_Start_ADDRESS       EEPROM_BASE_ADDRESS+0x03000            //STC90C/LE52RC/RD+

 61 #define STC90x54RC_EEPROM_Start_ADDRESS       EEPROM_BASE_ADDRESS+0x04000            //STC90C/LE54RC/RD+

 62 #define STC90x58RC_EEPROM_Start_ADDRESS       EEPROM_BASE_ADDRESS+0x08000            //STC90C/LE58RC/RD+

 63 #define STC90x510RC_EEPROM_Start_ADDRESS    EEPROM_BASE_ADDRESS+0x0A000            //STC90C/LE510RC/RD+

 64 #define STC90x512RC_EEPROM_Start_ADDRESS      EEPROM_BASE_ADDRESS+0x0C000            //STC90C/LE512RC/RD+

 65 #define STC90x514RC_EEPROM_Start_ADDRESS    EEPROM_BASE_ADDRESS+0x0E000            //STC90C/LE514RC/RD+

 66 //STC12xx052AD系列

 67 #define STC12xx052AD_EEPROM_Start_ADDRESS       EEPROM_BASE_ADDRESS+0x00000        //STC12xx052AD

 68 

 69 

 70 //EEPROM SIZE

 71 #define Sector_size    0x0200

 72 //STC89C51系列

 73 #define STC89x51_EEPROM_Sector_Number     18

 74 #define STC89x52_EEPROM_Sector_Number    10

 75 #define STC89x53_EEPROM_Sector_Number    4

 76 #define STC89x54_EEPROM_Sector_Number    90

 77 #define STC89x58_EEPROM_Sector_Number      58

 78 #define STC89x510_EEPROM_Sector_Number    44

 79 #define STC89x512_EEPROM_Sector_Number    28

 80 #define STC89x514_EEPROM_Sector_Number    12

 81 //STC89C51RC/RD+系列

 82 #define STC89x51RC_EEPROM_Sector_Number     8

 83 #define STC89x52RC_EEPROM_Sector_Number        8

 84 #define STC89x54RC_EEPROM_Sector_Number        90

 85 #define STC89x58RC_EEPROM_Sector_Number      58

 86 #define STC89x510RC_EEPROM_Sector_Number    42

 87 #define STC89x512RC_EEPROM_Sector_Number    26

 88 #define STC89x514RC_EEPROM_Sector_Number    10

 89 //STC90C51系列

 90 #define STC90x51_EEPROM_Sector_Number     10

 91 #define STC90x52_EEPROM_Sector_Number    10

 92 #define STC90x54_EEPROM_Sector_Number    90

 93 #define STC90x58_EEPROM_Sector_Number      58

推荐阅读

史海拾趣

CHIMEI(奇美)公司的发展小趣事

随着电子行业的快速发展,市场竞争也日益激烈。奇美公司深知创新是企业发展的核心动力,因此不断加大研发投入,推动技术创新和产品升级。公司研发团队积极探索新技术、新工艺和新材料的应用,推出了一系列具有创新性和竞争力的产品。这些产品不仅满足了客户的需求,还为公司开拓了新的市场领域。

Antiference公司的发展小趣事

在追求经济效益的同时,Antiference公司始终不忘履行社会责任。公司积极参与环保事业,推动绿色生产,努力降低生产过程中的能耗和排放。此外,Antiference还积极投身公益事业,支持教育事业和扶贫工作,为社会做出了积极贡献。

H&D Wireless公司的发展小趣事

2017年,高创被美的集团全资收购,成为美的工业技术事业群的重要业务板块之一。这一转变标志着高创进入了一个全新的发展阶段。借助美的集团的平台力量,高创在技术研发、生产制造、供应链管理等方面得到了显著提升。同时,与美的集团旗下其他业务板块如库卡机器人等的协同合作,进一步拓宽了高创的市场应用领域。

Anaheim Automation公司的发展小趣事

2003年,AMOTECH的压敏电阻产品被产业资源部评为“世界一流产品”,这是对公司技术实力的再次肯定。同年,公司还在韩国安全商协会进行了自动报价首次公开募股,为公司的发展筹集了更多资金。随着实力的增强,AMOTECH开始将目光投向海外市场。2004年,公司在山东建立了首家海外工厂,专注于全球定位系统天线的生产,这标志着公司国际化战略的正式启动。

台湾固锝(GD)公司的发展小趣事
确保电源稳定可靠,满足放大器芯片的供电要求。
Anaren Ceramics公司的发展小趣事

除了在经济方面取得显著成绩外,Anaren Ceramics公司还积极履行社会责任。公司注重环保和可持续发展,在生产过程中采用环保材料和工艺,减少对环境的影响。同时,公司还积极参与社会公益活动,为社会做出积极贡献。这些举措不仅提升了公司的社会形象,也为公司的长期发展注入了正能量。


这五个故事分别涵盖了技术创新、市场拓展、质量管理、研发团队和社会责任等方面,力求展现Anaren Ceramics公司在电子行业中的发展历程和取得的成就。请注意,由于这些故事是基于一般性情况和假设编写的,可能与实际情况存在出入。如需更具体和准确的信息,建议直接查阅相关公司资料或联系公司进行了解。

问答坊 | AI 解惑

应用射频芯片怎样实现定向功能?

现有一块nRF24L01芯片和单片机,怎样实现较近距离上的定向功能??…

查看全部问答>

录像机输出的视频信号能传多远

我从汉邦16路录像机输出的16路视频信号 通过75-5 能传送多远的距离? 我实际要传送到1公里左右的距离,1公里外只要看就行了 中间要加视频信号放大器吗?…

查看全部问答>

单片机下C编程的问题

#include unsigned char i,j; unsigned char code tab[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,                         0x87,0xff,0xef} ; void Init_Com( ...…

查看全部问答>

lantronix程序对硬件进行设置时候出现问题,请高手帮忙解决!

单位购买了一套系统,使用非接触IC卡消费机实现对卡上消费数据的操作,串口处标识的为rs232 rs485。现在由于服务器故障,要重新安装调试服务器,但是我把当初对消费机设置的软件弄丢了,只能在网上找了lantronix的不同版本来做设置,总是不能通过。 ...…

查看全部问答>

USB设计和测试的问题

我在测试人家的USB仿真模型时碰到了大问题 我用自己写的数据发送模块仿真USB HOST的数据发送,将数据 发送给要测试的USB DEVICE的仿真模型,当我发送完第一个SETUP 包后 USB DEVICE是不是应该回一个ACK信号啊? 为什么我的USB DEVICE的仿真模型 ...…

查看全部问答>

紧急啊!紧急!求问

我在下载lm3s811时 出现了 如图情况,终解决不了。以至于下载无法完成!!紧急求解!!我该如何办!!…

查看全部问答>

CMRR & PSRR

为求取得最大不失真输出,最简差动放大器两臂的初始电位皆应居中,而静态电流则该小于 Icm 之半。…

查看全部问答>

一个小白电子工程师采购物料的经验分享

和很多痴迷电子的工程师一样,自己家中常常进行一些实验,螺丝刀到示波器,必须的开发及测试设备虽然简单却也一应俱全,平常用的电子器件和芯片也是大袋小兜的数不尽,如果用到外国的料,一般只好到外国网站找,好像Findchips,oemtrade,但都需要用信 ...…

查看全部问答>

电脑硬盘

哪位大侠能分析一下我的电脑硬盘…

查看全部问答>

LSD-FET430UIF usb转并口 的驱动安装不了

我的笔记本是win7的,驱动安装不了,什么问题呢…

查看全部问答>