STC15W4K32S4单片机内部包含有4KB数据存储器,除了基本RAM和扩充RAM共256B外,还有3840个扩展RAM单元,编址范围为000H~0EFFH。下面介绍这段空间的访问方法。
1.内部扩展RAM的访问
由于内部扩展RAM与外部扩展RAM地址重叠,寻址方式也相同,容易造成读/写错误。为了防止访问冲突,单片机设计了一个AUXR辅助寄存器来加以控制和区分。
AUXR辅助寄存器的字节地址为8EH,可位寻址,AUXR的格式如下:
其中,EXTRAM位(即AUXR.1)控制片内扩展RAM和外部扩展RAM的访问。当EX-TRAM=0,允许访问内部扩展RAM;当EXTRAM=1,允许访问外部扩展RAM。
访问内部扩展RAM和外部扩展RAM都必须使用外部间接寻址方式,使用MOVX指令。
因此,利用设置辅助寄存器的AUXR.1位,可以选择当前是对内部或外部RAM的读/写操作控制。系统复位后AUXR.1=0,默认为访问内部扩展RAM。如图4-2所示,内部扩展RAM和外部扩展RAM最大访问地址均可达64KB(0000H~FFFFH)。
图4-2 STC15W4K32S4单片机内部扩展RAM和外部扩展RAM
若要读出内部3FFH单元,先用寄存器指针DPTR指向3FFH,然后用MOVX指令读出:
【例4-3】 如果要将片内RAM地址100H单元的数据复制到片内200H单元中,程序指令如下:
因为内部扩展RAM地址最大为0EFFH,所以当寄存器指针DPTR指向的地址大于0EFFH时,系统会自动访问外部扩展RAM。(www.xing528.com)
2.双数据指针DPTR的使用
STC15单片机对于无外部数据/地址总线的芯片,数据指针只有一个DPTR寄存器。
对于拥有外部数据/地址总线的单片机,内部设计了2个16位数据指针DPRT0和DPTR1,它们物理空间不同,但在逻辑操作时,只使用同一个DPTR寄存器作数据指针。也就是说,这2个数据指针使用同一个地址,可通过设置辅助寄存器AUXR1或P_SW1的DPS位来选择。
AUXR1(P_SW1)辅助寄存器的字节地址为0A2H,可位寻址,AUXR1的格式如下:
其中,DPS位(即P_SW1.0)数据寄存器指针选择:当DPS=0时,选择使用DPRT0;DPS=1时,选择使用DPTR1。例如:
AUXR1不可位寻址,但因为DPS在辅助寄存器的最低位,所以可通过对AUXR1寄存器自加1指令(INC)操作修改DPS位的值:当DPS为0时,对AUXR1自加1操作后DPS变为1;当DPS为1时,对AUXR1自加1操作后DPS变为0。操作指令为:INC AUXR1。
【例4-4】 内部数据存储器的诊断编程应用。
数据存储器每个字节的每一位都应该可以任意读/写,诊断的方法就是使每一位进行写“0”操作和写“1”的操作,并读取结果,验证是否写入成功。数据存储器的诊断有破坏性诊断与非破坏性诊断两种,非破坏性诊断可以在完成诊断任务的同时不破坏原有数据,以便随时进行。下面对内部扩展RAM的000H~EFFH地址空间进行非破坏性诊断,程序如下:
实际上,单片机上电复位后,系统默认EXTRAM=0,DPS=0。上述程序执行后,若F0=0则通过,若F0=1则有问题,表明内部单元地址已损坏。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。