允许访问扩展在XDATA区的SFR(特殊功能寄存器)。51架构直接访问的寄存器只有128字节,而STC公司的MCU外设扩展了几百个寄存器,只好放在XDATA区。 |
STC为了发展51芯片扩展了很多东西!又必须考虑兼容过去和能够在Keil中编程和调试,有些设置就好像是“打补丁”。其实STC的手册很长,也叙述的很清楚。只是许多人缺少认真看书的习惯! |
用于访问扩展的特殊功能寄存器,因为51的架构问题,常规的特殊功能寄存器地址(128字节)远远不够,所以STC增加的几百个特殊功能寄存器都放在xdata地址空间,为了避免与xdata内存冲突,所以用这一位来允许/禁止扩展的特殊功能寄存器访问。 如果没有外接xdata芯片,或外接的没到64K,或者到64K,最后几百个字节不用,则程序已开始设置该位为1,一直不用清除。 |
搞的太复杂了,这就是51架构的局限性 |
innere 发表于 2023-5-15 16:38 8.2.8 扩展SFR 使能寄存器EAXFR 的使用说明 STC8G/8H 的扩展SFR 地址范围为0FA00H~0FFFFH,如需访问XFR 区域的扩展SFR,需要先将EAXFR (P_SW2.7)置1,并使用MOVX A,@DPTR 和MOVX @DPTR,A 这两条指令进行读写操作。XFR 的地址范 围与外部扩展RAM 地址的0FA00H~0FFFFH 区域是重叠的。 1、若用户不使用外部扩展RAM 或者外部扩展RAM 的最大地址不超过0FA00H (例如只外扩32K RAM),这种情况下不会有不同区域的访问地址冲突,可以在上电系统初始化时将EAXFR 寄存器设置为1(例如:P_SW2 |= 0x80;),后续一直保持为1 不用再修改,即可正常访问XFR 区域。 2、若用户有外扩64K 的扩展RAM,则在访问XFR 和外部扩展RAM 时需要注意: 访问XFR 时需要将EAXFR 寄存器位设置为1; 访问地址范围在0FA00H~0FFFFH 的外部扩展RAM 时需要将EAXFR 设置为0; 访问地址范围在0000H~0F9FFH 的外部扩展RAM 时,与EAXFR 设置的值无关 ![]() |
我也是没注意到,搞了好久 |
他没有讲这位置1后,耽误访问data里的内容不 |
小胸姑娘 发表于 2021-3-13 10:55 对,我也是这里,卡了好几天 ![]() |
这个操作 一言难尽! 我看IIC的时候刚好把这个漏过去了,结果硬件IIC怎么也通讯不成功,看了芯片资料给的例程后发现P_SW2的第一位被置一了,然后再过来查。前前后后搞了好久好久 |
angmall 发表于 2020-7-16 22:07 谢谢,昨天看了后面才发现 |
谢了,昨天看了后面才发现 |
你认真看下这个表的下面文档,你会发现惊喜, |
P_SW2寄存器的最高位EAXFR 是扩展SFR访问控制使能 如下特殊功能寄存器位于扩展 RAM 区域 访问这些寄存器,需先将 P_SW2 的 BIT7(EAXFR) 设置为 1,才可正常读写 ![]()
|