/*********************************************************************************************************** 显示效果: 用户通过仿真,能够对EEPROM的特定区域地址内容进行读写操作,并验证数据操作正确与否。 eeprom写数据 连续写字节不能太多 写单个字节的时间根据写的内容的前后不同,时间不等。 以及电源电压相关 理论上随着写的次数增加,写的时间会相应增加,建议以单个字节1ms-2ms的时间为基准 ***********************************************************************************************************/ #include #include "TM52F1386_bsp.h" #include #include "EEPROM.h" #define IAPTE_0P8_MS AUX2=(AUX2&0xf9)|0x02 #define IAPTE_3P2_MS AUX2=(AUX2&0xf9)|0x04 #define IAPTE_6P4_MS AUX2=(AUX2&0xf9)|0x06 #define IAPTE_DISABLE AUX2=(AUX2&0xf9) // 设置最大20字节存参数 unsigned char xdata eeprom_address_write[30] _at_ 0XDC00; //eeprom指定地址,第一页用于状态数据+参数配置 unsigned char code eeprom_address_read[30] _at_ 0XDC00; //eeprom指定地址 // 设置最大20字节存参数 unsigned char xdata eeprom_address_write_backup[30] _at_ 0XDE00; //eeprom指定地址,第二页,参数配置备份区,第一页读取失败从第二页读取参数备份 unsigned char code eeprom_address_read_backup[30] _at_ 0XDE00; //eeprom指定地址 /* 参数数据(10,实际从1开始,0字节保留):0-9:开机状态(通电勿扰)全局设置1字节-1,三个继电器开机状态3个字节-2-3-4,背光等级1个字节-5 , 开关、场景设置-6-7-8,人感1字节-9 实时数据(6):10:19:当前继电器状态3个字节-10-11-12,雷达状态1字节-13,点动倒计时未结束1个字节-15-16-17,ota状态1字节-19(最后一字节) 点动开关参数(9):,点动开关2个字节(使能1,时间2)-20-21-22,-23-24-25,-26-27-28 */ unsigned char write_mileage[30];//0:人感开关,1:开机状态全局开关,2:按键1默认状态,3:按键2默认状态,4:按键3默认状态 unsigned char read_mileage[30]; unsigned char write_mileage_backup[30];//0:人感开关,1:开机状态全局开关,2:按键1默认状态,3:按键2默认状态,4:按键3默认状态 unsigned char read_mileage_backup[30]; //unsigned char II=0; /********************************************************************************************************** ** 函数名称: iap_eeprom_write ** 函数描述: iap_EEPROM写数据配置函数 ** 输入参数: addr:存储地址,范围0~127 buf:数据的首地址 len:数据长度(addr+len不要超过128) ** 输出参数: 无 **********************************************************************************************************/ void iap_eeprom_write(unsigned char addr, unsigned char *buf, unsigned char len) { unsigned char i=0,temp_ea=0,temp_lvrpd=0; temp_ea = EA; EA = 0; temp_lvrpd = LVRCON & 0x10; // LVR的状态位 LVRCON = (LVRCON &~ 0x10) | (1 << 4); //关闭LVR功能 IAPWE_SFR=0XE2; //使能iap IAPWE_SFR=0XBA; //使能iap eeprom_address_write[0] = 0x00;//是所在页的整页都擦除 bsp_delay_ms(5); IAPWE_SFR=0XE2; //使能iap IAPWE_SFR=0X4C; //使能iap for(i = 0; i