请问各位大佬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
}
谢谢各位大佬。
多看手册,All you need in here~!
STC8H手册 章节19.3 980页
非IAP型号,不支持自定义容量,也不支持code区IAP和EEPROM区存储指令
code区和EEPROM区为固定容量8K+4K
Lkck8210 发表于 2025-2-18 11:20
多看手册,All you need in here~!
谢谢大佬指导 明白了 DebugLab 发表于 2025-2-18 13:37
非IAP型号,不支持自定义容量,也不支持code区IAP和EEPROM区存储指令
code区和EEPROM区为固定容量8K+4K
谢谢大佬 明白了 就是 0000-0FFF 固定的这4K容量
页:
[1]