找回密码
 立即注册
查看: 652|回复: 10

EEPROM 读取不出来擦除写入正常

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:102
  • 最近打卡:2025-04-30 21:27:20
已绑定手机

6

主题

26

回帖

482

积分

中级会员

积分
482
发表于 2024-7-4 04:23:58 | 显示全部楼层 |阅读模式
void IapProgram_addr(unsigned int addr,unsigned int dat) //16位数据擦除写入
{
     IapEraseSector(addr); //擦除
                 IapProgramByte(addr,dat/256);
                 IapProgramByte(addr+1,dat%256);                         
}

void IapReadByte_addr(unsigned int addr,unsigned int dat) //16位数据读取
{
                dat=(IapReadByte(addr)*256)+(IapReadByte(addr+1));
}
请问一下为什么读取的时候读取不出来呢

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6841

积分

论坛元老

积分
6841
发表于 2024-7-4 09:51:44 | 显示全部楼层
使用附件例子测试正常后再进行修改或者移植。

STC8-EEPROM基本操作-P32按键通过串口1输出.zip

9.15 KB, 下载次数: 86

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:455
  • 最近打卡:2025-05-01 08:13:06
已绑定手机

27

主题

341

回帖

1687

积分

金牌会员

机长

积分
1687
发表于 2024-7-4 20:30:49 | 显示全部楼层
  1. void IapReadByte_addr(unsigned int addr,unsigned int *dat) //16位数据读取
  2. {
  3.     *dat=(IapReadByte(addr)*256)+(IapReadByte(addr+1));
  4. }
  5. int xxx=0;
  6. int yyy=0;
  7. IapReadByte_addr(xxx, &yyy);
复制代码
1. 注意我在你的dat前加的两个星号;
2. 以及在调用的时候yyy前面的&号。

业余撸代码,专业开飞机
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:102
  • 最近打卡:2025-04-30 21:27:20
已绑定手机

6

主题

26

回帖

482

积分

中级会员

积分
482
发表于 2024-7-5 23:29:20 | 显示全部楼层
乘风*** 发表于 2024-7-4 09:51
使用附件例子测试正常后再进行修改或者移植。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:102
  • 最近打卡:2025-04-30 21:27:20
已绑定手机

6

主题

26

回帖

482

积分

中级会员

积分
482
发表于 2024-7-5 23:56:39 | 显示全部楼层
hsr*** 发表于 2024-7-4 20:30
1. 注意我在你的dat前加的两个星号;
2. 以及在调用的时候yyy前面的&号。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:30
  • 最近打卡:2024-08-13 08:17:43

2

主题

13

回帖

45

积分

新手上路

积分
45
发表于 2024-7-6 10:52:05 来自手机 | 显示全部楼层
{:5_332:}
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:121
  • 最近打卡:2025-05-01 19:17:52
已绑定手机

19

主题

208

回帖

492

积分

中级会员

积分
492
发表于 2024-7-17 22:57:22 | 显示全部楼层
请教一下, STC8051U-34K64 芯片,64K FLASH ,那EEPROM如果在程序下载的时候设置为0.5K,就是只有一个扇区;
那读、写这个扇区的首字节~尾字节的时候,地址 0uL~0x1ff; 那操作这个芯片EEPROM的时候,还可以串口仿真吗?
我仿真了一下,程序单步操作,似乎没有写成功,系统频率是22.1184MHz。

点评

执行IAP操作时,CPU暂停 [attachimg]51737[/attachimg]  详情 回复 发表于 2024-7-18 00:42
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2024-7-18 00:38:24 | 显示全部楼层
absacc.h是个好东西

没注释掉的Iap_Read_Byte效率比注释掉的Iap_Read_Byte效率高些

#include <absacc.h>

#define                IAP_OFFSET        0x2000        //EEPROM首地址(STC8G1K08A)


void Iap_Idle(void)
{
        IAP_CONTR&=~IAPEN;
        IAP_CMD=IAP_IDL;
        IAP_TRIG=0x00;
        IAP_ADDRH=0x80;
        IAP_ADDRL=0x00;
}

unsigned char Iap_Read_Byte(unsigned char sector,unsigned int addr)
{
        return *(CBYTE+IAP_OFFSET+sector*0x0200+addr);
}

//unsigned char Iap_Read_Byte(unsigned char sector,unsigned int addr)
//{
//        unsigned char dat;
//        unsigned int add;
//        add=sector*0x0200+addr;
//        IAP_CONTR|=IAPEN;
//        IAP_TPS=IAP_TPS_;
//        IAP_CMD=IAP_READ;
//        IAP_ADDRL=add;
//        IAP_ADDRH=add>>8;
//        IAP_TRIG=0x5A;
//        IAP_TRIG=0xA5;
//        _nop_();
//        dat=IAP_DATA;
//        Iap_Idle();
//        return dat;
//}

void Iap_Program_Byte(unsigned char sector,unsigned int addr,unsigned char dat)
{
        unsigned int add;
        add=sector*0x0200+addr;
        IAP_CONTR|=IAPEN;
        IAP_TPS=IAP_TPS_;
        IAP_CMD=IAP_WRITE;
        IAP_ADDRL=add;
        IAP_ADDRH=add>>8;
        IAP_DATA=dat;
        IAP_TRIG=0x5A;
        IAP_TRIG=0xA5;
        _nop_();
        Iap_Idle();
}

void Iap_Erase_Sector(unsigned char sector)
{
        unsigned int add;
        add=sector*0x0200;
        IAP_CONTR|=IAPEN;
        IAP_TPS=IAP_TPS_;
        IAP_CMD=IAP_ERASE;
        IAP_ADDRL=add;
        IAP_ADDRH=add>>8;
        IAP_TRIG=0x5A;
        IAP_TRIG=0xA5;
        _nop_();
        Iap_Idle();
}

点评

读EEPROM IAP寄存器访问的是相对地址,首地址为0 MOVC访问的是相对地址,EEPROM从后向前规划,首地址由STCISP决定(可自定义EEPROM大小的型号)  详情 回复 发表于 2024-7-18 00:48
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2024-7-18 00:42:25 | 显示全部楼层
机灵*** 发表于 2024-7-17 22:57
请教一下, STC8051U-34K64 芯片,64K FLASH ,那EEPROM如果在程序下载的时候设置为0.5K,就是只有一个扇区 ...

执行IAP操作时,CPU暂停

截图202407180042182952.jpg

DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2024-7-18 00:48:59 | 显示全部楼层
Debu*** 发表于 2024-7-18 00:38
absacc.h是个好东西

没注释掉的Iap_Read_Byte效率比注释掉的Iap_Read_Byte效率高些

读EEPROM
IAP寄存器访问的是相对地址,首地址为0
MOVC访问的是绝对地址,EEPROM从后向前规划,首地址由STCISP决定(可自定义EEPROM大小的型号

DebugLab
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:19 , Processed in 0.151937 second(s), 116 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表