STC单片机片内EEPROM的读写

发布者:Xiaoxue666最新更新时间:2018-07-17 来源: eefocus关键字:STC单片机  片内EEPROM  读写 手机看文章 扫描二维码
随时随地手机看文章

宏晶STC很多系列的单片机片内都集成了EEPROM存储器(其实是Data Flash),方便用户使用,想得真周到!今天写了个小程序,测试了一下,工作正常。下面就上我自己写的源程序。本人在STC89C52RC单片机上试验成功。

首先是stcEEPROM.h头文件内容:


/*

When         Who     Remarks

----------------------------------

2011-Oct-06  黄长浩  初始版本 

*/

 

#ifndef __STCEEPROM_H__

#define __STCEEPROM_H__

 

#define STC_EEPROM_START_ADDR 0x2000  //STC89C52RC片内EEPROM起始地址

 

unsigned char eepromRead( unsigned int address );

void eepromWrite( unsigned int address, unsigned char writeData );

void eepromEraseSector( unsigned int address );

 

#endif



接下来是stcEEPROM.c文件内容:

/*

When         Who     Remarks

----------------------------------

2011-Oct-06  黄长浩  初始版本 

*/

 

sfr isp_data=0xe2;

sfr isp_addrh=0xe3;

sfr isp_addrl=0xe4;

sfr isp_cmd=0xe5;

sfr isp_trig=0xe6;

sfr isp_contr=0xe7;

 

//擦除片内EEPROM的一个扇区

//擦除只能以扇区为最小单位进行,没法只擦除一个字节

//一个扇区是512个字节

//本函数参数里面的地址落在哪个扇区,则该扇区内数据都将被擦除

//例如:STC89C51RC片内EEPROM第一扇区开始地址为0x2000,结束地址为0x21ff

//如果调用 eepromEraseSector(0x2001),则第一扇区内数据都将被擦除

//擦除成功后,该扇区内各字节都将变为0xff

void eepromEraseSector (unsigned int address)

{

unsigned char i;

isp_addrl=address;

isp_addrh=address>>8;

isp_contr=0x01; 

isp_contr=isp_contr|0x81; // 0x80 if SYSCLK<40MHz, 0x81 if SYSCLK<20MHz, 0x82 if SYSCLK<10MHz, 0x83 if SYSCLK<5MHz

isp_cmd=0x03; 

isp_trig=0x46;

isp_trig=0xb9;

for(i=0;i<3;i++);

isp_addrl=0xff;

isp_addrh=0xff;

isp_contr=0x00;

isp_cmd=0x00;

isp_trig=0x00;

}

 

//对STC片内EEPROM的指定地址写入数据(即,字节编程)。

//注意:字节编程是指将eeprom的1写成1或0,将0写成0,而无法将0写成1

//所以,在写入数据前,一定要用扇区擦除将所有字节变为0xff

void eepromWrite(unsigned int address, unsigned char write_data)

{

unsigned char i;

isp_data=write_data;

isp_addrl=address;

isp_addrh=address>>8;

isp_contr=0x01; 

isp_contr=isp_contr|0x81; // 0x80 if SYSCLK<40MHz, 0x81 if SYSCLK<20MHz, 0x82 if SYSCLK<10MHz, 0x83 if SYSCLK<5MHz

isp_cmd=0x02;

isp_trig=0x46;

isp_trig=0xb9;

for(i=0;i<3;i++);

isp_addrl=0xff;

isp_addrh=0xff;

isp_contr=0x00;

isp_cmd=0x00;

isp_trig=0x00;

}

 

 

 

//读取STC单片机内部EEPROM的一个字节

//主要不同的STC单片机EEPROM起始地址不同

//例如:STC89c52RC的片内EEPROM起始地址为0x2000

unsigned char eepromRead(unsigned int address)

{

unsigned char i,z;

isp_addrl=address;

isp_addrh=address>>8;

isp_contr=0x01;

isp_contr=isp_contr|0x81; // 0x80 if SYSCLK<40MHz, 0x81 if SYSCLK<20MHz, 0x82 if SYSCLK<10MHz, 0x83 if SYSCLK<5MHz

isp_cmd=0x01;

isp_trig=0x46;

isp_trig=0xb9;

for(i=0;i<3;i++);

isp_addrl=0xff;

isp_addrh=0xff;

isp_contr=0x00;

isp_cmd=0x00;

isp_trig=0x00;

z=isp_data;

return(z);

}


