1、直接地址与寄存器
1.1、A和ACC
(1)A是没有地址的,可以当作寄存器使用。
(2)ACC是有地址的,地址为E0H(查数据手册)。
(3)如果使用压栈操作,要用ACC。因为ACC可当做直接地址。
(4)如果使用位操作,要用ACC。因为ACC可位寻址。
(5)使用ACC和A赋值操作时效果是一样的,但机器码不同;
使用E0H和ACC机器码是一样的。
C:0x0000 7410 MOV A,#0x10
C:0x0002 75E010 MOV ACC(0xE0),#0x10
C:0x0005 75E010 MOV ACC(0xE0),#0x10
1.2、R0-R7与00H-07H
(1)R0寄存器对应地址为0x00。
(2)在汇编中,使用0x00和R0效果相同,但使用R0效率更高。
(3)使用0x00和R0生成的机器码不同,一个是直接地址,一个是寄存器。如下。
C:0x0000 7820 MOV R0,#0x20
C:0x0002 750020 MOV 0x00,#0x20
(4)使用0x00是从地址总线上去寻地址0x00这个空间,使用R0是直接操作这个寄存器。这两种方式操作的空间是一样的。
2、ROM和RAM
ROM称为程序存储器,RAM称为数据存储器。
2.1、ROM
(1)51单片机地址线为16跟,即寻址范围为2的16次方字节,65536字节 = 65536/1024=64K字节。
(2)寻址范围为0x00000-0xFFFF。
(3)51单片机内部ROM和外扩ROM独立寻址,所以51单片机最大ROM为128KByte。
(4)通过EA引脚的高低电平来确认总线是访问片内程序存储器还是片外程序存储器。
(5)目前的单片机内部ROM基本能满足需求。
(6)中断向量地址:00H -- 23H,不同芯片查询中断向量表;用户程序存在往后地址。
2.2、RAM
2.2.1、数据存储器SRAM
(1)51单片机中的RAM为SRAM。
(2)RAM可用于存放程序执行的中间结果和过程数据。多数单片机RAM在物理和逻辑上都分为两个地址空间:内部RAM和内部扩展RAM,部分MCU还有片外(MCU外)扩展RAM。
2.2.2、内部RAM
(1)STC89C54RD+片内RAM共256字节,可分为3个部分:低128字节RAM(与传统8051兼容)、高128字节RAM(Intel在8052中扩展了高128字节RAM)、特殊功能寄存器区。
(2)内部RAM结构如下图所示,地址范围是00H-FFH。
(3)低128字节(地址00H-7FH)的数据存储器既可以直接寻址也可间接寻址。
(4)高128字节RAM与特殊功能寄存器区貌似共用相同的地址范围,都使用80H-FFH,地址空间貌似重叠,但物理上是独立的,使用时通过不同的寻址方式加以区分。
(5)高128字节RAM只能间接寻址,特殊功能寄存器区只能直接寻址。
2.2.3、低128字节的RAM
(1)低128字节RAM也称为通用RAM区。
(2)通用RAM区又可分为工作寄存器组区,可位寻址区,用户RAM区和堆栈区。
(3)工作寄存器组区地址从00H-1FH,共32字节单元,分为4组(每一组称为一个寄存器组),每组包含8个8位的工作寄存器,编号均为R0-R7,但属于不同的物理空间。
(4)通过使用工作寄存器组,可以提高运算速度。R0-R7是常用的寄存器,提供4组是因为1组往往不够用。程序状态字PSW寄存器中的RS1和RS0组合决定当前使用的工作寄存器组。
2.2.4、扩展RAM
(1)单片机内部最大256字节RAM是由单片机内核决定的。
(2)扩展的RAM可集成在片内,即物理上是单片机内部的,逻辑上是外部的。使用MOVX指令访问。
(3)逻辑上外部的RAM,物理上可能是内部,也可能是外部。STC通过AUXR寄存器中的 EXTRAMbit来进行选择是访问内部或外部,两者只能选其一。因为本质上都是通过总线挂接扩展的。
(4)逻辑上外部RAM,物理上也是外部的RAM。在目前几乎遇不到。