请教51单片机内部EEPROM的应用

 我来答
意法半导体(中国)投资有限公司 2023-06-12
展开全部
单片机其实就是一种可以由人对它进行编程从而通过它控制一些与它相连的器件的微型处理器。通俗地说就是你用某种特定的语言在特定的软件里(如keil)编写好一段程序后通过一定的方法转到一个芯片里(这个芯片就是单片机),给芯片上电后它就可以根据你编的程序控制它所连接的其他器件了。希望能帮到你了… 更专业的解答可联系意法半导体,产品服务:意法半导体单片机产品线拥有业界宽广、极具创新力的32位产品系列 – STM32,覆盖超低功耗、超高性能方向.目前提供16大产品线 (F0, G0, F1, F2, F3, G4, F4, F7, H7, MP1, L0, L1, L4, L4+,L5, WB),超…
liliwei5
2016-11-07 · TA获得超过5231个赞
知道小有建树答主
回答量:338
采纳率:86%
帮助的人:192万
展开全部

不知道你用的是那种51单片机,我就当是STC89C51系列的了。

这问题涉及方面还挺多,这样一一回答还真不好弄,我给你几个方向看看能不能帮到你。

  1. 参考手册(附件我以上传)第9章。

  2. 官方已给了例程,你可以参考一下,最下面我给你,我已复制在下面。

  3. 注意扇区问题(分区,地址,擦除时间等)

  4. 存储前要先擦除扇区

  5. 下面示例一下基本使用

    num = byte_read(0x2000); //读取EEPROM中地址0x2000数据,赋值给num

    SectorErase(0x2000);       //擦除第1扇区

    byte_write(0x2000, num);   //将num数据写入EPROM地址0x2000中



# include <reg52.h>
# include <intrins.h>

# define RdCommand    0x01     //定义ISP的操作命令
# define PrgCommand   0x02
# define EraseCommand 0x03
# define WaitTime     0x01      //定义CPU的等待时间 @11.0592MHz
# define Error 1
# define Ok 0

sfr ISP_DATA  = 0xE2;  //寄存器申明
sfr ISP_ADDRH = 0xE3;
sfr ISP_ADDRL = 0xE4;
sfr ISP_CMD   = 0xE5;
sfr ISP_TRIG  = 0xE6;
sfr ISP_CONTR = 0xE7;

void ISP_IAP_enable(void)  // 打开 ISP,IAP 功能
{
EA = 0; // 关中断 
ISP_CONTR   =  ISP_CONTR & 0x18;       // 0001,1000
ISP_CONTR   = ISP_CONTR | WaitTime; // 写入硬件延时
ISP_CONTR   = ISP_CONTR | 0x80;       // ISPEN=1
}

void ISP_IAP_disable(void)  // 关闭 ISP,IAP 功能
{
ISP_CONTR = ISP_CONTR & 0x7F; // ISPEN = 0
ISP_TRIG = 0x00;
EA =   1;      // 开中断
}

void ISPgoon(void) // 公用的触发代码
{
ISP_IAP_enable(); // 打开 ISP,IAP 功能
ISP_TRIG = 0x46; // 触发ISP_IAP命令字节1
ISP_TRIG = 0xB9; // 触发ISP_IAP命令字节2
_nop_();  // 延时一个机器周期
}

unsigned char byte_read(unsigned int byte_addr) // 读字节
{
ISP_ADDRH   =   (unsigned char)(byte_addr >> 8);       // 地址赋值
ISP_ADDRL   =   (unsigned char)(byte_addr & 0x00FF);
ISP_CMD     =   ISP_CMD & 0xF8;    // 清除低3位
ISP_CMD     =   ISP_CMD | RdCommand;       // 写入读命令
ISPgoon();                    // 触发执行
ISP_IAP_disable();                     // 关闭ISP,IAP功能
return (ISP_DATA);                         // 返回读到的数据
}

void SectorErase(unsigned int sector_addr)  //扇区擦除
{
// unsigned int iSectorAddr;

// iSectorAddr  =  (sector_addr & 0xFE00);              // 取扇区地址 
// ISP_ADDRH    =  (unsigned char)(iSectorAddr >> 8);
// ISP_ADDRL    =  0x00;
ISP_ADDRH    =  (unsigned char)(sector_addr >> 8);  // 取扇区地址高8位 
ISP_ADDRL    =  (unsigned char)sector_addr;  // 取扇区地址低8位
ISP_CMD      =  ISP_CMD & 0xF8;  // 清空低3位 
ISP_CMD      =  ISP_CMD | EraseCommand;  // 擦除命令3 
ISPgoon();     // 触发执行
ISP_IAP_disable();  // 关闭ISP,IAP功能
}

void byte_write(unsigned int byte_addr, unsigned char original_data) // 写字节
{
ISP_ADDRH   = (unsigned char)(byte_addr >> 8);      // 取地址
ISP_ADDRL   = (unsigned char)(byte_addr & 0x00FF);
ISP_CMD     =   ISP_CMD & 0xF8;             // 清低3位
ISP_CMD     =   ISP_CMD | PrgCommand;            // 写命令2
ISP_DATA    =   original_data; // 写入数据准备
ISPgoon(); // 触发执行
ISP_IAP_disable(); // 关闭IAP功能
}
意法半导体(中国)投资有限公司
2020-01-15 广告
单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
zhxiufan
2018-07-05 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38387
国家科技进步奖

向TA提问 私信TA
展开全部
如果说的是STC的内部EEPROM的话,可以参考其数据手册来使用。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式