STC51单片机EEPROM的使用方法

发布者:BlossomJoy最新更新时间:2023-06-25 来源: elecfans关键字:STC51  单片机  EEPROM  使用方法 手机看文章 扫描二维码
随时随地手机看文章

STC51单片机有类似flash的功能EEPROM,可以掉电保存数据,不同型号的可以保存不同大小的数据,以12C5A60S2为例,EEPROM的大小为2K,分为两个扇区,掉电保存在很多地方需要。

STC51单片机EEPROM的使用方法

首先寄存器的问题,不同系列的STC单片机的与EEPROM有关的寄存器不同,比如10/11/12系列的sfr ISP_DATA = 0xC2;sfr ISP_ADDRH = 0xC3;sfr ISP_ADDRL = 0xC4;sfr ISP_CMD = 0xC5;sfr ISP_TRIG = 0xC6;sfr ISP_CONTR = 0xC7;89/90系列的sfr ISP_DATA = 0xe2;sfr ISP_ADDRH = 0xe3;sfr ISP_ADDRL = 0xe4;sfr ISP_CMD = 0xe5;sfr ISP_TRIG = 0xe6;sfr ISP_CONTR = 0xe7;注意寄存器一定要按数据手册中的配置,ISP触发命令也不相同,详情请看下方代码

其次是关于扇区问题,不同型号的MCU扇区个数不尽相同,详情请查询数据手册,在这里我以12C5A60S2为例,一共2扇区,每扇区512B,地址区间为0x0000~0x03FF,使用时请勿超出范围。


EEPROM使用时有三个功能,分别为读、写、和擦除,由ISP_CMD寄存器控制,分别对应1/2/3

下面为此项内容的代码部分,分别为初始化、读、擦除和写,本程序为11.0592MHz晶振,STC12C5A60S2的MCU,以下程序测试可用

EEPROM.c

void DisableEEPROM(void)

{

ISP_CONTR = 0;//禁止ISP/IAP操作

ISP_CMD = 0;//去除ISP/IAP命令

ISP_TRIG = 0;//防止ISP/IAP命令误触发

ISP_ADDRH = 0xff;//指向非EEPROM区,防止误操作

ISP_ADDRL = 0xff;//指向非EEPROM区,防止误操作

}

void EEPROM_Read_n(unsigned int EE_address,unsigned char *DataAddress,unsigned char lenth)

{

EA = 0;//禁止中断

ISP_ENABLE();//宏调用, 设置等待时间,允许ISP/IAP操作,送一次就够

ISP_READ();//宏调用, 送字节读命令,命令不需改变时,不需重新送命令

do

{

ISP_ADDRH = EE_address / 256;//送地址高字节(地址需要改变时才需重新送地址)

ISP_ADDRL = EE_address % 256;//送地址低字节

ISP_TRIG();//宏调用, 先送5AH,再送A5H到ISP/IAP触发寄存器,每次都需要如此

_nop_();

*DataAddress = ISP_DATA;//读出的数据送往

EE_address++;

DataAddress++;

}while(--lenth);

DisableEEPROM();

EA = 1;//重新允许中断

}

void EEPROM_SectorErase(unsigned int EE_address)

{

EA = 0;//禁止中断

//只有扇区擦除,没有字节擦除,512字节/扇区。

//扇区中任意一个字节地址都是扇区地址。

ISP_ADDRH = EE_address / 256;//送扇区地址高字节(地址需要改变时才需重新送地址)

ISP_ADDRL = EE_address % 256;//送扇区地址低字节

ISP_ENABLE();//设置等待时间,允许ISP/IAP操作,送一次就够

ISP_ERASE();//宏调用, 送扇区擦除命令,命令不需改变时,不需重新送命令

ISP_TRIG();//宏调用, 先送5AH,再送A5H到ISP/IAP触发寄存器,每次都需要如此

DisableEEPROM();

EA = 1;//重新允许中断

}

void EEPROM_Write_n(unsigned int EE_address,unsigned char *DataAddress,unsigned char lenth)

{

EA = 0;//禁止中断

ISP_ENABLE();//设置等待时间,允许ISP/IAP操作,送一次就够

ISP_WRITE();//宏调用, 送字节写命令,命令不需改变时,不需重新送命令

do

{

ISP_ADDRH = EE_address / 256;//送地址高字节(地址需要改变时才需重新送地址)

ISP_ADDRL = EE_address % 256;//送地址低字节

ISP_DATA = *DataAddress;//送数据到ISP_DATA,只有数据改变时才需重新送

ISP_TRIG();//宏调用, 先送5AH,再送A5H到ISP/IAP触发寄存器,每次都需要如此

_nop_();

EE_address++;//下一个地址

DataAddress++;//下一个数据

}while(--lenth);//直到结束

DisableEEPROM();

EA = 1;//重新允许中断

}

