2.3 MCS-51单片机存储器和寄存器
单片机要能够正常工作,在存储器方面,ROM和RAM是不可以缺少的。同时,要控制很多部件,还需要更多的寄存器,因为很多部件都是和寄存器关联的。例如想要操作P1口,只需要对位于90H的P1寄存器操作就可以了,下面就主要来看看这两个方面。
2.3.1 MCS-51单片机的存储器结构
目前,很多单片机一般都会在内部集成一定数量的程序存储器和数据存储器,而且根据程序量的大小,都可以在一个系列里找到相应的型号,所以通常都不再需要像以前的8031那样扩展外部程序存储器,下面以AT89C51为例来看看存储器的结构,如图2-5所示。
图2-5 AT89C51存储器的结构
就程序存储器而言,AT89C51已经集成了4KB,一般的应用已经足够。但是,如果在外部扩展到64KB的话,那么其分布就如图2-5左边所表示的一样。如果EA=0,那么程序的执行全部在外部空间,反之如果EA=1,那么当程序小于4KB的时候,程序执行在内部空间,而大于4KB时,超出部分就会到外部空间。总之,程序存储器有部分重叠。
数据存储器也分成内外两种,由于采用不同的方法访问,所以不存在重叠的现象。一般如果不是设计得比较复杂的数据采集系统,扩展外部RAM的可能性也比较小,所以比较重要的是内部的RAM空间,说它重要其实还有另外一个原因:特殊功能寄存器都分布在这里。
内部RAM分成两大部分,即普通RAM和特殊功能寄存器,其地址范围分别为00H~7FH和80H~F0H。普通RAM的具体分类如图2-6所示,特殊功能寄存器的示意图如图2-7所示。
图2-6 普通RAM区结构
虽然出于功能区分,这些RAM被分成很多类别,但它们在本质上是一样的,不过是个“内容可以修改的地址”而已,所以很多时候,对上述的通用寄存器区和特殊功能寄存器,除了可以用特殊的名字,例如P0进行访问之外,也完全可以用其地址80H进行直接访问。这里还有一个很特殊的RAM区,即可位寻址RAM区,其特点是一个字节中的每个bit都是可以单独访问的,这些数据对应了C51语言里的一种扩展的数据类型bdata,在以后的程序设计中,肯定会用到。
图2-7 特殊功能寄存器结构
2.3.2 MCS-51单片机的寄存器
MCS-51单片机的寄存器分成两类,一种是通用寄存器,前面提到的通用寄存器区便是这个类别的,但是在采用高级语言编程时,这些寄存器其实是看不到的,通常它们会被用来作为函数内部的局部变量和函数调用时传递参数之用,由编译器统一接管。但是作为特殊功能寄存器的另外一种寄存器,是需要程序中处理的,因为他们往往对应了硬件操作,需要开发人员按功能需求进行控制。所以粗略地了解一下这些寄存器的功能,需要的时候可以翻书来查看。
1.P0、P1、P2、P3
这4个特殊功能寄存器对应了4组I/O口,通过对这些地址的读和写,可以改变和获得I/O的状态。例如下面的程序,就完成了对P1口的读取和P3口的输出操作。
2.PCON
这个寄存器叫做电源控制寄存器,主要用来作功率控制之用。所谓功率控制,主要是指在那些要求低功耗的场合,例如某个设备如果5min没有操作便自动进入待机模式,这是出于节能的目的,使单片机进入掉电或空闲模式。这个寄存器中实际与这个功能相关的bit只有两个:PD和IDL,即掉电控制位和空闲模式位。最高位SMOD是串口波特率加倍控制位,置1时,串口波特率加倍。GF1和GF0是通用的标志位。
3.TMOD、TCON、TH1、TH0、TL1、TL0
这组寄存器全部和定时/计数器相关,其中TMOD为模式控制寄存器,用来设定工作模式;TCON为控制寄存器,用来对定时/计数器进行开启/关闭和终端势能等的控制。THn和TLn分别是相应的计数寄存器。
4.SCON、SBUF
这两个寄存器和串口相关,SCON是串行通信口的控制寄存器,完成波特率以及数据格式的设定和中断使能控制等;SBUF则是数据收发的缓冲区。
5.IE、IP
这两个寄存器控制了中断功能的使能以及优先级别的设定。其中IE.7为EA,是所有中断的总控制开关,其他5个bit则是对应中断的控制开关,对应的是IP中这5个中断的优先级设置位。
6.SP、PSW、ACC、B、DPH、DPL
这些寄存器对单片机的工作而言是很重要的,但是因为用了C51来设计程序,对程序设计来说,它们就不再是非了解不可了。