柒柒学不会
发表于 2024-10-26 20:36:27
晓飛飛 发表于 2024-10-26 20:31
AUXR &= ~0x02是什么意思,你是不是对这个代码有什么大误会???
内部扩展RAM和扩展SFR是两码事
所以使能内部XRAM(即EAXRAM())要对EXTRAM写0,即AUXR &= ~0x02
柒柒学不会
发表于 2024-10-26 20:42:08
如果各位看不懂英文缩写命名的宏也请不要回复了
晓飛飛
发表于 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的,无需再设置了。
柒柒学不会
发表于 2024-10-26 21:01:22
晓飛飛 发表于 2024-10-26 20:49
官方头文件里面的EAXRAM()并不是使能内部XRAM的功能,而是设置@DPTR,A指令的操作对象为扩展RAM(XRAM)
所以按数据手册里的描述,使能/禁止访问XFR,和设置@DPTR,A指令的操作对象为扩展RAM(XRAM),有什么关系呢
柒柒学不会
发表于 2024-10-26 21:03:41
我没有在手册里找到这两条指令和使能/禁止访问XFR的关系
柒柒学不会
发表于 2024-10-26 21:06:54
晓飛飛 发表于 2024-10-26 20:49
官方头文件里面的EAXRAM()并不是使能内部XRAM的功能,而是设置@DPTR,A指令的操作对象为扩展RAM(XRAM)
大概23年12月左右,在相同路径下载的库文件,确实是我所言“正确”的写法,我发现这个问题也是因为以前的程序迁移到现在的库后宕机。但是后来为什么又这样修改了,厂家是不是应该给个明确的说明
晓飛飛
发表于 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似乎更合理。但这个名称牵扯面太广,修改已经不太现实了,记住怎么回事便好了。
晓飛飛
发表于 2024-10-26 21:18:38
柒柒学不会 发表于 2024-10-26 21:06
大概23年12月左右,在相同路径下载的库文件,确实是我所言“正确”的写法,我发现这个问题也是因为以前的 ...
这个是2013年10月25日的STC8H8K64U开发板例程包,里面首次采用了这种宏定义的方式,和现在最新的一致。
柒柒学不会
发表于 2024-10-26 21:23:45
找到了,原来是扩展外部RAM
怪不得从来没注意过
晓飛飛
发表于 2024-10-26 21:24:31
柒柒学不会 发表于 2024-10-26 21:03
我没有在手册里找到这两条指令和使能/禁止访问XFR的关系