找回密码
 立即注册
楼主: 柒柒学不会

库函数STC8H.H中EAXRAM()宏有误

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2024-10-27 11:59:49

3

主题

17

回帖

58

积分

注册会员

积分
58
发表于 2024-10-26 20:36:27 | 显示全部楼层
晓*** 发表于 2024-10-26 20:31
AUXR &= ~0x02是什么意思,你是不是对这个代码有什么大误会???
内部扩展RAM和扩展SFR是两码事

所以使能内部XRAM(即EAXRAM())要对EXTRAM写0,即AUXR &= ~0x02

点评

官方头文件里面的EAXRAM()并不是使能内部XRAM的功能,而是设置@DPTR,A指令的操作对象为扩展RAM(XRAM) 头文件里面没有对使能内部扩展RAM做宏定义,不要误会了。 另外,AUXR的复位默认值是00000001,所以默认是启  详情 回复 发表于 2024-10-26 20:49
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2024-10-27 11:59:49

3

主题

17

回帖

58

积分

注册会员

积分
58
发表于 2024-10-26 20:42:08 | 显示全部楼层
如果各位看不懂英文缩写命名的宏也请不要回复了
回复 支持 反对

使用道具 举报 送花

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

34

主题

2096

回帖

2206

积分

荣誉版主

积分
2206
发表于 2024-10-26 20:49:48 | 显示全部楼层
柒柒*** 发表于 2024-10-26 20:36
所以使能内部XRAM(即EAXRAM())要对EXTRAM写0,即AUXR &= ~0x02

官方头文件里面的EAXRAM()并不是使能内部XRAM的功能,而是设置@DPTR,A指令的操作对象为扩展RAM(XRAM)


头文件里面没有对使能内部扩展RAM做宏定义,不要误会了。

另外,AUXR的复位默认值是00000001,所以默认是启用内部扩展RAM的,无需再设置了。
睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2024-10-27 11:59:49

3

主题

17

回帖

58

积分

注册会员

积分
58
发表于 2024-10-26 21:01:22 | 显示全部楼层
晓*** 发表于 2024-10-26 20:49
官方头文件里面的EAXRAM()并不是使能内部XRAM的功能,而是设置@DPTR,A指令的操作对象为扩展RAM(XRAM)

所以按数据手册里的描述,使能/禁止访问XFR,和设置@DPTR,A指令的操作对象为扩展RAM(XRAM),有什么关系呢

点评

EAXRAM()和EAXFR()就是控制访问扩展SFR的开关, MOVX A,@DPTR/MOVX @DPTR,A这些操作是寄存器的间接寻址方式,P_SW2的最高位控制的就是间接寻址的RAM指向,置高为指向扩展SFR,清零为指向外部扩展RAM,所以才把禁止访  详情 回复 发表于 2024-10-26 21:11
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2024-10-27 11:59:49

3

主题

17

回帖

58

积分

注册会员

积分
58
发表于 2024-10-26 21:03:41 | 显示全部楼层
屏幕截图 2024-10-26 210150.png
屏幕截图 2024-10-26 210205.png

我没有在手册里找到这两条指令和使能/禁止访问XFR的关系

点评

[attachimg]61439[/attachimg]  详情 回复 发表于 2024-10-26 21:24
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2024-10-27 11:59:49

3

主题

17

回帖

58

积分

注册会员

积分
58
发表于 2024-10-26 21:06:54 | 显示全部楼层
晓*** 发表于 2024-10-26 20:49
官方头文件里面的EAXRAM()并不是使能内部XRAM的功能,而是设置@DPTR,A指令的操作对象为扩展RAM(XRAM)

大概23年12月左右,在相同路径下载的库文件,确实是我所言“正确”的写法,我发现这个问题也是因为以前的程序迁移到现在的库后宕机。但是后来为什么又这样修改了,厂家是不是应该给个明确的说明

点评

这个是2013年10月25日的STC8H8K64U开发板例程包,里面首次采用了这种宏定义的方式,和现在最新的一致。  详情 回复 发表于 2024-10-26 21:18
回复 支持 反对

使用道具 举报 送花

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

34

主题

2096

回帖

2206

积分

荣誉版主

积分
2206
发表于 2024-10-26 21:11:16 | 显示全部楼层
柒柒*** 发表于 2024-10-26 21:01
所以按数据手册里的描述,使能/禁止访问XFR,和设置@DPTR,A指令的操作对象为扩展RAM(XRAM),有什么关系呢 ...

EAXRAM()和EAXFR()就是控制访问扩展SFR的开关,
MOVX A,@DPTR/MOVX @DPTR,A这些操作是寄存器的间接寻址方式,P_SW2的最高位控制的就是间接寻址的RAM指向,置高为指向扩展SFR,清零为指向外部扩展RAM,所以才把禁止访问扩展SFR的名称设置为EAXRAM()
这个名称确实容易让人误会,您的建议也很有道理,叫DISXFR似乎更合理。但这个名称牵扯面太广,修改已经不太现实了,记住怎么回事便好了。


睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

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

34

主题

2096

回帖

2206

积分

荣誉版主

积分
2206
发表于 2024-10-26 21:18:38 | 显示全部楼层
柒柒*** 发表于 2024-10-26 21:06
大概23年12月左右,在相同路径下载的库文件,确实是我所言“正确”的写法,我发现这个问题也是因为以前的 ...

这个是2013年10月25日的STC8H8K64U开发板例程包,里面首次采用了这种宏定义的方式,和现在最新的一致。

STC8H8K64U-DEMO-CODE-V9.6-20231025.zip (35.33 MB, 下载次数: 52)

睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2024-10-27 11:59:49

3

主题

17

回帖

58

积分

注册会员

积分
58
发表于 2024-10-26 21:23:45 | 显示全部楼层
屏幕截图 2024-10-26 212026.png

找到了,原来是扩展外部RAM
怪不得从来没注意过
回复 支持 反对

使用道具 举报 送花

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

34

主题

2096

回帖

2206

积分

荣誉版主

积分
2206
发表于 2024-10-26 21:24:31 | 显示全部楼层
柒柒*** 发表于 2024-10-26 21:03
我没有在手册里找到这两条指令和使能/禁止访问XFR的关系

QQ20241026-212354.png
睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 09:02 , Processed in 0.237499 second(s), 108 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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