9.STC15W408AS单片机EEPROM

发布者:Coboro最新更新时间:2022-08-04 来源: csdn关键字:STC15W408AS  单片机  EEPROM 手机看文章 扫描二维码
随时随地手机看文章

STC15系列单片机内部集成了大容量的EEPROM,与其程序空间是分开的。利用ISP/IAP技术可将内部Data Flash当EEPROM,擦写次数在10W次以上。EEPROM可分为若干个扇区,每个扇区包含512字节。使用时,建议同一次修改的数据放在同一个扇区,不是同一次修改的数据放在不同扇区,不一定要用满。数据存储器的擦除操作是按扇区进行的。


EEPROM可用于保存一些需要在应用中修改并且掉电不易丢失的参数数据。在用户程序中,可以对EEPROM进行子节读/字节编程/扇区擦除操作。在工作电压Vcc偏低时,建议不要进行EEPROM/IAP操作。


一、IAP及EEPROM相关寄存器

 图片         

1.1 数据寄存器IAP_DATA

IAP_DATA是ISP/IAP操作时的数据寄存器。ISP/IAP从Flash读出的数据放在此处,向Flash写的数据也许放在此处。


1.2 地址寄存器IAP_ADDRH和IAP_ADDRL

IAP_ADDRH,ISP/IAP操作时的地址寄存器高八位。


IAP_ADDRL, ISP/IAP操作时的地址寄存器高低位。


1.3 命令寄存器IAP_CMD

  图片        

1.4 命令触发寄存器IAP_TRIG

IAP_TRIG是ISP/IAP操场时的命令触发寄存器。在IAPEN(IAP_CONTER.7) = 1时,对IAP_TRIG先写入5Ah,再写入A5h,ISP/IAP命令才会生效。ISP/IAP操作完成后,IAP地址高八位IAP_ADDRH、IAP地址低八位寄存器IAP_ADDRL和IAP命令寄存器IAP_CMD的内容不变。如果接下来要对下一个地址数据进行ISP/IAP操作,需手动将地址的高8位和低8位分别写入IAP_ADDRH和IAP_ADDRL寄存器。


每次IAP操作时,IAP_TRIG先写入5Ah,再写入A5h,ISP/IAP命令才会生效。每次在触发钱,需要重新发送字节读/字节编程/扇区擦除命令,在命令不改变时,不需要重新送命令。


1.5 命令寄存器IAP_CONTR

图片        

IAPEN:ISP/IAP功能允许位。


0:禁止IAP读/写/擦除Data Flash/EEPROM


1:允许IAP读/写/擦除Data Flash/EEPROM


0:软件选择复位后从用户应用程序区启动


1:还是从系统ISP检测程序区启动


SWRST:


0:不操作


1:软件控制产生复位,单片机自动复位


CMD_FAIL:如果IAP地址(由IAP地址寄存器IAP_ADDRH和IAP_ADDRL的值决定)指向了非法地址或者无效地址,并送了ISP/IAP命令,并对IAP_TRIG送5Ah/A5h触发失败,则CMD_FAIL为1,需要软件清零。


WT0~WT2控制等待时间:

图片        

1.6 工作电压过低判断 此时不需要EEPROM/IAP操作

PCON,电源控制寄存器:

图片        

LVDF:低压检测标志位,当工作电压Vcc低于低压检测门槛电压时,该位置1。该位要软件清0。当低压检测电路发现工作电压Vcc偏低时,不要进行EEPROM/IAP操作。

图片        

二、STC15单片机EEPROM空间大小及地址

图片        

这里,我们暂时只关注STC15W408AS即可。型号不一样记得看手册。


三、测试程序

 

#include "stc15.h"

#include "intrins.h"

 

void IapIdle();

uchar IapReadByte(uchar addr);

void IapProgramByte(uchar addr, uchar dat);

void IapEraseSector(uchar addr);

 

#define IAP_ADDRESS 0x0001

 

void main()

{

  uchar ret;

  uint i;

  P1M0 = 0x02;

  P1M1 = 0x00;

  P11 = 0;   // 先 关闭LED

  // 这里最好加一点延时 方便查看现象

  IapEraseSector(IAP_ADDRESS); // 擦除地址的数据 恢复初始值

    IapProgramByte(IAP_ADDRESS,1); // 写入1

    if(IapReadByte(IAP_ADDRESS) == 1) 

    {

        P11 = 1; // 如果读取的数据是1 就点亮LED

    }

  while(1);

}

 

// 关闭IAP  寄存器设置成默认值

void IapIdle()

{

  IAP_CONTR = 0;       // 禁止IAP读/写/擦除Data Flash/EEPROM

  IAP_CMD   = 0;       // 待机 无ISP操作

  IAP_TRIG  = 0;       // 清除命令寄存器

  IAP_ADDRH = 0x80;    // 将地址位设置到非IAP区域

  IAP_ADDRL = 0;

}

