帕拉丁 发表于 2025-2-18 11:09:19

请问各位大佬8H1K08eeprom 容量大小和地址的问题

    先谢谢各位大佬百忙之中进来对新人伸出援助之手。

    目前有一个项目使用8H1K08单片机(因为这个最便宜。)
    EEPROM相关的代码是从ISP软件的例程里修改下来的。
    请问各位大佬 ISP 在 8H1K08 这个芯片的烧录界面 没有设置EEPROM的选项。 我如何设置EEPROM大小 以及初始位置?

/////////////////////////////////////////////////////////eeprom数据存储
#include "intrins.h"



void IapIdle()
{
    IAP_CONTR = 0;                              //关闭IAP功能
    IAP_CMD = 0;                              //清除命令寄存器
    IAP_TRIG = 0;                               //清除触发寄存器
    IAP_ADDRH = 0x80;                           //将地址设置到非IAP区域
    IAP_ADDRL = 0;
}

char IapRead(int addr)
{
    char dat;

    IAP_CONTR = 0x80;                           //使能IAP
    IAP_TPS = 12;                               //设置等待参数12MHz
    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数据
    IapIdle();                                  //关闭IAP功能

    return dat;
}

void IapProgram(int addr, char dat)
{
    IAP_CONTR = 0x80;                           //使能IAP
    IAP_TPS = 12;                               //设置等待参数12MHz
    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_();
    IapIdle();                                  //关闭IAP功能
}

void IapErase(int addr)
{
    IAP_CONTR = 0x80;                           //使能IAP
    IAP_TPS = 12;                               //设置等待参数12MHz
    IAP_CMD = 3;                              //设置IAP擦除命令
    IAP_ADDRL = addr;                           //设置IAP低地址
    IAP_ADDRH = addr >> 8;                      //设置IAP高地址
    IAP_TRIG = 0x5a;                            //写触发命令(0x5a)
    IAP_TRIG = 0xa5;                            //写触发命令(0xa5)
    _nop_();                                    //
    IapIdle();                                  //关闭IAP功能
}


void Read_sudu_FromFlash()// 函数1: 从0x0400地址读取数据赋予sudu变量
{
    // 读取0x0400处的数据并赋值给TIME1变量
    sudu = IapRead(0x0400);
}

void Write_sudu_ToFlash(unsigned char kkk)// 函数2: 把sudu变量的数据写入0x0400
{
    // 先擦除再编程以确保数据正确写入
    IapErase(0x0400); // 擦除0x0400处的数据
    IapProgram(0x0400, kkk); // 将TIME变量的数据写入0x0400
}

谢谢各位大佬。

Lkck8210 发表于 2025-2-18 11:20:51

多看手册,All you need in here~!


STC8H手册 章节19.3 980页

DebugLab 发表于 2025-2-18 13:37:39

非IAP型号,不支持自定义容量,也不支持code区IAP和EEPROM区存储指令
code区和EEPROM区为固定容量8K+4K


帕拉丁 发表于 2025-2-18 14:55:20

Lkck8210 发表于 2025-2-18 11:20
多看手册,All you need in here~!




谢谢大佬指导 明白了

帕拉丁 发表于 2025-2-18 14:56:02

DebugLab 发表于 2025-2-18 13:37
非IAP型号,不支持自定义容量,也不支持code区IAP和EEPROM区存储指令
code区和EEPROM区为固定容量8K+4K



谢谢大佬 明白了 就是 0000-0FFF 固定的这4K容量
页: [1]
查看完整版本: 请问各位大佬8H1K08eeprom 容量大小和地址的问题