51系列单片机在系统结构上采用哈佛结构,有4个物理上独立的存储器空间,即内部和外部程序存储器及内部和外部数据存储器。
从用户的角度看,单片机的存储器逻辑上分为三个存储空间,如图2-5所示,即统一编址的64KB的程序存储器地址空间(包括片内ROM和外部扩展ROM),地址从0000H~FFFFH;256B的片内数据存储地址空间(包括128B的片内RAM和特殊功能寄存器的地址空间);64KB的外部扩展的数据存储器地址空间。其中,EA即是单片机的程序扩展控制引脚。
图2-5 51系列单片机的存储器空间分布
1 单片机的数据存储器RAM
51系列单片机芯片中共有256个字节的RAM单元,但其中128个字节被专用寄存器占用,能作为存储单元供用户使用的只是前128B,用于存放可读写的数据,简称片内RAM。在程序比较复杂,且运算变量较多而导致51系列单片机内部RAM不够用时,可根据实际需要在片外扩展,最多可扩展64KB,但在实际应用中如需要大容量RAM时,往往会利用增强型的51系列单片机而不再扩展片外RAM。增强型51系列单片机(如52和58子系列)分别有256B和512B的RAM。
51系列单片机片内128B RAM根据功能又划分为工作寄存器区(地址00H~1FH)、位寻址区(地址20H~2FH)、字节寻址区(地址30H~7FH)和特殊功能寄存器区(地址80H以后),其中位寻址区共16字节128个单元,如图2-6所示。
实际使用时应首先充分利用内部存储器,从使用角度讲,搞清内部数据存储器的结构和地址分配是十分重要的。
图2-6 MCS-51系列单片机数据存储器的配置
(1)特殊功能寄存器
特殊功能寄存器(Special Function Register,SFR)是通过专门规定而且具有特定用途的RAM部分,51系列单片机内部堆栈指针SP、累加器A、程序状态字PSW以及I/O锁存器、定时器、计数器以及控制寄存器和状态寄存器等都是特殊功能寄存器,和片内RAM统一编址,分散占用80H~FFH单元,共有21个,增强型的52系列单片机则有26个,AT89系列也在21个基础上有所增加。表2-3列出了单片机的特殊功能寄存器名称、标识符和对应的字节地址,其中含有52系列的寄存器T2、T2CON等。
表2-3 特殊功能寄存器
(续)
特殊功能寄存器能综合反映单片机系统内部的工作状态和工作方式,其中一部分作为内部控制用,如定时/计数器和串行接口的控制,如果改变控制寄存器的状态就可以改变其功能,使得单片机内部硬件的控制以可编程的形式体现。其中字节地址以0H或8H结尾的特殊功能寄存器可以进行位操作。空白地区不能读写,行为随机。
不是所有的特殊功能寄存器都可以进行位的编程操作,对于没有定义位标识符或位标识符重复的寄存器,用户无法对位直接访问,如TMOD,由于其高4位和低4位标识符同名,只能采用字节操作。每一个特殊功能的寄存器都有针对性的应用,见表2-4。(www.xing528.com)
表2-4 特殊功能寄存器位标识符和位地址表
在表2-4中,P0~P3是和输出/输入有关的4个特殊寄存器,实际上是4个锁存器。每个锁存器加上相应的驱动器和输入缓冲器就构成了一个并行接口,并且为单片机外部提供32根I/O引脚,命名为P0~P3口。在C语言程序设计过程中,执行指令P0=0xFF后,单片机的P0口的8个I/O引脚上都输出高电平。在程序设计过程中,单片机的功能发挥很多情况下是设置和检测单片机内部的特殊功能寄存器来实现的。
(2)STC系列单片机数据存储器RAM
特殊功能寄存器用于对片内各功能模块进行监控和管理,是一些控制寄存器和状态寄存器,与片内RAM单元统一编址。特殊功能寄存器反映了8051的状态,实际上是8051的状态字及控制字寄存器。STC系列则与之并不完全相同。STC89C52RC系列单片机内部集成了512BRAM,可用于存放程序执行的中间结果和过程数据。内部数据存储器在物理和逻辑上都分为两个地址空间:内部RAM(256B)和内部扩展RAM(256B)。此外,还可以访问在片外扩展的64KB数据存储器。
STC89C52RC单片机内部512B的RAM有3个部分:①低128B(00H~7FH)的空间既可以直接寻址也可间接寻址,内部低128B RAM又可分为工作寄存器组0(00H~07H)8B、工作寄存器组1(08H~0FH)8B、工作寄存器组2(10H~17H)8B、工作寄存器组3(18H~1FH)8B、可位寻址区(20H~2FH)16B、用户RAM和堆栈区(30H~7FH)80B。其中在00H~1FH共32个单元,被均匀地分为4组工作寄存器堆RB0、RB1、RB2、RB3,每组寄存器堆包含8个工作寄存器,均以R0~R7来命名,这些寄存器被称为通用寄存器。②高128B(80H~FFH)的空间和特殊功能寄存器区SFR的地址空间(80H~FFH)貌似共用相同的地址范围,但物理上是独立的,使用时通过不同的寻址方式加以区分,高128B只能间接寻址,而特殊功能寄存器区SFR只能直接寻址。③内部扩展的256B RAM空间,在物理上是内部,但逻辑上是占用外部数据存储器的部分空间,需要用MOVX来访问。内部扩展RAM是否可以被访问是由辅助寄存器AUXR(地址为8EH)的第EXTRAM位来设置。
当片内RAM不够用时,需外扩数据存储器,STC89C52最多可外扩64KB的RAM。注意,片内RAM与片外RAM两个空间是相互独立的,片内RAM与片外RAM的低256B的地址是相同的,但由于使用的是不同的访问指令,所以不会发生冲突。
另外,只有在访问真正的外部数据存储器期间,WR或RD信号才有效。但当MOVX指令访问物理上在内部,逻辑上在外部的片内扩展RAM时,这些信号将被忽略。
2 内部程序存储器ROM
51单片机共有4 KB的ROM,单片机的生产商不同,内部程序存储器可以是E2PROM或Flash ROM。可根据实际需要在片外扩展,最多可扩展64KB。增强型51单片机内部ROM空间可以达到64KB,在使用时不须再扩展片外ROM。程序或常数事先通过编程器写入,单片机正常工作时对ROM只能读出,不能写入,断电后,ROM中的数据不会丢失。
单片机程序存储器访问片内的还是片外的,由引脚电平确定。高电平时,CPU从片内0000H开始取指令,当PC值没有超出1FFFH时,只访问片内Flash存储器,当PC值超出1FFFH自动转向读片外程序存储器空间2000H~FFFFH内的程序;低电平时,只能执行片外程序存储器(0000H~0FFFH)中的程序,不理会片内8KB Flash存储器。
程序存储器某些固定单元用于各中断源中断服务程序入口。除此之外,64KB程序存储器空间中有8个特殊单元分别对应于6个中断源的中断入口地址,见表2-5。通常这6个中断入口地址处都放一条跳转指令跳向对应的中断服务子程序,而不是直接存放中断服务子程序。因为两个中断入口间的间隔仅有8个单元,一般不够存放中断服务子程序。
表2-5 MCS-51系列单片机程序存储器特定的入口地址
编程时,通常不连续使用这些单元,而是在这些入口地址开始处放入一条转移指令,将程序转移到其他地方,以保留这些单元作为特定的用途。
数据存储器、程序存储器以及位地址空间的地址有一部分是重叠的,但在具体寻址时,可由不同的指令格式和相应的控制信号来区分不同的地址空间,因此不会造成冲突。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。