使用的时候只需#include "stcEEPROM.h"即可。

一共3个函数,分别是擦除扇区、写字节和读字节。


要特别强调的是:


【1】每个型号的STC单片机都有自己的片内E2PROM起始地址和isp_trig,使用前注意看Datasheet的说明。


【2】片内EEPROM的写操作叫做字节编程。它能将“1”写成“1”或“0”,或者将“0”写成“0”,但不能将“0”写成“1”。所以,如果某存储单元是0xff才可以对其编程。故,写入前一定要擦除该单元,只有擦除才能将“0”擦除为“1”。


【3】擦除最小单位是扇区,512个字节为一个扇区(注意看Datasheet说明每个扇区的起始和结束地址)。


【4】如果在一个扇区中存放了大量数据,某次只要修改其中一个字节或一部分字节时,其它不需要修改的字节必须先读出来,放入RAM中,然后擦除整个扇区,再将需要保留和修改的字节一一写回。所以在设计程序时,尽量将同一次修改的数据放在同一个扇区中,而不同时修改的数据放在另外的扇区中。


【5】当电源电压过低时(5v单片机在3.7v以下),不要进行EEPROM/IAP操作。


【6】为防止电压过低造成的EEPROM操作失败,可以先向某单元写入一个已知数,然后再读取它,如果返回值是刚才写入的数,则说明EEPROM读写正常。还可以多检测两次以提高可靠性。


关键字:STC单片机  片内EEPROM  读写 引用地址:STC单片机片内EEPROM的读写

上一篇:STM8S学习05——EEPROM读写操作C语言程序
下一篇:CPU与存储外设之间的地址线连接方法

推荐阅读最新更新时间:2024-03-16 16:09

