本节将介绍STC单片机存储器结构和地址空间,内容包括程序Flash存储器、内部数据RAM存储器和外部数据存储器。
本节将介绍程序存储器空间映射和程序存储器特点。
STC单片机程序存储器空间位于0x0000~0xFFFF的地址范围。16位的程序计数器(PC)指向下一条将要执行的指令。8051 CPU只能通过MOVC指令从程序空间读取数据。
注意: 在STC15W4K32S4系列的单片机内部集成了8~61KB容量的Flash程序存储器,如表5.14所示。
表5.14 STC15W4K32S4系列存储器空间分配
当复位时,程序计数器(PC)的内容为0x0000。因此,从程序存储器地址为0x0000的地方开始执行程序。此外,中断服务程序的入口地址(也称为中断向量)也保存在程序存储器低地址空间内。在程序存储器中,每个中断都有一个固定的入口地址。当外部中断进入8051 CPU并得到响应后,8051 CPU就自动跳转到相应的中断入口地址执行中断服务程序,具体见后面的详细说明。
STC单片机内的程序存储器可以保存用户程序、数据和表格信息,其具有下面的特点:
(1)提供10万次以上擦写能力。
(2)低压保护功能,即在低压状态下,禁止对程序存储器进行擦除和编程。
(3)程序存储器对外不提供读电路,因而有效地防止对用户程序的破解。
(4)只有对程序存储器进行擦除操作后,才能对其进行编程操作。
(5)在对程序存储器编程时,可以将程序代码乱序后存放。
(6)程序存储器的最后7字节设置全球唯一的ID号。
(7)以扇区为单位擦除。
(8)以字节为单位进行编程。
(9)STC单片机提供了通过通用异步串口,对Flash进行擦除、编程和代码加密的能力。
思考与练习5-19: 在STC单片机中,程序存储器的作用是 。当访问程序存储器时,使用 指令。
STC系列单片机内部提供了大容量的数据Flash存储器,用于实现电可擦除的只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)的功能。数据Flash存储器和程序Flash存储器空间是分开的。其特点主要包括:
(1)通过ISP/IAP技术可以将内部的数据Flash当作EEPROM使用。
(2)擦写次数在10万次以上。
(3)以扇区为单位,每个扇区包含512字节。
(4)数据存储器的擦除操作是按扇区进行的。
注意: 由于EEPROM是以扇区为单位管理,所以数据存储器的擦除操作也是按扇区进行的。因此,建议同一次修改的数据保存在同一个扇区,不是同一次修改的数据需要保存在不同扇区。
表5.15给出了STC15W4K32S4系列单片机数据Flash(EEPROM)空间容量和地址。
表5.15 STC15W4K32S4系列单片机数据Flash(EEPROM)空间容量和地址
注意:后两个系列特殊,用户可以在用户程序区直接修改用户程序,所有Flash空间均可作数据Flash(EEPROM)修改。没有专门的数据Flash,但是用户可以将用户程序区的程序Flash当作数据Flash使用,使用时不要擦除自己的有效程序。
注意: 对于其他类型的单片机数据Flash的容量和映射关系,请参阅STC提供的单片机数据手册。
STC15系列的单片机内部集成了RAM存储器,可用于存放程序执行的中间结果和过程数据。以STC15W4K32S4系列单片机为例,在单片机内部集成了4KB的RAM内部数据存储器。在逻辑和物理上,将其分为两个地址空间:
(1)内部RAM,其容量为256字节。
(2)内部扩展RAM,其容量为3840字节。
STC15系列单片机内部RAM空间可以分成三个部分,如图5.10所示。
1)低128字节RAM(兼容传统8051)
这部分的存储空间既可采用直接寻址方式又可采用间接寻址方式。这部分RAM区域也称为通用RAM区域,如图5.11所示。这个区域分为工作寄存器组区域、可位寻址区域、用户RAM和堆栈区。
(1)工作寄存器组区域。该区域的地址从0x00~0x1F,占用32字节单元。在8051 CPU内提供了4组工作寄存器,每组称为一个寄存器组。
每个寄存器组包含8个工作寄存器区,范围是R0~R7,但是它们属于不同的物理空间。通过使用不同的寄存器组,可以提高运算的速度。在工作寄存器组区内提供4组寄存器,是因为1组寄存器往往不能满足应用的要求。在前面已经说明,通过PSW中的RS1和RS0位,设置当前所使用的寄存器组。
图5.10 内部RAM结构
图5.11 低128字节的内部RAM
(2)可位寻址区域。在地址0x20~0x2F的16字节的区域中,可实现按位寻址。也就是说,可以对这16个单元中的每一位进行单独的寻址,这个区域一个有128位,所对应的地址范围是0x00~0x7F,而内部RAM低128字节的地址范围也是0x00~0x7F。但是,两者之间存在本质的区别,这是因为,位地址指向的是一个位,而字节地址指向的是一个字节单元,在程序中是通过不同的指令进行区分的。
(3)用户RAM和堆栈区。在地址0x30~0xFF区域(包含了高128字节区域)是用户的RAM和堆栈区,可以采用直接寻址或者间接寻址的方式访问该区域。
2)高128字节RAM(Intel在8052中扩展了高128字节RAM)
这部分区域虽然和SFR区域的地址范围重合,都在0x80~0xFF的区域。但是,它们在物理上是相互独立的,通过不同的寻址方式来区分它们。对于高128字节RAM区域来说,只能采用间接寻址方式。
3)特殊功能寄存器
特殊功能寄存器在本章前面进行了详细的说明。对于SFR来说,只能采用直接寻址的方式。
思考与练习5-20: 在STC 8051单片机中,内部数据RAM分为 、和 三部分。
思考与练习5-21: 在STC 8051单片机的内部数据RAM的高128字节复用 和 区域,可分别通过 方式访问它们。
思考与练习5-22: 在STC 8051单片机中,共有 组寄存器,使用 来选择它们中的一组。
在STC15W4K32S4系列的单片机中,除了集成256字节的内部RAM外,还集成了3840字节的扩展RAM区,其地址范围是0x0000~0x0EFF。在该系列单片机中,访问内部RAM的方法和传统8051单片机访问外部扩展RAM的方法一致,但是不影响单片机外部P0口(数据总线和高8位地址总线)、P2口(低8位地址总线)、 和P4.5/ALE信号线。
在STC系列单片机中,通过下面方式访问内部扩展RAM。
(1)使用汇编语言,通过MOVX指令访问内部扩展RAM区域,访问的指令为
MOVX @ DPTR
或者
MOVX @ Ri
(2)使用C语言,通过使用xdata声明存储类型来访问内部扩展RAM区域。
在STC系列单片机中,由SFR内地址为0x8E的辅助寄存器AUXR控制,如表5.16所示。在该寄存器中的EXTRAM位控制是否可以访问该区域,如图5.12所示。当复位时,该寄存器的值为00000001B。
表5.16 辅助寄存器AUXR各位的含义
图5.12 控制访问内部扩展RAM或外部
其中:
(1)EXTRAM为0时,可以访问内部扩展的RAM。在STC15W4K32S4系列单片机中,通过指令
M OVX @DPTR
访问0x0000~0x0EFF单元(3840字节)。
当访问地址超过0x0F00时,总是访问外部数据存储器。
注意: 指令MOVX@Ri只能访问0x00~0xFF单元。
(2)EXTRAM为1时,禁止访问内部扩展RAM,此时指令
M OVX@DPTR/M OVX@Ri
的使用同普通8052单片机。
思考与练习5-23: 在STC 8051单片机中,提供了 容量的内部扩展RAM,其地址为 ,可使用 指令来访问它们。
注意: 从上面可以看出来,访问片内扩展RAM和外部数据存储器的方式是一样的,只不过前者在STC 8051单片机的内部,而后者在STC 8051单片机的外部。
本节将介绍外部数据存储器,内容包括外部数据存储器访问控制和外部数据存储器访问时序。
STC15系列40引脚以上的单片机具有扩展64KB外部数据存储器和I/O口的能力。当访问STC单片机外扩的数据存储器时, 信号有效。在STC15系列单片机中,增加了一个用于控制外部数据存储器数据总线速度的特殊功能寄存器BUS_SPEED。该寄存器在SFR地址为0xA1的位置,如表5.17所示。当复位时,该寄存器设置为xxxxxx10B。
表5.17 BUS_SPEED寄存器各位含义
其中,EXRTS[1:0]比特位的含义如表5.18所示。
表5.18 EXRTS[1:0]比特位的含义
为了方便读者理解外部数据存储器的访问原理,给出了读写外部数据存储器的时序,如图5.13所示。
由于STC单片机的低8位地址线和数据线引脚复用在P0[7:0]端口上,因此在XADRL建立和保持周期内,P0[7:0]端口上产生出所要访问外部数据存储器的低8位地址。P0[7:0]产生的低8位地址和P2[7:0]产生的高8位地址拼成一个16位的地址。它可以访问的外部数据存储器的地址范围为0x0000~0xFFFF,即64KB的范围。
(1)对于写操作而言,在XADRL保持结束后,在P0[7:0]端口上产生将要写到外部数据存储器的8位数据dataout_to_xram[7:0]。
(2)对于读操作而言,在XADRL保持结束后,在P0[7:0]端口上出现外部数据存储器返回的8位读数据dataout_from_xram[7:0]。
更进一步的:
(1)对于STC15系列的单片机来说,写指令的时间长度等于
T XADRL建立+ T XADRL 保持+ T 数据建立+ T 写周期+ T 数据保持
(2)对于STC15系列的单片机来说,读指令的时间长度等于
T XADRL建立+ T XADRL保持+ T 数据建立 + T 读数据保持
注意: (1)建立时间是指在有效触发沿之前,数据/地址有效的时间。
图5.13 外部存储器的写和读操作时序
(2)保持时间是指在有效触发沿之后,数据/地址有效的时间。
由于单片机上的低8位地址和8位数据复用在P0端口上,因此需要将复用的低8位地址和8位数据分离。在实际应用中,通过使用74HC573器件将地址和数据进行分离,如图5.14所示。
图5.14中,74HC573是8位带3态输出的锁存器,其功能如表5.19所示。
表5.19 74HC573输入和输出关系
图5.14 扩展外部32KB存储器的电路结构
在设计中,74HC573器件的LE引脚与STC单片机P4.5/ALE引脚连接。根据图5.13所示的时序,当ALE为高时,P0[7:0]端口给出的是用于访问外部数据存储器的低8位地址。通过这个器件,就产生出可以连接到外部型号为IS62C256 SRAM存储器的低8位地址;而STC单片机的P2[7:0]端口直接产生用于访问外部数据存储器的高8位地址。
P0[7:0]端口和需要访问的外部数据存储器的8位数据线直接进行连接。此外,P2.7引脚可作为访问外部存储器的片选信号。