EPPROM.h

#ifndef __EEPROM_H__

#define __EEPROM_H__

#include“max52.h”

#include

#defineISP_WAIT_FREQUENCYISP_WAIT_2MHZ

#defineISP_WAIT_2MHZ6

#define ISP_TRIG() ISP_TRIG12()

#define ISP_TRIG12()ISP_TRIG = 0x5A,ISP_TRIG = 0xA5//等待指令分12和89系列

#define ISP_TRIG89()ISP_TRIG = 0x46,ISP_TRIG = 0xB9

#define ISP_EN(1《《7)

#define ISP_SWBS(1《《6)

#define ISP_SWRST(1《《5)

#define ISP_CMD_FAIL(1《《4)

#defineISP_STANDBY()ISP_CMD = 0//ISP空闲命令(禁止)

#defineISP_READ()ISP_CMD = 1//ISP读出命令

#defineISP_WRITE()ISP_CMD = 2//ISP写入命令

#defineISP_ERASE()ISP_CMD = 3//ISP擦除命令

#defineISP_ENABLE()ISP_CONTR = (ISP_EN + ISP_WAIT_FREQUENCY)

#defineISP_DISABLE()ISP_CONTR = 0; ISP_CMD = 0; ISP_TRIG = 0; ISP_ADDRH = 0xff; ISP_ADDRL = 0xff

void DisableEEPROM(void);

void EEPROM_Read_n(unsigned int EE_address,unsigned char *DataAddress,unsigned char lenth);

void EEPROM_SectorErase(unsigned int EE_address);

void EEPROM_Write_n(unsigned int EE_address,unsigned char *DataAddress,unsigned char lenth);

#endif


关键字:STC51  单片机  EEPROM  使用方法 引用地址:STC51单片机EEPROM的使用方法

上一篇:什么是单片机_51单片机学前预备知识
下一篇:有关51单片机有关晶振的问题总结(干货)

推荐阅读最新更新时间:2024-11-08 16:41

基于51单片机控制的自动停车收费管理系统
0 引言 随着经济的增长,越来越多的人加入了购车行列。汽车数量的剧增和停车场地的相对短缺,使得停车场的管理收费问题凸现。特别是大型超市的临时停车场管理收费更加困难。 1 现有停车场收费管理系统 目前的停车场收费管理系统通常采用以下两种计费方式: (1)摄像计费方式:在停车场出入口分别放置一台摄像机,通过摄像机摄下汽车车牌号码,送单片机或者电脑处理。再通过单片机计算停车时间和费用,并控制大门开启。该方案信息量大,要求具有较大的存储容量。软件设计复杂,成本高。 (2)刷卡计费方式:车主到指定地点办理IC卡,通过打卡进出停车场,并通过IC卡缴费。但该方式更适合于有长期固定停放车位的停车场。 为了解决
[单片机]
基于51<font color='red'>单片机</font>控制的自动停车收费管理系统
基于51单片机的直流PTC热敏电阻恒温控制系统
  1、引言   现有的加热器大都采用电热管、电热丝等传统器件 加热,电热管的外壳为不锈钢制成的钢管,内有发热元件电阻丝,加热时通过电阻丝及钢管向外界传热,当空气不流动时,电热管的热量就散不出去,温度会越来越 高,严重时会烧毁电热管,甚至发生火灾。而PTC热敏电阻作为发热材料,具有节能恒温、无明火、安全性好、发热量较易调节、受电源电压的波动影响小、升温 迅速等特点,因此,设计使用PTC热敏电阻做加热材料的恒温加热系统对安全度要求较高的应用是很有意义的。   2、系统总体设计方案   本系统采用AT89C2051为控制核 心,PTC热敏电阻对加热区域进行加热,数字温度计DS18B20实时采集温度,由外设键盘设定所要加热温度值的上限
