STC_EEPROM

 

1,擦除操作一次必须擦除一个扇区,在写操作之前必须进行擦除操作。

2,在一次擦除操作后可以进行连续的写或者连续的读,但是不能读写交叉进行;

3,任意时刻可以对任意地址进行读操作,但是一旦需要进行了写操作,必须进行一次扇区擦除。

#include "eeprom.h"
#include "os.h"
#include "uart.h"
void eeprom_reset(void)
{
    IAP_CONTR = 0; //关闭IAP功能
    IAP_CMD = 0; //清除命令寄存器
    IAP_TRIG = 0; //清除触发寄存器
    IAP_ADDRH = 0x80; //将地址设置到非IAP区域
    IAP_ADDRL = 0;
}

u8 eeprom_read(u16 addr)
{
    u8 dat;

    IAP_CONTR = WT_12M; //使能IAP
    IAP_TPS = 12;
    IAP_CMD = 1; //设置IAP读命令
    IAP_ADDRL = addr; //设置IAP低地址
    IAP_ADDRH = addr >> 8; //设置IAP高地址
    IAP_TRIG = 0x5a; //写触发命令(0x5a)
    IAP_TRIG = 0xa5; //写触发命令(0xa5)
    _nop_();
    dat = IAP_DATA; //读IAP数据
    eeprom_reset(); //关闭IAP功能

    return dat;
}

void eeprom_write(u16 addr, u8 dat)
{
    IAP_CONTR = WT_12M; //使能IAP
    IAP_TPS = 12;
    IAP_CMD = 2; //设置IAP写命令
    IAP_ADDRL = addr; //设置IAP低地址
    IAP_ADDRH = addr >> 8; //设置IAP高地址
    IAP_DATA = dat; //写IAP数据
    IAP_TRIG = 0x5a; //写触发命令(0x5a)
    IAP_TRIG = 0xa5; //写触发命令(0xa5)
    _nop_();
    eeprom_reset(); //关闭IAP功能
}

void eeprom_erase(u16 addr)
{
    _nop_();
    _nop_();
    IAP_CONTR = WT_12M; //使能IAP
    IAP_TPS = 12;
    IAP_CMD = 3; //设置IAP擦除命令
    IAP_ADDRL = addr; //设置IAP低地址
    IAP_ADDRH = addr >> 8; //设置IAP高地址
    IAP_TRIG = 0x5a; //写触发命令(0x5a)
    IAP_TRIG = 0xa5; //写触发命令(0xa5)
    _nop_(); //
    eeprom_reset(); //关闭IAP功能
}

void perameter_get(void)
{
    max_power_on_cnt = eeprom_read(eeprom_base);
    max_power_off_cnt = (eeprom_read(eeprom_base + 1) << 8) + eeprom_read(eeprom_base + 2);

    max_power_on_cnt = ((max_power_on_cnt == 0xFF) ? 10 : max_power_on_cnt); //20s
    max_power_off_cnt = ((max_power_off_cnt == 0xFFFF) ? 1600 : max_power_off_cnt); //1800s
    power_on_cnt = max_power_on_cnt;
    power_off_cnt = max_power_off_cnt;
}

void perameter_set(void)
{
    eeprom_erase(eeprom_base);
    eeprom_write(eeprom_base, max_power_on_cnt);
    eeprom_write(eeprom_base + 1, (max_power_off_cnt >> 8));
    eeprom_write(eeprom_base + 2, (max_power_off_cnt & 0xFF));
}

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 成长之路 设计师:Amelia_0503 返回首页