P89LV51RD2具有独立的程序存储器和数据存储器地址空间。
1.Flash程序存储器
P89LV51RD2含有2个内部Flash存储模块。模块0有64KB,用来存放用户代码。模块1用来存放Philips公司提供的ISP/IAP程序,可以通过使能模块1来覆盖用户代码存储器的前8KB。64KB的模块0可以分成512个扇区,每个扇区含有128B。通过清零FCF寄存器的BSEL位来访问IAP程序。然而,在动态修改BSEL位时要非常小心。由于BSEL位的改变将造成不同的物理存储器都映射到逻辑程序地址空间,因此当在执行0000H~1FFFH地址范围内的用户代码时,用户不能清零BSEL位。
2.数据RAM
数据RAM含有1024B的内部存储器。器件也可对高达64KB的外部数据存储器进行寻址。
3.扩展数据RAM寻址
器件的内部数据存储器由4部分组成:
1)低128B RAM(00H~7FH),可直接和间接寻址。
2)高128B RAM(80H~FFH),间接寻址。
3)特殊功能寄存器(80H~FFH),只可直接寻址。
4)扩展的768B RAM(00H~2FFH),通过移动外部指令(MOVX)和清除EXTRAM位间接寻址。
P89LV51RD2的内部和外部数据存储器结构如图2-4所示。
图2-4 P89LV51RD2的内部和外部数据存储器结构
由于高128B和SFR占用相同的地址,因此RAM空间必须进行间接寻址。尽管RAM和SFR的地址相同,但它们在物理上是独立的。当运用指令来访问高128B空间时(7FH之上),微控制器根据指令类型来决定访问SFR或RAM空间。如果指令采用间接寻址,则访问RAM;如果指令采用直接寻址,则访问SFR,见下述例子。
(1)间接寻址
MOV@R0,#data ;R0的内容是90H(www.daowen.com)
寄存器R0指向高地址范围内的90H单元。‘#data’数据写入到90H RAM单元,而非P1口。
(2)直接寻址
MOV 90H,#data ;向P1口写入数据
#data,数据写入到P1口。直接写地址单元的指令就是写SFR。
将EXTRAM清零,使用MOVX指令来访问扩展RAM。外部768B的存储器在物理上位于片内,逻辑上占用的是外部存储器的前768B(地址000H~2FFH)。
当EXTRAM=0,扩展RAM通过MOVX指令和选定寄存器区的R0、R1寄存器或DPTR间接寻址。对扩展RAM的访问不会影响P0口、P3.6(WR)、P3.7(RD)或P2口。有关EXTRAM=0时扩展RAM的访问,请参考下面的例子。
(3)扩展RAM访问(只能间接寻址)
MOVX@DPTR,A ;DPTR指向0A0H单元
DPTR指向0A0H单元,‘A’的内容写入到扩展RAM(而非外部存储器)的0A0H地址单元。利用MOVX指令来访问高于2FFH单元(0300H~FFFFH)的外部存储器,整个过程的执行方法与标准8051器件完全相同:P0和P2口用作数据/地址总线,P3.6和P3.7分别用作写和读信号。
当EXTRAM=1时,MOVX@Ri和MOVX@DPTR的用法与标准8051类似。MOVX@Ri提供一个8位的地址,此时P0口还复用为数据总线,由其他输出端口引脚输出高地址位。这就提供了一种外部页功能。MOVX@DPTR产生一个16位地址,允许对高达64KB的外部存储器进行访问。由P2口提供高8位地址(DPH),P0口复用为低8位地址(DPL)总线和数据总线。MOVX@Ri和MOVX@DPTR均可产生必需的读和写信号(P3.6—WR,P3.7—RD),供外部存储器使用。
堆栈指针(SP)可以位于内部RAM(低128B和高128B)256B内的任何位置,但不允许位于扩展RAM中。
(4)双数据指针
P89LV51RD2含有2个16位的数据指针。AUXR1寄存器的DPTR选择位(DPS)用来选择使用的数据指针。DPS=0时,选择DPTR0;DPS=1时,选择DPTR1。通过对AUXR1执行一条简单的INC指令就可实现2个数据指针的快速切换,如图2-5所示。
图2-5 双数据指针快速切换
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。