[单片机]
基于51<font color='red'>单片机</font>的直流PTC热敏电阻恒温控制系统
微控制器MCU处理LED亮度控制
微控制器MCU通常被认为是数字器件。在缺省情况下,其输出电压电平要么是高,要么就是低,不会是一个不高不低值。为了实现LED亮度控制这一要求,首先浮现在脑海中的方法就是使用一个标准的数模转换器或者设计一个受控的电阻网络。值得庆幸的是,大多数现代MCU都具有内置的脉冲宽度调制(PWM)单元,这是解决该问题的最容易和成本最低的方法。 根据我们的项目要求,两个LED的亮度必须在几秒钟的时间内以相反的顺序逐渐从最暗调整到最亮,再从最亮逐渐调整到最暗。在 匀变1 时间内,针对LED 1的PWM信号的脉冲宽度逐渐增大,而针对LED 2的PWM信号的脉冲宽度逐渐减小。例如,假设匀变时间等于2秒并由128个向上/向下步长组成。因此,每个步长持续大
[电源管理]
GD32F3系列Cortex®-M4 MCU荣获“2017年度产品奖”
电子网消息,GD32F3系列Cortex®-M4 MCU荣获《今日电子》杂志评选的 “2017年度产品奖”( "Product of the Year" Awards)。   《今日电子》的姊妹刊物Electronic Products是北美最具影响力的电子类刊物之一。自1977年起,Electronic Products杂志将年度产品奖授当年最杰出的电子产品。借由Electronic Products杂志三十余年的评选经验,根据三方面标准来评价、讨论并最终确定获奖名单。
[半导体设计/制造]
基于AVR单片机的mega16内部EEPROM操作C语言程序设计
#include iom16v.h #include macros.h #include math.h #define uchar unsigned char #define uint unsigned int uchar const seg_data ={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff}; //0~9和熄灭符的段码表 uchar const bit_tab ={0xbf,0x7f}; //第7、8只数码管位选表 uchar disp_buf ={0,0}; //定义2个显示缓冲单元 uchar val; #define beep_0 (PORTD=
[单片机]
51单片机利用定时器和1602液晶显示实现一个计时器
1.平台:windows10 64位教育版 2.工具:普中科技HC6800-ES V2.0 、keil uVision 2 3.注意:芯片STC89C52,8位1602液晶显示 4.实现效果: 通电之后,1602开始显示计时,按下第一个按键进入设置,按下第二个按键设置时分秒的各个位置,按下第三个按键在对应的时分秒的位置数字加1,按下第四个按键在对应的时分秒的位置数字减1 原理 笔者参考的是郭天祥的《新概念51单片机C语言教程》和网上的普中科技的单片机的使用教程,具体使用教程,在哔哩哔哩上面搜“普中科技51单片机”也有。要找到能用的代码,网上是很多的,不过笔者是自己在明白原理之后,自己编写程序实现的,自己独立思考的过程很重要
[单片机]
51<font color='red'>单片机</font>利用定时器和1602液晶显示实现一个计时器
用PComm开发PC机与单片机的通信程序
摘要:介绍了分布式控制系统中上位PC机与下位单片机异步串行通信的通信协议;同时介绍了在VC++6.0环境下用PComm编写的PC机通信程序来实现上位机和下位机异步串行通信的方法,给出了PComm编程实例和下位机程序模块流程图。 关键词:分布式控制系统;异步;串行通信;PComm 在由一台PC机(上位机)和多台单片机(下位机)构成的分布式控制系统中,单片机主要负责实时数据采集,并将初步处理后的数据通过串行口传送给PC机以便由PC机串行口的命令对单片机进行控制,同时通过打印机或显示器向用户随时提供各种统计报表和整个控制过程的具体数据。在这样的分布式控制系统中,单片机与微机之间的多路通信是整个系统的关键,本文将介绍在提高通信的准
[工业控制]
STM32单片机如何处理QT上位机串口中发过来的数据?
首先,在使用STM32单片机处理QT上位机串口中发过来的数据前,需要了解一些基础知识。 1. 串口通信 串口通信指的是通过串口进行数据传输的通信方式。串口通信是一种简单、稳定、可靠的通信方式,其原理是通过串口发送端口将数据转换为串行数据,并将其发送到接收端口,接收端口将接收到的串行数据还原成原始数据。 在STM32单片机和QT上位机之间进行串口通信时,需要确定好使用的波特率、数据位、停止位和校验位等参数,以保证数据传输的正确性。 2. 数据格式 在STM32单片机中处理QT上位机串口中发过来的数据时,需要了解数据格式。一般情况下,串口收发数据的格式是由数据帧构成。数据帧一般包括开始标志、数据段、校验段和结束标志等部分。 开始标志用
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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