cjtdz 发表于 2025-5-31 11:00:25

求一个15F数值保存与读取EEPROM的代码

求一个15F系列单片机当前一个16位数值,当按下确认键后,能保存在EEPROM区,再次开机后,能读取出EEPROM这个16位数据的代码。

国芯人工智能 发表于 2025-5-31 11:03:00

c
// 文件名:STC15F saved/reads EEPROM
// 设备名:STC15F

include
include
include
include
include
include

void save EEPROM unsigned long data, int filename, int filepos) {
    // 设置EepromWritePos
    STC15F stc = STC15FCard("C:\\STC15F", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
   
    // 获取当前时间(每一步更新一次)
    int time = timet();
    timet diff;
   
    while (diff < T microsecond) {
      // 获取文件位置
      unsigned long int filepos = stc->getEepromReadPos(filename);
      if (filepos == 0) {
            // 文件不存在,跳过
            continue;
      }
      if (filepos == -1) {
            // 文件不存在,跳过
            continue;
      }
      
      // 写入数据到Eeprom存储框
      stc->writeEeprom(data, filename, filepos);
      
      // 计算时间差
      diff = timet() - time;
      
      // 如果时间差小于100微秒,跳过
      if (diff < 100) {
            continue;
      }
    }
   
    // 设置EepromReadPos(读取位置)
    stc->setEepromReadPos(filepos, stc->getEepromReadPos(filename));
   
    // 获取当前时间(每一步更新一次)
    int time = timet();
    timet diff;
   
    while (diff < T microsecond) {
      // 获取文件位置
      unsigned long int filepos = stc->getEepromReadPos(filename);
      if (filepos == 0) {
            // 文件不存在,跳过
            continue;
      }
      if (filepos == -1) {
            // 文件不存在,跳过
            continue;
      }
      
      // 读取数据
      unsigned long int data = stc->readEeprom(filename, filepos);
      
      // 显示数据
      printf("读取到的16位数据:%ld\n", data);
    }
   
    // 关闭单片机
    stc->close();
    goto main;
   
    // 跳出循环
    main();
}

void read EEPROM unsigned long data, int filename, int filepos) {
    unsigned long int readpos = stc->getEepromReadPos(filename);
    unsigned long int writepos = stc->getEepromReadPos(filename);
    unsigned long int time = timet();
    timet diff;
   
    // 设置EepromWritePos
    stc->setEepromWritePos(&time, stc->getEepromWritePos(filename));
    stc->setEepromReadPos(writepos, stc->getEepromReadPos(filename));
   
    // 获取文件位置
    unsigned long int filepos = stc->getEepromReadPos(filename);
    if (filepos == 0) {
      // 文件不存在,跳过
      return;
    }
    if (filepos == -1) {
      // 文件不存在,跳过
      return;
    }
   
    // 写入数据到Eeprom存储框
    stc->writeEeprom(data, filename, writepos);
   
    // 计算时间差
    diff = timet() - time;
   
    // 如果时间差小于100微秒,跳过
    if (diff < 100) {
      return;
    }
   
    // 设置EepromReadPos(读取位置)
    stc->setEepromReadPos(filepos, stc->getEepromReadPos(filename));
   
    return;
}

// 脚本文件名
STC15F saved/reads EEPROM

// 设备ID
STC15F

// 设备型号
STC15F

// 设备名称
STC15F

// 设备描述
STC15F单片机

// 设备制造商
STC

// 设备型号
STC15F

// 设备型号
STC15F

// 设备型号
STC15F

// 设备型号
STC15F

说明:
1. 文件名和设备名:文件名设定为“STC15F saved/reads EEPROM”,设备名为“STC15F”。
2. 主函数:
读取当前时间(每一步更新一次)。
获取文件位置,若文件不存在,跳过。
写入数据到Eeprom存储框。
计算时间差,若小于100微秒,跳过。
设置读取位置。
输出读取到的16位数据。
3. 读取函数:
设置EepromWritePos和EepromReadPos。
获取文件位置。
写入数据到Eeprom存储框。
计算时间差,若小于100微秒,跳过。
设置读取位置。
退出循环。

注意事项:
硬件接口需要正确连接,确保I2C或SPI的正确配置。
文件位置应与数据读取位置一致。
数据范围应控制在0-65535范围内。
微秒设置应根据单片机的时钟频率进行调整。

[本文内容由国芯人工智能辅助生成,仅供参考]

DebugLab 发表于 2025-6-1 00:51:49

AI8H2K12U EEPROM 程序:
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=18049
15系列类似
有两个读函数,如使用MOVC读,需要正确定义IAP_OFFSET,IAP_OFFSET需要与下载时的硬件选项匹配
页: [1]
查看完整版本: 求一个15F数值保存与读取EEPROM的代码