首页  编辑  

51单片机写入EPROM不起作用导致单片机自动重启

Tags: /硬件开发/   Date Created:
51单片机,可以直接给指定地址写入数据来保存永久配置,以便掉电后也不丢失。
永久保存有两种方式:一种是利用EPROM,一种是直接写入APROM代码区。下面的方法,不需要额外的EPROM,直接通过写入代码区的方式保存到APROM,掉电也不会丢失!

例如:
   1. 首先在Keil中,左边Project目录树中,lib下面,add files to group lib... ,把 IAP.c加入,IAP.c是单片机的标准库源代码。
      // 这个地址,需要在代码段和数据段之后,可以通过Keil编译后的提示计算得到起始地址
     // Keil编译提示: Program Size: data=182.2 xdata=619 code=14402
     // 可以计算得到起始地址为: 183 + 619 + 14402 = 15204 = 0x3B64,为安全起见,我们可以 使用 0x3F00开始来保存配置数据!
unsigned int idata addr = 0x3F00;     
        // OCD使能,否则无法写入IAP数据区,会导致单片机写入失败重启!
Modify_CONFIG(0xEF, 0xFF, 0xFF, 0xFF, 0xFF);
        Write_DATAFLASH_BYTE(addr, CONFIG_SIGN_HIGH);
addr += 2;
Write_DATAFLASH_BYTE(addr, CONFIG_SIGN_LOW);
addr += 2;
       // ......其他保存代码

// OCD 启用,保护代码段不被误修改
Modify_CONFIG(0xFF, 0xFF, 0xFF, 0xFF, 0xFF);

这个方法,不适合保存频繁变化的数据,只适合启动时读取,偶尔保存一次或者以后永久都不修改的情况,尤其适合保存一些校准数据,每个板卡的序列号等永久不变的数据。

注意,千万要修改配置,OCD使能,否则你写入addr就会导致单片机重启!数据也不能断电保存!
你也可以使用NuMicro ICP Programming Tool,连接单片机后,点击【设定】,在弹出窗口中,选择OCD使能,确定返回,然后在窗口下面【编程】,勾选【配置区】,点【开始】按钮后即可更新单片机配置了。