// 从ISP/IAP/EEPROM区域读取一字节

uchar IapReadByte(uchar addr)

{

  uchar dat;

  IAP_CMD = 0x01;                 //设置IAP命令 读

  IAP_ADDRL = addr;               //设置IAP低地址

  IAP_ADDRH = addr >> 8;          //设置IAP高地址

  IAP_TRIG = 0x5a;                //写触发命令(0x5a)

  IAP_TRIG = 0xa5;                //写触发命令(0xa5)

  _nop_();                        //等待ISP/IAP/EEPROM操作完成

  dat = IAP_DATA;                 //读ISP/IAP/EEPROM数据

  IapIdle();                      //关闭IAP功能

  return dat;                     //返回

}

// 写一字节数据到ISP/IAP/EEPROM区域

void IapProgramByte(uchar addr, uchar dat)

{

  IAP_CONTR = 0x80;               //使能IAP

  IAP_CMD = 0x02;                 //设置IAP命令 编程

  IAP_ADDRL = addr;               //设置IAP低地址

  IAP_ADDRH = addr >> 8;          //设置IAP高地址

  IAP_DATA = dat;                 //写ISP/IAP/EEPROM数据

  IAP_TRIG = 0x5a;                //写触发命令(0x5a)

  IAP_TRIG = 0xa5;                //写触发命令(0xa5)

  _nop_();                        //等待ISP/IAP/EEPROM操作完成

  IapIdle();

}

 

// 擦除某一地址的数据

void IapEraseSector(uchar addr)

{

  IAP_CONTR = 0x80;               //使能IAP

  IAP_CMD = 0x03;                 //设置IAP命令 擦除

  IAP_ADDRL = addr;               //设置IAP低地址

  IAP_ADDRH = addr >> 8;          //设置IAP高地址

  IAP_TRIG = 0x5a;                //写触发命令(0x5a)

  IAP_TRIG = 0xa5;                //写触发命令(0xa5)

  _nop_();                        //等待ISP/IAP/EEPROM操作完成

  IapIdle();

}

关键字:STC15W408AS  单片机  EEPROM 引用地址:9.STC15W408AS单片机EEPROM

上一篇:10.STC15W408AS单片机A/D转换器
下一篇:8.STC15W408AS单片机定时器/计数器

推荐阅读最新更新时间:2024-11-09 11:52