AT89C52单片机的SD卡读写电路与程序设计
设计方案   应用AT89C52读写SD卡有两点需要注意。首先,需要寻找一个实现AT89C52 单片机 与SD卡通讯的解决方案;其次,SD卡所能接受的逻辑电平与AT89C52提供的逻辑电平不匹配,需要解决电平匹配问题。   通讯模式   SD卡有两个可选的通讯协议:SD模式和SPI模式。SD模式是SD卡标准的读写方式,但是在选用SD模式时,往往需要选择带有SD卡控制器接口的MCU,或者必须加入额外的SD卡控制单元以支持SD卡的读写。然而,AT89C52单片机没有集成SD卡控制器接口,若选用SD模式通讯就无形中增加了产品的硬件成本。在SD卡数据读写时间要求不是很严格的情况下,选用SPI模式可以说是一种最佳的解决方案。因为在SPI模式
[单片机]
可用于M12和M8连接的高性能UHF RFID 4字段读写
浩亭长期以来始终为苛刻的工业及铁路行业应用提供合适的UHF RFID产品,目前不断扩展的RFID读写器系列正是这一持续承诺的一部分。全新的4字段读写器可让用户获得可靠的M连接器(M8和M12)和优异的RFID功能。 在推出拥有两个天线连接、500毫瓦功率输出以及丰富软件功能的紧凑可靠型Ha-VIS RF-R3x0读写器产品系列之后,浩亭现已拓展到功能强大的4字段读写器。Ha-VIS RFID读写器RF-R400的价格颇具吸引力,成功将精华荟萃的RFID性能和可靠的连接器融于一体。 网络、电源、RS232、两个数字触发信号输入以及四个数字信号输出均可通过圆形连接器来实现。每个连接器的最大功率输出为2瓦,并拥有四个常规SMA格式
[工业控制]
可用于M12和M8连接的高性能UHF RFID 4字段<font color='red'>读写</font>器
对利用打印口读写存储器24cxx的质疑
不少电子爱好者都读过这样一篇文章:《一款实用的串行E2PROM读写软件——24C××》,有部分烧友也亲自动手制作了该电路。该软件可以利用计算机的打印口上的输出端口378H端口和379H的输入端口,对存储器24cxx进行读写。378H端口是输出端口,对应计算机打印口的2脚到9脚。经我试用,效果相当不错。但有一次我在对计算机打印口做了几个小试验后,我不禁惊出一身冷汗!现写出来与大写一起来探讨: 试验一:观察开机过程中,计算机打印口的电平变化 具体做法:利用下述电路,接在计算机打印口上,观察各个发光二极管的亮灭变化情况。 观察结果:在机器自检阶段,接在打印口上的输出端口378H的8个发光二极管闪个不停;在win
[单片机]
对利用打印口<font color='red'>读写</font>存储器24cxx的质疑
关于单片机引脚读写操作
使用时肯定会用到单片机的IO引脚。以51单片机P1口为例。内部结构如图所示 当单片机进行写操作时,引脚锁存器(D触发器)CLK端接收有效电平,然后内部总线上需要写的数据就会通过D触发器传输到Q'。当写1时Q'为0,使MOSFET截止,因此外部引脚电平为1.当写0时Q'为1,MOSFET饱和导通,此时引脚可以看成接地,所以引脚为0。 如果对单片机IO口进行读操作。由图可以看出读操作包括读寄存器和读引脚。以前知道有这两种区别,但是从来没仔细区分过。从图中可以看出读寄存器时读寄存器上的三态缓冲器打开,Q端的值直接传到了内部总线上,而下面的读引脚三台缓冲器是高阻态,读引脚时则相反。 汇编语言中对读寄存
[单片机]
关于单片机引脚<font color='red'>读写</font>操作
三分钟带你了解MSP430F249硬件I2C查询法读写AT24C02
/****************************************************************** ** ** File : I2C.c “ Master Read Write | ** Version : 1.0 ** DescripTIon: I2C 查询法读写24C02 ** Author : LightWu ** Date : 2013-4-26 ** 必须注意多字节数据读取时,发送停止位需要在最后一个字节读取之前 ** 否则数据读取后,停止位发送容易失败,导致从机接收不到停止位。 *****************************************************
[单片机]
三分钟带你了解MSP430F249硬件I2C查询法<font color='red'>读写</font>AT24C02
STM32F10x _硬件I2C读写EEPROM(标准外设库版本)
本文主要内容:STM32硬件I2C详细配置、EEPROM(AT24Xxx)多字节读写操作、ST官方I2C存在问题。 实例实验效果: 1、多字节读写:任意地址(66), 写入任意长度(129)、读取并打印出来 2、单字节读写:任意地址(0),写入1字节数据、 读取并打印出来 实验说明: 1.多字节读写 实验为什么是从66地址写? 为什么是写入129字节? 答案:验证对EEPROM多字节“非标准地址、长度”读写的准确性。 我是使用AT24C128芯片,页大小是64字节,我从66地址,就是验证非标准地址(如:0、64、128等)开始读写; 写入长度129字节也是验证非标准长度(如:64、128、256等)的读写。 2.单字节读写
[单片机]
STM32F10x _硬件I2C<font color='red'>读写</font><font color='red'>EEPROM</font>(标准外设库版本)
单片机模拟IIC时序读写24C02
一、什么是IIC总线 IIC即集成电路总线,也是一种非常常用的总线是由飞利浦半导体公司在八十年代初设计出来的,主要是用来连接整体电路(ICS) ,IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源。 注意:IIC芯片在工业上的应用也是非常重要的,与串口、SPI、CAN等总线齐名。 二、IIC总线协议简介 IIC串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到IIC总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。同时为了保证数据可靠地传送,任一时刻总线只能由某一台主机控制。 在I2C总线传
[单片机]
MFRC523:非接触式读写13.56MHz通信方案
      NXP公司的MFRC523是一个的高集成读/写器,用于13.56MHz频率的非接触式通信。MFRC523阅读器支持ISO/IEC 14443 A/MIFARE模式。MFRC523的内部发射器无需额外的激活电路就能够驱动读/写器天线和收发器,其中读/写器天线用于同ISO/IEC 14443 A/MIFARE卡进行通信。接收器模块为来自ISO/IEC 14443 A/MIFARE兼容卡和转发器的信号提供高效的解调和解码。该数字模块具有完全的ISO/IEC 14443A架构和误差检测(奇偶和CRC)功能。       MFRC523可用于MIFARE 1K、MIFARE Mini以及MIFARE 4K产品,支持非接触式通
[网络通信]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved