柒柒学不会 发表于 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的关系


页: 1 2 [3] 4
查看完整版本: 库函数STC8H.H中EAXRAM()宏有误