51单片机~DS18B20温度传感器
(一)简介说明: (二)接线: 1. 内部结构: 正温度前五位是0. 负温度前五位是1. 由LS,MS组成的四位十六进制数,和16位二进制数。(先MS后LS) 结合上下图直到温度计算:1乘2 ^ 6 + 0乘2 ^ 5 +1乘2^ 4 +0乘2^ 3 +……2^0 ==85 (二)使用流程,按照时序图编写程序(判断应用): 粗黑线是总线控制的电平 灰线表示DS18B20控制的; 电阻上拉是由于上图接线有一个上拉电阻 读时重复七次直到读完为止 测试温度代码: temp.h #ifndef __TEMP_H_ #define __TEMP_H_ #include reg52.h
[单片机]
51<font color='red'>单片机</font>~DS18B20温度传感器
STC8单片机IO口简单模拟串行通信
我们都知道如何使用系统配置的串口初始化函数去使用我们的串口,就是只能使用固定的引脚去进行串行通信,就是下面这种方法, 如果想要使用其他的引脚来进行串行通信,就不可以了。下面教大学如何使用模拟串行通信,即可以使用任意引脚进行数据的收发。 1.计算传输一位数据所需要的时间,这与通信的波特率有关,在这里以波特率为1200bps为例。 波特率为1200,意思就是每秒传输的位数是1200位,那么每一位传输的时间就是1/1200*10的6次方=833us 这就表示传输每一位的时间是833us。 2.了解串行数据收发的过程,它的一帧数据一般包括1个起始位 + 8位有效数据(即一个字节)+ 1位停止位,还有校验位,在这里可要可
[单片机]
STC8<font color='red'>单片机</font>IO口简单模拟串行通信
MCU复位和程序启动那些事
MCU通常会在工作之前,先经历复位和启动的一个过程,在用户使用过程中往往在这个阶段的工作不是那么的清楚,这里我们就这一话题进行一个讨论。 一.MCU的复位问题 图1 16bit MCU和dsPIC33复位源的种类 一般来说,16位MCU包括dsPIC33的复位源主要包含以上7种,他们都可以对器件产生复位的作用,但是细节有所不同。 图2 复位系统框图 从复位系统框图上看,BOR和POR二者是和VDD电源有关的两种,看门狗和外部复位引脚复位也是比较常见的复位类型。 图3 复位寄存器RCON 复位寄存器RCON包含了复位相关的状态,当发生复位时RCON这个寄存器就会更新,以便表征是哪一个复位
[单片机]
基于飞思卡尔MCU的中央车身控制模块(BCM)方案
方案描述: 中央车身控制模块( BCM )是实现车身功能的中枢系统,如内部与外部照明、安全系统与门禁控制、车门及座椅舒适性调整以及其他便利性控制功能。 飞思卡尔 业内领先的产品组合包括基于Power Architecture的32位,以及基于S12的16位 MCU 系列,专门满足各种 BCM 应用需求。在实现系统支持方面,我们提供信号调节、MOSFET前置驱动器、源监视器或LED驱动器取代开关。SBC采用单一封装将电压调节器与CAN或LIN物理接口相结合。H桥驱动器及一系列高边开关(eXtreme 开关)支持大电流负载并取代继电器。网关可用作各种车载通信网络之间的信息接口,包括以太网、FlexRay、CAN、LIN及MOST?
[汽车电子]
基于飞思卡尔<font color='red'>MCU</font>的中央车身控制模块(BCM)方案
C51单片机学习笔记(六)——液晶显示屏的使用
1.LCD1602的认识 液晶显示屏简称液晶、LCD。各种型号的液晶通常是按显示字符的行数或液晶点阵的行、列进行命名的。1602的意思就是每一行显示16个字符,共可以显示2行,常见的液晶还有0801、0802、1601等,这类液晶是字符型液晶,只能显示ASCII码字符。而LCD12864属于图形型液晶,由128*64个像素点构成,可以显示各种图形包括汉字。 LCD1602可显示2行ASCII码字符,每行包括16个5*10点阵(像素),有16个引脚,其实物图如下所示: 2.LCD1602的引脚及其功能 3.LCD模块的内部结构 LCD1602模块的内部结构分为三部分:LCD控制器、LCD驱动器、LCD显示器 LCD控制器
[单片机]
C51<font color='red'>单片机</font>学习笔记(六)——液晶显示屏的使用
c51中断优先级c语言,51单片机的中断优先级及中断嵌套
说最基本的,老的51单片机(80C51系列)有5个中断源,2个优先级,可以实现二级中断服务嵌套。现在很多扩展的51单片机已经有4个优先级(或更多)和更多的中断源了。 在说到中断之前,我先来定义一下优先级,明白了什么是优先级,后面的阐述就容易明白了。实际上很多人都是混淆了优先级的含义,所以才觉得糊里糊涂。 中断的优先级有两个:查询优先级和执行优先级。 什么是查询优级呢?我们从datasheet或书上看到的默认(IP寄存器不做设置,上电复位后为00H)的优先级: 外部中断0 定时/计数器0 外部中断1 定时/计数器1 串行中断 或 int0,timer0,int1,timer1,serial port 或 INT0、T
[单片机]
更多样、更实惠、更易用,MSPM0 为 MCU 市场带来新活力
近几年来,MCU 的产品种类越来越丰富,在功耗、性能、成本、生态、供应链等领域有了更多选择。同时,工业和汽车市场,甚至消费市场数字化、智能化进程的加速,也给通用 MCU 带来新的爆发点。IC Insights 的数据显示,MCU 在 2021 年和 2022 年两年间出货量和平均售价持续增长,超过了 200 亿美元,其中工业和汽车市场增幅最大。 德州仪器的 32 位 Arm ® Cortex ® M0+ 通用 MCU MSPM0 正是在此大环境下推出。作为德州仪器首款 Arm ® Cortex ® M0+ 的通用 MCU,这款产品是否会给持续火热的 MCU 市场带来新活力呢? 德州仪器 MSP HSM
[嵌入式]
更多样、更实惠、更易用,MSPM0 为 <font color='red'>MCU</font> 市场带来新活力
瑞萨电子现已将“Renesas Ready合作伙伴网络”覆盖全部MCU和MPU产品线
瑞萨电子现已将“Renesas Ready合作伙伴网络”覆盖全部MCU和MPU产品线 在增加了对RZ MPU的支持之后,该计划现可提供来自200多个受信合作伙伴的软件组件,涵盖广泛的技术领域 2022 年 11 月 8 日,中国北京讯 - 全球半导体解决方案供应商瑞萨电子 今日宣布, 为其RZ产品家族微处理器(MPU)提供商业级、性能优化的组件——其中包括106个新合作伙伴和160个组件解决方案,进一步扩大“Renesas Ready合作伙伴网络”。 在过去三年中,这一受信技术合作伙伴计划已发展至超过200个合作伙伴的规模,共同打造了300多款与瑞萨RZ MPU,以及RA、RX和RL78微控制器(MCU)产品线相配套的即用
[嵌入式]
瑞萨电子现已将“Renesas Ready合作伙伴网络”覆盖全部<font color='red'>MCU</font>和MPU产品线
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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