EA接低电平,则机器自动使用片外ROM,这一关系如图2-9(a)所示.由于803l片内无ROM,故它的EA应接地。 (3) 片外RAM
MCS-51的片内RAM容量有128个存储单元,可以用来存放操作数。操作结果和实时数据。如果片内RAM容量太小,不能满足控制需要,也可以外接外部RAM。但外接外部RAM的最大容量不能超过64KB,地址范围为0000H~FFFFH。
MCS-51可以对片外RAM中数据进行读/写。读/写指令共有如下四条。前两条用于把片外RAM中数据读入累加器A,后两条用于把累加器A中数据写入片外RAM中。
MOVX A, @R1 ;A←(Ri) MOVX A, @DPTR ;A←(DPTR) MOVX @Ri, A ;A→(Ri) MOVX @DPTR, A ;A→(DPTR) (4) 片内RAM
由表2-2可见,8052AH/8752BH的片内RAM共有256个存储单元.地址范围为00H—FFH其中,00H~7FH为片内RAM的低]28字节区.80H—FFH为片内RAM的高128字节区。由于片内RAM的高128字节区和特殊功能寄存器SFR的物理地址区产生冲突,故8052AH/8752BH的设计师们采用不同的寻址方式对它们分别存取。即8052AH/8752BH采用间接寻址方式存取片内RAM的高128字节区,采用直接寻址方式存取SFR(Special Function Register,特殊功能寄存器)区。例如,若要把片内RAM的83H中内容存人累加器A,则应采用如下两条指令,因为MOV A,@R0为间接寻址指令。
MOV R0, #83H ;R0←83H A4(JV A, @R0 ;A←(83H) 若要把DPH中内容送入累加器A,则可采用如下一条直接寻址指令,因为DPH寄存器的物理地址是83H(见表2-4),这两个83H显然不是同一个存储单元。
MOV A, 83H ;A←DPH
00H~7FH是片内RAM的低128字节区。由于这个地址范围和SFR的物理地址不产生冲突,因此MC5-51既可以采用直接寻址方式对它寻址,也可以采用间接寻址方式寻址。对于8051/8031,除无片内RAM的高128字节区外,其余与8052AH/8752BH没有任何区别。
在00H-07FH这个地址空间中,根据不同功能又可分为工作寄存器区.位寻址区和便笺区等三个子区域,如图2-10所示。
- 16 -
图2-10 8051内部RAM分配
1)工作寄存器区(00H~1FH) 这32个RAM单元共分四组,每组占8个RAM单元,分别用代号R0~R7表示。R0~R7可以指向四组中的任一组,由PSW中RS1RS0状态决定,如表2-3所列。
2)位寻址区(20H~2FH) 这16个RAM单元具有双重功能。它们既可以像普通RAM单元一样按字节存取,也可以对每个RAM单元中的任何一位单独存取,这就是位寻址。
20H~2FH用作位寻址时,共有16×8=128位,每位都分配了一个特定地址,即00H~7FH。这些地址称为位地址,如图2-10所示。位地址在位寻址指令中使用。例如,欲把2FH单元中最高位(位地址为7FH)置位成1,则可使用如下位置位指令
SETB 7FH ;7FH←1
其中:SETB为位置位指令的操作码。
位地址的另一种表示方法是采用字节地址和位数相结合的表示法00H可以表示成20H,0,位地址1AH可以表示成23H.2,等等。
- 17 -
3)便笺区(30H~7FH) 便笺区共有80个RAM单元,用于存放用户数据或作堆栈区使用。MCS-51对便笺区中每个RAM单元是按字节存取的。
(5) 特殊功能寄存器SFR(80H-FFH)
特殊功能寄存器是指有特殊用途的寄存器集合。SFR的实际个数和单片机型号有关:8051或8031的SFR有21个,8052的SFR有26个。每个SFR占有一个RAM单元,它们离散地分布在80H-FFH地址范围内,不为SFR占用的RAM单元实际上并不存在,访问它们也是没有意义的,如表2-4所列。
表2-4 特殊功能寄存器一览表
对于8051,已对累加器A、B寄存器、PSW、SP和DPTR等作过介绍。在21个SFR中,用户可以通过直接寻址指令对它们进行字节存取,也可以对带有*的11
- 18 -
个字节寄存器中的每一位进行位寻址。在字节型寻址指令中,直接地址的表示方法有两种:一种是使用物理地址,如累加器A要用E0H、B寄存器用F0H.SP用81H,等等;另一种是采用表2-3中的寄存器标号,如累加器A要用ACC,B寄存器用B、程序状态字寄存器用PSW,等等。这两种表示方法中,采用后一种方法比较普遍,因为它们比较容易为人们所记忆。
在SFR中.可以位寻址的寄存器有11个,共有位地址88个,其中5个未用.其余83个位地址离散地分布于80H~FFH范围内,如图2-11所示。
图2-11 SFR中的位地址分布
2.2.1.3 MCS-5l内部并行I/O端口
8031有4个并行I/O端口,分别命名为P0,P1,P2和P3。这4个并行I/O端口的内部结构如图2-12所示。每个端口皆有8位,但图中只画出了其中的一位。由图可见,每个I/O端口都由一个8位数据锁存器和—个8位数据缓冲器组成。其中,8位数据锁存器和端口号P0,P1,P2和P3同名,属于21个特殊功能寄存器中的4个,用于存放需要输出的数据,8个数据缓冲器用于对端口引脚上输入数据进行缓冲,但不能锁存,因此各引脚上输入的数据必须一直保持到CPU把它读走为止。
- 19 -
- 20 -