《80C51单片机的存储器结构》由会员分享,可在线阅读,更多相关《80C51单片机的存储器结构(55页珍藏版)》请在金锄头文库上搜索。
1、第第3章章 80C51单片机的存储器结构单片机的存储器结构第3章 80C51单片机的存储器结构3.1 存储器的分类 存储器的的作用是用来存放程序和数据,存储器可分为磁存储和半导体存储器,半导体存储器按功能又可分为只读存储器ROM和随机存储器RAM,如图3-1所示。单片机存储器结构中都采用半导体存储器。第3章 80C51单片机的存储器结构1. 只读存储器ROM 只读存储器在正常工作状态下只能从中读出数据,用户不能快速地随时修改或者重新写入数据,数据可长时间的保存。(1)可编程ROM,可通过专用设备(编程器)将数据写入ROM。 PROM:用户可一次编程; EPROM:紫外线擦除,电改写(多次);
2、EEPROM:电擦除,电改写(多次); FLASHROM:闪存(多次)。(2)掩膜ROM 用户不能将数据写入,由厂家写入数据。 由于上述特点,所以在单片机中一般做为程序由于上述特点,所以在单片机中一般做为程序存储器。存储器。第3章 80C51单片机的存储器结构2. 随机存取存储器RAM 在加电期间,可以随时向存储器里写入数据或从中读出数据,但掉电后,数据丢失。 SRAM:静态存储器,加电期间数据可以长久保存,掉电信息丢失。 DRAM:动态存储器,即使在加电期间数据也会丢失(数据要刷新)。 由于上述特点,所以在单片机中一般作为数据由于上述特点,所以在单片机中一般作为数据储存器。储存器。第3章 8
3、0C51单片机的存储器结构3.2 计算机中储存器的两种结构 在计算机中存储器的用途是存放程序和数据,它有两种结构:冯诺伊曼结构和哈佛结构。 冯诺伊曼结构:程序和数据共用一个存储器逻辑空间,统一编址。 哈佛结构:程序与数据分为两个独立存储器逻辑空间,分开编址。注: 个人电脑(PC机)采用的是冯诺伊曼结 构; 单片机一般采用哈佛结构(8051); 8051(80C51)单片机,数据存储器用的是 SRAM程序存储器用的是ROM。第3章 80C51单片机的存储器结构3.3 80C51单片机的储存器3.3.1 8051(80C51)系列存储器结构1. 物理空间有四个部分 (1)内部数据存储器(128B
4、SRAM)。 (2)外部扩展数据存储器(最大64K RAM)。 (3)内部程序存储器(4K FlashROM AT89S51)。 (4)外部扩展程序存储器(最大64K RAM)。第3章 80C51单片机的存储器结构2. 逻辑空间有三个部分 (1)程序存储器ROM:包括内部和外部,共用一个64K的寻址空间。 (2)内部数据存储器RAM(128B),独立的一个128B的寻址空间。 (3)外部数据存储器RAM(64K),独立的一个64K的寻址空间。第3章 80C51单片机的存储器结构如图3-2所示。内部数据存储器和外部数据存储器相互之间独立编址,内部数据存储器和外部数据存储器相互之间独立编址,内部程
5、序存储器和外部程序存储器统一编址,共用一个内部程序存储器和外部程序存储器统一编址,共用一个64K的寻址空的寻址空间。间。第3章 80C51单片机的存储器结构3.3.2 数据储存器 数据存储器是采用了静态随机存储器(SRAM)的结构,掉电信息丢失,故用于暂存数据及运算的中间结果。1. 内部数据存储器的结构 内部数据储存器它由工作寄存器区、位寻址区、用户区三个部分组成,地址范围00H7FH,共128个单元。用户对这些单元的访问,可以用可以用“直接寻址直接寻址”的方法,即在指令中用的方法,即在指令中用“direct”表示,表示,指的就是00H7FH这128个地址单元,指令中直接给出操作数所在单元地址
6、的这种寻址方式称之为“直接寻址”。 何为寻址方式,即寻找操作数的方法。第3章 80C51单片机的存储器结构图3-3 内部数据存储器结构第3章 80C51单片机的存储器结构(1)工作寄存器区(00H1FH) 共32个单元,又分为4组,每组8个单元,都用R0R7表示,如图3-4所示,第3章 80C51单片机的存储器结构个寄存器对应的地址见表3-1所示 在内部工作寄存器中的地址是唯一,但寄存器名重名,一个寄存器名对应有4个单元,为了解决重名问题,单片机用特殊功能寄存器PSW中的RS1、RS0来选择,也就是说,单片机在工作时不会同时使用这4组寄存器,在某一时刻,只能选择其中的一组。工作寄存器组地址寄存
7、器名RS1RS00组00H07HR0R7001组08H0FHR0R7012组10H17HR0R7103组18H1FHR0R711第3章 80C51单片机的存储器结构 在指令系统中对于这些空间的访问有以下方法:直接使用地址,在指令系统中用直接使用地址,在指令系统中用“direct”表示,这表示,这种方式称之为直接寻址。种方式称之为直接寻址。 如:指令 MOV A , direct ;指令中的“direct”就是指内部数据存储器中的地址(00H7FH) 该指令就是把direct这个单元中的操作数传送到A中。操作数是指指令中参与操作的数据。 指令系统中出现的“direct”,在实际编程的过程中不能出
8、现,必须写对应的实际地址“00H7FH”,这一点非常重要。 如:MOV A , 30H ;就是将30H中的数送给A。第3章 80C51单片机的存储器结构直接使用寄存器名R0R7,指令系统中用指令系统中用“Rn”表示表示这这8个寄存器,这种方式的寻址称之为个寄存器,这种方式的寻址称之为“寄存器寻址寄存器寻址”,就是操作数放在寄存器中。 如:指令 MOV A , Rn ;指令中的“Rn”就是指工作寄存器R0R7。该指令就是把Rn中的操作数传送到A中。 指令系统中出现的“Rn”,在实际编程的过程中不能出现,必须写对应的寄存器“R0R7”。 如:MOV A , R3 ;就是将工作寄存器R3中的数传送到
9、A中。第3章 80C51单片机的存储器结构R0和R1这两个寄存器还有一种用法,称之为称之为“寄存寄存器间接寻址器间接寻址”,用“Ri”表示,i=0、1。R0和R1存放的是操作数所在单元的地址。 如:MOV A, Ri ; 指令中的“Ri”就是指工作寄存器R0和R1。该指令就是把Ri中的数取出作为所取数据的单元地址。指令系统中出现“Ri”,在实际编程的过程中不能出现,必须写 “R0或R1”。 如:MOV A , R0 ;就是将R0中的数取出,作为所取数据的地址,将该地址单元的数取出送到A中。如图3-5所示, R0所指的操作数就是10101010B(AAH)。第3章 80C51单片机的存储器结构3
10、-5所示, 指令MOV A , R0 操作示意。可以用(R0)=(40H)=AAH表示。第3章 80C51单片机的存储器结构 注: 在寄存器寻址中(Rn),这4组寄存器,由用户使用中通过PSW中的RS1和RS0的设定,来确定用户使用的组。 这32个单元可以使用“直接寻址” 方式,也可使用“寄存器寻址”方式来进行访问。 4组中的R0和R1除了“直接寻址”和“寄存器寻址”外,还可采用“寄存器间接寻址”方式来访问。第3章 80C51单片机的存储器结构(2) 位寻址区(20H2FH) 这16个RAM 单元具有双重功能。它们既可以像普通RAM 单元一样按字节存取,即“直接寻址(direct)”也可以对每
11、个RAM 单元中的任何一个二进制位单独存取,这就是位寻址这就是位寻址(bit),80C51单片机为这些区域专门设置了位处理器(一个1位的CPU),用于这些空间的访问,如图3-6所示。第3章 80C51单片机的存储器结构图3-6,位地址表。第3章 80C51单片机的存储器结构 在指令系统中对于这些空间的访问有以下方法: 可以采用“直接寻址”的方式去访问这16个单元; 如:MOV A , 20H (MOV A , direct) 也可以采用“位寻址(bit)”的方式去访问这128个二进制位。 如:MOV C , 00H (MOV C , bit) 该指令就是把00H中的一个二进制数送到C中。 指令
12、中“bit”,指的就是位地址“00H7FH”。注: 字节地址:20H2FH,位地址:00H7FH。 为了区分位地址“00H7FH”和内部数据存储器的地址“00H7FH”,提到位寻址区中的位地址时,必须注明位地址。单元地址,称之为字节地址,也可简称地址。第3章 80C51单片机的存储器结构(3)数据缓冲区(用户区)(30H7FH) 数据缓冲区共有80个RAM 单元,用于存放用户数据或作堆栈区使用,也称用户RAM区。80C51对用户RAM区中每个RAM单元只能按字节存取的(不可位寻址)。 在指令系统中对于这些空间的访问只有一种方法,即直接寻址(即直接寻址(direct)。)。如:MOV A , 4
13、0H (MOV A , direct)第3章 80C51单片机的存储器结构内部数据存储器小结: 内部数据存储器中所有的单元(128B)都可以用直接寻址的方法来进行访问(direct)。 工作寄存器区也可以用寄存器寻址(Rn)的方法来访问,指令系统中一般都用寄存器寻址(Rn)的方法来访问该空间。除了寄存器寻址的方式,R0和R1也可采用寄存器间接寻址Ri的方式,在使用中R0和R1必须先满足间接寻址方式,有多余的可用于寄存器寻址方式。 位寻址区,对这16个单元可以使用直接寻址方式,这16个单元中的128个位(都有位地址),还可以用位寻址的方式来访问。 用户区只能用直接寻址的方式来访问。 指令系统中所
14、有的数据处理、运算都是在内部数据存储器中完成,所以指令系统也是非常丰富的(大部分指令都是针对该空间)。第3章 80C51单片机的存储器结构2. 外部数据存储器 当内部数据存储器不够用时,在单片机的外总线上可以最大扩展64K的RAM,可独立寻址,有专用指令系统(MOVX传送指令),不能用于数据的运算及处理,所以仅有4条指令,两条读,两条写,用于一般数据的存放,地址为0000HFFFFH。寻址方式采用寄存器间接寻址的方式,如MOVX A , DPTR.,指令中DPTR,开辟在特殊功能寄存器(SFR)中,是一个16位的数据存储器(数据指针),用于访问外部数据存储器和程序存储器,一般用于存放的是外部数
15、据存储器和程序存储器的地址(外部数据存储器的地址也是16位)。存储器结构见图3-7所示。第3章 80C51单片机的存储器结构图3-7 外部数据存储器结构第3章 80C51单片机的存储器结构3.3.3 特殊功能寄存器(SFR) 80C51系列单片机内的锁存器、定时器、串行口、数据缓冲器及各种控制寄存器、状态寄存器都以特殊功能寄存器(SFR)的形式出现,它们离散地分布在高128位片内RAM 80HFFH中。51子系列共有18个特殊功能寄存器,占用21个单元,其余107个单元用户不好使用(AT89C51)。第3章 80C51单片机的存储器结构表3-2 SFR地址映像表第3章 80C51单片机的存储器
16、结构第3章 80C51单片机的存储器结构 这18个特殊功能寄存器,其中有15个特殊功能寄存器占用1个单元,另外3个特殊功能寄存器占用2个单元,这就是为什么18个特殊功能寄存器占用21个单元的原因。这18个特功能寄存器我们先学5个,其余的放在以后学习。第3章 80C51单片机的存储器结构 1累加器ACC(E0H) 累加器ACC 是80C51型单片机中最常用的寄存器。许多指令的操作数取自ACC,许多运算的结果存放在ACC 中。乘除法指令必须通过ACC 进行。累加器ACC 的指令助记符为。 简单的讲就是一个8位的存储器,使用非常频繁,很多指令中必须用到ACC。第3章 80C51单片机的存储器结构 在
17、指令系统中,可直接使用寄存器名ACC(A)和字节地址E0H对这八个二进制位进行操作,前者称之为寄存器寻址,后者称之为直接寻址(direct),用户一般使用寄存器寻址,即寄存器寻址,在特殊条件下才会使用直接寻址。累加器ACC也是一个可以对8个二进制位进行位寻址的寄存器,8个二进制位都有唯一的位地址,指令中只能使用位地址(bit),也称之为位寻址,若使用位编号,编译软件会将位编号转换成位地址,再进行编译,最后形成目标文件。 第3章 80C51单片机的存储器结构2寄存器(F0H) 80C51单片机乘除法指令中要用到寄存器,用于存放操作数和操作结果。也可作为通用存储器器使用。 在乘除指令中,直接使用寄
18、存器名B,称之为寄存器寻寄存器寻址址。用作通用存储器时只能使用地址F0H称之为直接寻址直接寻址,若用寄存器名B,编译软件会将其转换成地址F0H来使用。寄存器B是可以进行位寻址的单元,8个二进制位都有唯一的位地址,在对二进制位寻址时,指令中只能使用位地址(bit),称之为位寻址,若使用位编号,编译软件会将位编号转换成位地址,再进行编译,最后形成目标文件,见图3-9所示。第3章 80C51单片机的存储器结构3程序状态字寄存器程序状态字寄存器PSW(D0H) 程序状态字寄存器程序状态字寄存器PSW也称为标志寄存器,存放各有也称为标志寄存器,存放各有关标志和对工作寄存器的选择设置。其结构和定义如图关标
19、志和对工作寄存器的选择设置。其结构和定义如图3-10所示。在指令系统中该单元只能使用字节地址所示。在指令系统中该单元只能使用字节地址D0H来访问,来访问,称之为直接寻址(称之为直接寻址(direct),若用寄存器名),若用寄存器名PSW,编译软件,编译软件会将其转换成地址会将其转换成地址D0H来使用。程序状态字寄存器来使用。程序状态字寄存器PSW是可是可以进行位寻址的单元,以进行位寻址的单元,8个二进制位都有唯一的位地址,在个二进制位都有唯一的位地址,在对二进制位寻址时,指令中只能使用位地址(对二进制位寻址时,指令中只能使用位地址(bit),称之为),称之为位寻址,若使用位定义或位编号,编译软
20、件会将位定义和位位寻址,若使用位定义或位编号,编译软件会将位定义和位编号转换成位地址,再进行编译,最后形成目标文件。编号转换成位地址,再进行编译,最后形成目标文件。第3章 80C51单片机的存储器结构 该单元各位的定义如下:该单元各位的定义如下:CY:进(借)位标志位,有进(借)位(:进(借)位标志位,有进(借)位(CY)1,否则,否则 (CY)0,主要用于加减运算中。,主要用于加减运算中。AC:辅助进(借)位标志位,低四位向高四位的进(借):辅助进(借)位标志位,低四位向高四位的进(借) 位,有进(借)(位,有进(借)(AC)=1,否则(,否则(AC)=0,主要用,主要用 于加减运算中。于加
21、减运算中。RS1、RS0:工作寄存器组的选择位,见表:工作寄存器组的选择位,见表3-3所示。所示。字节地址字节地址寄存器名寄存器名RS1RS1RS0RS00 0组组00H00H07H07HR0R0R7R70 00 01 1组组08H08H0FH0FHR0R0R7R70 01 12 2组组10H10H17H17HR0R0R7R71 10 03 3组组18H18H1FH1FHR0R0R7R71 11 1第3章 80C51单片机的存储器结构OV:溢出标志位,:溢出标志位,80C51单片机单片机CPU的位数是的位数是8位,则表示位,则表示 带符号数的位数只能是带符号数的位数只能是8位,最高位是符号位,
22、数据位位,最高位是符号位,数据位 只有只有7位,数的范围在位,数的范围在-128+127之间,若运算的结果之间,若运算的结果 超出这个范围,溢出(结果出错)。计算机中判断结超出这个范围,溢出(结果出错)。计算机中判断结 果溢出的算法是果溢出的算法是 公式:公式:OV =Cy6 Cy7 ; 式中,式中,Cy6表示表示D6位向位向D7位的进位或借位,位的进位或借位, Cy7表示表示D6位向位向CY的进位或借位。的进位或借位。F0:用户位,用户可以作为一般的一位二进制数的存储器使:用户位,用户可以作为一般的一位二进制数的存储器使 用。用。P:奇偶标志位,累加器:奇偶标志位,累加器A中中1的个数为奇数
23、时(的个数为奇数时(P)=1,否,否 则(则(P)=0,只要,只要A中的数值发生变化,就影响中的数值发生变化,就影响P(实时(实时 反映累加器反映累加器A中中1的个数的奇偶性)。的个数的奇偶性)。第3章 80C51单片机的存储器结构注:注: CY、AC、OV、P这这4个标志位由指令运行后,对其个标志位由指令运行后,对其 产生影响(由硬件产生各标志),主要用于算术运算产生影响(由硬件产生各标志),主要用于算术运算 类指令,除了类指令,除了CY一般这一般这3位不会用于数据的存储,位不会用于数据的存储, CY也是位处理器(也是位处理器(1位的位的CPU)中的累加器,在位操)中的累加器,在位操 作中使
24、用较为频繁。作中使用较为频繁。 P 在任何一条指令中,只要有累加器在任何一条指令中,只要有累加器A出现并且出现并且A中的中的 值发生变化,就会影响值发生变化,就会影响P。 RS1、RS0是工作寄存器组的选择位,由用户根据需是工作寄存器组的选择位,由用户根据需 要通过指令来设定,去选择寄存器组(软件设定)。要通过指令来设定,去选择寄存器组(软件设定)。第3章 80C51单片机的存储器结构例例1:X=13,Y=6,求X+Y的补码运算。解:解:X补码=F3H,Y补码=FAH, X+Y补码,则: X补码 : 1 1 1 1 0 0 1 1 B Y补码 : + 1 1 1 1 1 0 1 0 B X补码
25、+Y补码 : 1 1 1 1 0 1 1 0 1 B 在单片机中,上述运算后,(CY)=1,(AC)=0, (OV)= Cy6Cy7=11=0(结果正确),(P)=0。 第3章 80C51单片机的存储器结构4数据指针数据指针DPTR(83H、82H) 数据指针数据指针DPTR是一个是一个16位的特殊功能寄存器,不可位位的特殊功能寄存器,不可位寻址,由两个位寄存器寻址,由两个位寄存器DPH(83H) 和和DPL(82H) 组组成,成,DPH 是是DPTR的高位,的高位,DPL是是DPTR的低位,的低位,DPTR既可合并作为一个既可合并作为一个16位寄存器,又可分开按位寄存位寄存器,又可分开按位寄
26、存器单独操作,见图器单独操作,见图3-11所示。所示。第3章 80C51单片机的存储器结构 在指令中一般都是以一个在指令中一般都是以一个16位的寄存器位的寄存器DPTR使用使用,用于用于存放外部数据存储器的地址和程序程序器的地址,访问外部存放外部数据存储器的地址和程序程序器的地址,访问外部数据存储器是用数据存储器是用DPTR,称之为寄存器间接寻址;访问程序,称之为寄存器间接寻址;访问程序存储器是用存储器是用A+DPTR,称之为变址寻址。作为两个独立的,称之为变址寻址。作为两个独立的8位寄存器(位寄存器(DPH、DPL)使用时,只能使用其地址,在指令)使用时,只能使用其地址,在指令系统中会详解。
27、系统中会详解。第3章 80C51单片机的存储器结构5堆栈指针堆栈指针SP(81H) 堆栈是堆栈是CPU 用于暂时存放部分数据的用于暂时存放部分数据的“仓库仓库”,它的作用是它的作用是用来保护现场和保护断点。在用来保护现场和保护断点。在80C51中,由内部数据存储器中,由内部数据存储器中若干存储单元组成,可由用户自定义单元地址,一般开辟中若干存储单元组成,可由用户自定义单元地址,一般开辟在内部数据存储器在内部数据存储器30H7FH这个空间。存储单元的个数称这个空间。存储单元的个数称为堆栈的深度,可理解为仓库容量。为了实现上述数据保护为堆栈的深度,可理解为仓库容量。为了实现上述数据保护的需要,数据
28、的存取,要遵循先进后出,后进先出的原则。的需要,数据的存取,要遵循先进后出,后进先出的原则。80C51单片机中用堆栈指针单片机中用堆栈指针SP(81H)来实现数据的先进后)来实现数据的先进后出,后进先出,即不可位寻址。它开辟在特殊功能寄存器出,后进先出,即不可位寻址。它开辟在特殊功能寄存器81H中,没有位地址,即不可位寻址,如图中,没有位地址,即不可位寻址,如图3-12所示所示第3章 80C51单片机的存储器结构 堆栈指针堆栈指针SP是用来存放堆栈数据区的地址,如图是用来存放堆栈数据区的地址,如图3-13所所示。一般为了书写方便,堆栈的示意图,如图示。一般为了书写方便,堆栈的示意图,如图3-1
29、4所示。所示。第3章 80C51单片机的存储器结构 堆栈数据的存取又称之为进栈和出栈。进栈时,首先堆堆栈数据的存取又称之为进栈和出栈。进栈时,首先堆栈指针加栈指针加1,即,即(SP) (SP)+1,然后数据进栈;出栈时,先,然后数据进栈;出栈时,先取堆栈的数据,然后堆栈指针减取堆栈的数据,然后堆栈指针减1,即,即(SP) (SP)-1。 数据的进栈和出栈,又有两种操作形式,一是硬件操作,数据的进栈和出栈,又有两种操作形式,一是硬件操作,计算机执行某个操作时,硬件自动进栈(中断、调用)和出计算机执行某个操作时,硬件自动进栈(中断、调用)和出栈(返回指令),用于保护断点。二是软件操作,由指令栈(返
30、回指令),用于保护断点。二是软件操作,由指令PUSH direct(进栈)和指令(进栈)和指令POP direct(出栈)来实现。(出栈)来实现。不管是硬件操作还是软件操作,进栈时,首先堆栈指针加不管是硬件操作还是软件操作,进栈时,首先堆栈指针加1,然后数据进栈;出栈时,先取堆栈的数据,然后堆栈指针,然后数据进栈;出栈时,先取堆栈的数据,然后堆栈指针减减1。下面以软件操作加以说明。下面以软件操作加以说明。第3章 80C51单片机的存储器结构例例2:已知:已知(SP)=2FH,(40H)=22H,(41H)=33H执行下列程序。执行下列程序。 PUSH 40H PUSH 41H POP 40H
31、POP 41H解:根据初始条件,得示意图,存储器中没有提到单元的数据解:根据初始条件,得示意图,存储器中没有提到单元的数据为任意值。为任意值。第3章 80C51单片机的存储器结构 执行第一条指令执行第一条指令 PUSH 40H,首先,首先(SP) (SP)+1=2FH+1=30H,然后将,然后将40H中的数据中的数据22H,送入堆栈指针,送入堆栈指针SP指向的单元指向的单元30H中,如图中,如图3-16(a)所示。第一个进栈的数)所示。第一个进栈的数据不是堆栈指针指向的初始单元,在计算机中数据的传送,据不是堆栈指针指向的初始单元,在计算机中数据的传送,不是完全给予的意思,而是复制,不是完全给予
32、的意思,而是复制,40H单元数据进栈后,影单元数据进栈后,影响了堆栈指针指向的单元,但不影响响了堆栈指针指向的单元,但不影响40H这个单元的原始数这个单元的原始数据,所以据,所以40H的数据仍为的数据仍为22H。第3章 80C51单片机的存储器结构 执行第二条指令执行第二条指令 PUSH 41H,进栈过程同第一条指令。,进栈过程同第一条指令。进栈后,示意图如图进栈后,示意图如图3-16(b)所示。)所示。第3章 80C51单片机的存储器结构 执行第三条指令执行第三条指令 POP 40H,首先是取堆栈指针指向单,首先是取堆栈指针指向单元的数据给元的数据给40H,则,则40H的数据为的数据为33H
33、,然后将,然后将(SP) (SP)-1=31H-1=30H,执行完后,示意图如图,执行完后,示意图如图3-16(c)所示。)所示。第3章 80C51单片机的存储器结构 执行第四条指令执行第四条指令 POP 41H,出栈过程同第四条指令,出栈过程同第四条指令,示意图如图示意图如图3-16(d)所示。当数据取出后,堆栈指针又回)所示。当数据取出后,堆栈指针又回到初始状态,如图到初始状态,如图3-15所示。但原来进栈的数还存于堆栈中,所示。但原来进栈的数还存于堆栈中,直到下次进栈的数据将其覆盖。直到下次进栈的数据将其覆盖。第3章 80C51单片机的存储器结构 该程序,是将该程序,是将40H和和41H
34、的数据交换,进栈两次,出栈的数据交换,进栈两次,出栈两次,所以堆栈指针两次,所以堆栈指针SP的值,仍为初始值的值,仍为初始值2FH,堆栈指针的,堆栈指针的初始值指向的单元,是不能用于存放堆栈数据的,第一个入初始值指向的单元,是不能用于存放堆栈数据的,第一个入栈的数据,是该单元的地址加栈的数据,是该单元的地址加1单元。单元。第3章 80C51单片机的存储器结构 系统复位时堆栈指示器的值为系统复位时堆栈指示器的值为07H,即指向的是工作寄,即指向的是工作寄存器区存器区0组的组的R7单元,如图单元,如图3-17所示,第一个入栈的数放于所示,第一个入栈的数放于08H单元,但堆栈一般开辟在用户区(单元,
35、但堆栈一般开辟在用户区(30H7FH)中。堆栈)中。堆栈的深度是由数据连续进栈的次数来决定的。若根据某个程序的深度是由数据连续进栈的次数来决定的。若根据某个程序设计的需要,需要设计的需要,需要16个单元堆栈来存储数据,堆栈开辟在个单元堆栈来存储数据,堆栈开辟在40H到到4FH单元,则堆栈指示器单元,则堆栈指示器SP的初始值应付的初始值应付3FH,第一,第一个入栈的数放入个入栈的数放入40H中,在程序的设计中,中,在程序的设计中,40H41H中不能中不能用于其它的数据的存放,否则数据被覆盖。若实际进栈的数用于其它的数据的存放,否则数据被覆盖。若实际进栈的数据超出了据超出了16个单元,则堆栈溢出,
36、溢出的单元在个单元,则堆栈溢出,溢出的单元在50H以上,以上,这些单元没有数据,则没有影响,否则影响原有数据。堆栈这些单元没有数据,则没有影响,否则影响原有数据。堆栈指针始终指向的是堆栈的栈顶位置。指针始终指向的是堆栈的栈顶位置。第3章 80C51单片机的存储器结构注:注: 51子系列中,共有子系列中,共有18个个SFR(特殊功能寄存器),(特殊功能寄存器), 占用占用21个单元,我们先学个单元,我们先学5个个SFR(共(共6个单元),个单元), 其余其余SFR在后面的学习中,会逐步的给大家介绍。在后面的学习中,会逐步的给大家介绍。 这这18个个SFR,21个单元中,字节地址能被个单元中,字节
37、地址能被8整除的单整除的单 元是可以进行位寻址的,也就是说字节地址的后面元是可以进行位寻址的,也就是说字节地址的后面 一位是一位是0或者或者8,都是可以进行位寻址的(,都是可以进行位寻址的(bit)。)。 可位寻址的单元,可以用位地址、位编号或位定可位寻址的单元,可以用位地址、位编号或位定 义,在寻址中都称之为位寻址(义,在寻址中都称之为位寻址(bit)。)。 系统复位后,各寄存器的值如表系统复位后,各寄存器的值如表3-4所示。所示。第3章 80C51单片机的存储器结构第3章 80C51单片机的存储器结构3.3.4 程序存储器程序存储器 程序存储器的作用是用来存放程序和数表(固定不变的程序存储
38、器的作用是用来存放程序和数表(固定不变的常数)。常数)。AT89S51单片机内部有单片机内部有4K的程序存储器的程序存储器FlashROM,外部最多可扩展,外部最多可扩展64K的程序存储器,内外程序的程序存储器,内外程序存储器采用统一编址的方法,即共用存储器采用统一编址的方法,即共用64K的地址,地址范围的地址,地址范围0000HFFFFH,不管是内部还是外部都是用指令,不管是内部还是外部都是用指令MOVC来来访问。如图访问。如图3-18所示。所示。第3章 80C51单片机的存储器结构1.程序存储器的结构程序存储器的结构 8051(80C51)系列有系列有64K ROM 的寻址区,地址范围的寻
39、址区,地址范围0000HFFFFH,用于存放程序。用于存放程序。 其中低其中低4K(0000H0FFFH) 的地址区可以为片内的地址区可以为片内ROM 和和片外片外ROM共用,但不能同时使用共用,但不能同时使用(由外引脚由外引脚 决定决定)。 高高60K(1000HFFFFH) 的地址区为片外的地址区为片外ROM所专用。所专用。第3章 80C51单片机的存储器结构注:注: 低低4K共用地址,这样出现一个地址两个单元,地址不能共用地址,这样出现一个地址两个单元,地址不能 唯一,这在计算机中是不允许的;唯一,这在计算机中是不允许的; 解决方法,通过单片机的外引脚解决方法,通过单片机的外引脚 来实现
40、:来实现: a、当、当 =0时,时,CPU直接访问外直接访问外ROM(0000HFFFFH), 内部不用;内部不用; b、 当当 =1时,时,CPU先访问内部先访问内部ROM(0000H0FFFH) 结束后,再去访问外部结束后,再去访问外部ROM (1000HFFFFH),外部低),外部低4K不用,也不用,也 就是说外部低就是说外部低4K无需扩展,这种情况下,无需扩展,这种情况下, 外部最多可扩展外部最多可扩展60K。第3章 80C51单片机的存储器结构2. CPU对程序存储器中程序的访问对程序存储器中程序的访问 CPU对存储器的访问也就是执行程序,程序存储器的主对存储器的访问也就是执行程序,
41、程序存储器的主要作用是用来存放程序,那要作用是用来存放程序,那CPU怎么去执行程序呢?怎么知怎么去执行程序呢?怎么知道哪一条指令先执行?哪一条指令后执行呢?其实计算机根道哪一条指令先执行?哪一条指令后执行呢?其实计算机根本不认程序,只认程序存储器的单元地址,先从低字节地址本不认程序,只认程序存储器的单元地址,先从低字节地址单元开始取指令执行,然后取高字节地址单元指令执行,而单元开始取指令执行,然后取高字节地址单元指令执行,而CPU这些操作,都是通过程序计数器这些操作,都是通过程序计数器PC(程序指针)来实(程序指针)来实现,现,PC是一个是一个16位的寄存器,不可寻址(无地址),用户位的寄存器
42、,不可寻址(无地址),用户不可操作,系统复位后(不可操作,系统复位后(PC)0000H,每取一个单元程,每取一个单元程序执行后,序执行后,PC会由硬件自动加会由硬件自动加1,去取下一个单元来执行,去取下一个单元来执行,以此类推,直到遇到转移指令为止,转移时以此类推,直到遇到转移指令为止,转移时CPU会将转移位会将转移位置的地址直接付给置的地址直接付给PC,从这个新的地址开始,又重复上述,从这个新的地址开始,又重复上述过程。过程。第3章 80C51单片机的存储器结构 由于由于CPU只认存储器的地址不认程序,哪怎样保证程序只认存储器的地址不认程序,哪怎样保证程序的正确执行呢?只能由用户,根据的正确
43、执行呢?只能由用户,根据CPU访问程序存储器的特访问程序存储器的特点,将目标程序(二进制语言程序)按上述特点来存放,也点,将目标程序(二进制语言程序)按上述特点来存放,也就是将先要执行的指令,放在低字节单元,后执行的指令放就是将先要执行的指令,放在低字节单元,后执行的指令放在高字节单元。又由于在高字节单元。又由于PC复位后指向复位后指向0000H单元,故主程单元,故主程序的第一条指令必须放在序的第一条指令必须放在0000H开始的单元,开始的单元,0000H也就是也就是主程序的入口地址。主程序的入口地址。 目标程序的存放是通过编译软件中的伪指令来实现的,目标程序的存放是通过编译软件中的伪指令来实现的,编译软件的作用是检查语法错误和生成目标程序(二进制语编译软件的作用是检查语法错误和生成目标程序(二进制语言程序),伪指令用于编译的过程(汇编)中,其中伪指令言程序),伪指令用于编译的过程(汇编)中,其中伪指令ORG就是给出程序存放在程序存储器中的起始地址。就是给出程序存放在程序存储器中的起始地址。第3章 80C51单片机的存储器结构