STC单片机断电写入Flash数据实现
需积分: 33 75 浏览量
更新于2024-09-13
收藏 5KB TXT 举报
"这篇资源是关于使用STC11F04E单片机进行断电后在Flash中写入数据的操作方法。"
在STC单片机编程中,有时我们需要在断电后还能保持某些关键数据,这就涉及到对Flash存储器的编程。STC11F04E是一款具有内置Flash的8位单片机,它提供了在系统编程(ISP)和在应用编程(IAP)功能,使得用户可以在不脱离应用环境的情况下更新程序或存储数据。
在这个程序中,首先引入了必要的头文件`<reg51.h>`和`<intrins.h>`,它们包含了单片机的寄存器定义和内联函数支持。接着定义了一些数据类型,如`BYTE`和`WORD`,以便于处理8位和16位的数据。
接下来,定义了一系列与IAP相关的特殊功能寄存器(SFR),例如`IAP_DATA`, `IAP_ADDRH`, `IAP_ADDRL`, `IAP_CMD`, `IAP_TRIG`和`IAP_CONTR`,这些都是用于执行IAP操作的关键寄存器。其中,`IAP_ADDRH`和`IAP_ADDRL`组合起来用于设置要访问的Flash地址,`IAP_CMD`用于设定操作命令,如读取(CMD_READ)、编程(CMD_PROGRAM)和擦除(CMD_ERASE)等。
在实际操作中,首先要调用`IapEraseSector`函数来擦除指定地址(在这里是`IAP_ADDRESS`,即0x0000)的Flash扇区,确保该区域的数据被清除。然后,可以通过`IapReadByte`函数检查这个扇区是否已经被完全擦除,如果发现有非0xFF的字节,则表示擦除不完整。
为了写入数据,使用`IapProgramByte`函数,它可以将一个字节数据写入指定的Flash地址。在这个例子中,尽管没有实际写入数据(注释掉了`IapProgramByte`的调用),但注释中展示了如何写入0x56到地址0x0000。
在写入数据后,通常需要重新启动单片机以使新写入的数据生效。描述中提到的“断两下电”可能是指先断电执行写入操作,然后再次断电并上电以使更改生效。这种方法并不标准,可能是因为特定的硬件设置或应用需求。
此外,`IapIdle`函数用于将IAP控制器置于空闲状态,确保不影响其他操作。`Delay`函数则用于提供必要的延时,这在单片机操作中常用于等待某个过程完成或防止操作过快导致的错误。
这段代码展示了如何使用STC11F04E单片机的IAP功能进行Flash编程,包括擦除、读取和编程操作,这对于在断电后保留数据的应用场景非常有用。不过,实际应用时需要根据具体的需求和硬件设置调整代码,并确保正确配置IAP的相关寄存器。
2011-07-13 上传
2012-03-10 上传
2011-05-01 上传
2017-01-21 上传
点击了解资源详情
点击了解资源详情
sangxiaodong
- 粉丝: 0
- 资源: 1
最新资源
- 如何成为优秀的软件人才
- 计算机二级-C上机百题
- SQL常用语句!初学者必看!
- uc系列安装说明ucenter dicuz uchome phpcms
- 这是一段qtp脚本代码
- 林锐 高质量C编程指南
- windows2003系统集群的安装与验证.doc
- 操作系统最经典三张纸.pdf
- ANSI-ISO C++ Professional Programmer's Handbook
- QR文本内容QR文本内容
- rman实践指南 for oracle
- MyEclipse 6 Java EE 开发中文手册.pdf
- RHEL3上ORACLE9I备份与迁移
- lex&yacc简明教程
- oracle10g for as4 install
- TCP/IP Fundamentals for Microsoft Windows