




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第3章 80C51单片机的存储器结构 第第3章章 80C51单片机的存储器结构单片机的存储器结构 第3章 80C51单片机的存储器结构 3.1 存储器的分类 存储器的的作用是用来存放程序和数据,存储 器可分为磁存储和半导体存储器,半导体存储器按 功能又可分为只读存储器ROM和随机存储器RAM, 如图3-1所示。单片机存储器结构中都采用半导体存 储器。 第3章 80C51单片机的存储器结构 1. 只读存储器ROM 只读存储器在正常工作状态下只能从中读出数 据,用户不能快速地随时修改或者重新写入数据, 数据可长时间的保存。 (1)可编程ROM,可通过专用设备(编程器)将 数据写入ROM。 PROM
2、:用户可一次编程; EPROM:紫外线擦除,电改写(多次); EEPROM:电擦除,电改写(多次); FLASHROM:闪存(多次)。 (2)掩膜ROM 用户不能将数据写入,由厂家写入数据。 由于上述特点,所以在单片机中一般做为程序由于上述特点,所以在单片机中一般做为程序 存储器。存储器。 第3章 80C51单片机的存储器结构 2. 随机存取存储器RAM 在加电期间,可以随时向存储器里写入数据或 从中读出数据,但掉电后,数据丢失。 SRAM:静态存储器,加电期间数据可以长久保 存,掉电信息丢失。 DRAM:动态存储器,即使在加电期间数据也会 丢失(数据要刷新)。 由于上述特点,所以在单片机中一
3、般作为数据由于上述特点,所以在单片机中一般作为数据 储存器。储存器。 第3章 80C51单片机的存储器结构 3.2 计算机中储存器的两种结构 在计算机中存储器的用途是存放程序和数据, 它有两种结构:冯诺伊曼结构和哈佛结构。 冯诺伊曼结构:程序和数据共用一个存储器逻 辑空间,统一编址。 哈佛结构:程序与数据分为两个独立存储器逻 辑空间,分开编址。 注: 个人电脑(PC机)采用的是冯诺伊曼结 构; 单片机一般采用哈佛结构(8051); 8051(80C51)单片机,数据存储器用的是 SRAM程序存储器用的是ROM。 第3章 80C51单片机的存储器结构 3.3 80C51单片机的储存器 3.3.1
4、 8051(80C51)系列存储器结构 1. 物理空间有四个部分 (1)内部数据存储器(128B 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
5、-2所示。 内部数据存储器和外部数据存储器相互之间独立编址,内部数据存储器和外部数据存储器相互之间独立编址, 内部程序存储器和外部程序存储器统一编址,共用一个内部程序存储器和外部程序存储器统一编址,共用一个64K的寻址空的寻址空 间。间。 外部数据 储存器64K (SRAM) 内部数据 储存器 128B (SRAM) SFR 00H 7FH FFH 0000H FFFFH 0000H FFFFH 0FFFH 80H 1000H 内部程序储 存器4K (ROM) 外部程序储 存器64K (ROM) 第3章 80C51单片机的存储器结构 3.3.2 数据储存器 数据存储器是采用了静态随机存储器(S
6、RAM) 的结构,掉电信息丢失,故用于暂存数据及运算的 中间结果。 1. 内部数据存储器的结构 内部数据储存器它由工作寄存器区、位寻址区 、用户区三个部分组成,地址范围00H7FH,共 128个单元。用户对这些单元的访问,可以用可以用“直直 接寻址接寻址”的方法,即在指令中用的方法,即在指令中用“direct”表示,表示,指 的就是00H7FH这128个地址单元,指令中直接给 出操作数所在单元地址的这种寻址方式称之为“直 接寻址”。 何为寻址方式,即寻找操作数的方法。 第3章 80C51单片机的存储器结构 图3-3 内部数据存储器结构 工作寄存 器区 00H 7FH 位寻址区 用户区 1FH
7、20H 2FH 30H 第3章 80C51单片机的存储器结构 (1)工作寄存器区(00H1FH) 共32个单元,又分为4组,每组8个单元,都用 R0R7表示,如图3-4所示, R0 R1 R2 R3 R4 R5 R6 R7 00H 01H 02H 03H 04H 05H 06H 07H 1组 2组 3组 08H 0FH 1FH 18H 17H 10H R0 R0 R0 R7 R7 R7 0组 第3章 80C51单片机的存储器结构 个寄存器对应的地址见表3-1所示 在内部工作寄存器中的地址是唯一,但寄存器名重名, 一个寄存器名对应有4个单元,为了解决重名问题,单片机 用特殊功能寄存器PSW中的R
8、S1、RS0来选择,也就是说, 单片机在工作时不会同时使用这4组寄存器,在某一时刻, 只能选择其中的一组。 工作寄存器组地址寄存器名RS1RS0 0组00H07HR0R700 1组08H0FHR0R701 2组10H17HR0R710 3组18H1FHR0R711 第3章 80C51单片机的存储器结构 在指令系统中对于这些空间的访问有以下方法: 直接使用地址,在指令系统中用直接使用地址,在指令系统中用“direct”表示,表示, 这种方式称之为直接寻址。这种方式称之为直接寻址。 如:指令 MOV A , direct ;指令中的“direct” 就是指内部数据存储器中的地址(00H7FH) 该
9、指令就是把direct这个单元中的操作数传送到 A中。操作数是指指令中参与操作的数据。 指令系统中出现的“direct”,在实际编程的过 程中不能出现,必须写对应的实际地址 “00H7FH”,这一点非常重要。 如:MOV A , 30H ;就是将30H中的数送给A。 第3章 80C51单片机的存储器结构 直接使用寄存器名R0R7,指令系统中用指令系统中用“Rn” 表示这表示这8个寄存器,这种方式的寻址称之为个寄存器,这种方式的寻址称之为“寄存寄存 器寻址器寻址”,就是操作数放在寄存器中。 如:指令 MOV A , Rn ;指令中的“Rn”就是 指工作寄存器R0R7。该指令就是把Rn中的操作数
10、传送到A中。 指令系统中出现的“Rn”,在实际编程的过程中 不能出现,必须写对应的寄存器“R0R7”。 如:MOV A , R3 ;就是将工作寄存器R3中的 数传送到A中。 第3章 80C51单片机的存储器结构 R0和R1这两个寄存器还有一种用法,称之为称之为“ 寄存器间接寻址寄存器间接寻址”,用“Ri”表示,i=0、1。R0和 R1存放的是操作数所在单元的地址。 如:MOV A, Ri ; 指令中的“Ri”就是指 工作寄存器R0和R1。该指令就是把Ri中的数取出作 为所取数据的单元地址。指令系统中出现“Ri”, 在实际编程的过程中不能出现,必须写 “R0或 R1”。 如:MOV A , R0
11、 ;就是将R0中的数取出, 作为所取数据的地址,将该地址单元的数取出送到 A中。如图3-5所示, R0所指的操作数就是 10101010B(AAH)。 第3章 80C51单片机的存储器结构 3-5所示, 指令MOV A , R0 操作示意。 可以用(R0)=(40H)=AAH表示。 00H 1FH 20H 2FH 30H 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 0 R0 40H 第3章 80C51单片机的存储器结构 注: 在寄存器寻址中(Rn),这4组寄存器,由 用户使用中通过PSW中的RS1和RS0的设定,来确 定用户使用的组。 这32个单元可以使用“直接寻址” 方式,也
12、 可使用“寄存器寻址”方式来进行访问。 4组中的R0和R1除了“直接寻址”和“寄存 器寻址”外,还可采用“寄存器间接寻址”方式来 访问。 第3章 80C51单片机的存储器结构 (2) 位寻址区(20H2FH) 这16个RAM 单元具有双重功能。它们既可以像 普通RAM 单元一样按字节存取,即“直接寻址( direct)”也可以对每个RAM 单元中的任何一个二 进制位单独存取,这就是位寻址这就是位寻址(bit),80C51单片 机为这些区域专门设置了位处理器(一个1位的 CPU),用于这些空间的访问,如图3-6所示。 第3章 80C51单片机的存储器结构 图3-6,位地址表。 07H 17H 0
13、FH 06H 16H 0EH 05H 15H 0DH 04H 14H 0CH 03H 13H 0BH 02H 12H 0AH 01H 11H 09H 00H 10H 08H 1FH 2FH 27H 1EH 2EH 26H 1DH 2DH 25H 1CH 2CH 24H 1BH 2BH 23H 1AH 2AH 22H 19H 29H 21H 18H 28H 20H 37H 3FH 36H 3EH 35H 3DH 34H 3CH 33H 3BH 32H 3AH 31H 39H 30H 38H 47H 46H 45H 44H 43H 42H 41H 40H 4FH 57H 4EH 56H 4DH 5
14、5H 4CH 54H 4BH 53H 4AH 52H 49H 51H 48H 50H 5FH 5EH 5DH 5CH 5BH 5AH 59H 58H 67H 6FH 66H 6EH 65H 6DH 64H 6CH 63H 6BH 62H 6AH 61H 69H 60H 68H 77H 7FH 76H 7EH 75H 7DH 74H 7CH 73H 7BH 72H 7AH 71H 79H 70H 78H 20H 23H 2FH 28H 2CH 2EH 2BH 2AH 27H 29H 26H 2DH 25H 24H 22H 21H 第3章 80C51单片机的存储器结构 在指令系统中对于这些空间的访
15、问有以下方法: 可以采用“直接寻址”的方式去访问这16个单元; 如:MOV A , 20H (MOV A , direct) 也可以采用“位寻址(bit)”的方式去访问这128个二进 制位。 如:MOV C , 00H (MOV C , bit) 该指令就是把00H中的一个二进制数送到C中。 指令中“bit”,指的就是位地址“00H7FH”。 注: 字节地址:20H2FH,位地址:00H7FH。 为了区分位地址“00H7FH”和内部数据存储器的地 址“00H7FH”,提到位寻址区中的位地址时,必须注明位 地址。单元地址,称之为字节地址,也可简称地址。 第3章 80C51单片机的存储器结构 (3
16、)数据缓冲区(用户区)(30H7FH) 数据缓冲区共有80个RAM 单元,用于存放用户 数据或作堆栈区使用,也称用户RAM区。80C51对 用户RAM区中每个RAM单元只能按字节存取的(不 可位寻址)。 在指令系统中对于这些空间的访问只有一种方 法,即直接寻址(即直接寻址(direct)。)。 如:MOV A , 40H (MOV A , direct) 第3章 80C51单片机的存储器结构 内部数据存储器小结: 内部数据存储器中所有的单元(128B)都可以用直接寻 址的方法来进行访问(direct)。 工作寄存器区也可以用寄存器寻址(Rn)的方法来访问 ,指令系统中一般都用寄存器寻址(Rn)
17、的方法来访问该空 间。除了寄存器寻址的方式,R0和R1也可采用寄存器间接 寻址Ri的方式,在使用中R0和R1必须先满足间接寻址方 式,有多余的可用于寄存器寻址方式。 位寻址区,对这16个单元可以使用直接寻址方式,这16 个单元中的128个位(都有位地址),还可以用位寻址的方 式来访问。 用户区只能用直接寻址的方式来访问。 指令系统中所有的数据处理、运算都是在内部数据存储 器中完成,所以指令系统也是非常丰富的(大部分指令都是 针对该空间)。 第3章 80C51单片机的存储器结构 2. 外部数据存储器 当内部数据存储器不够用时,在单片机的外总 线上可以最大扩展64K的RAM,可独立寻址,有专 用指
18、令系统(MOVX传送指令),不能用于数据的 运算及处理,所以仅有4条指令,两条读,两条写, 用于一般数据的存放,地址为0000HFFFFH。寻 址方式采用寄存器间接寻址的方式,如MOVX A , DPTR.,指令中DPTR,开辟在特殊功能寄存器 (SFR)中,是一个16位的数据存储器(数据指针 ),用于访问外部数据存储器和程序存储器,一般 用于存放的是外部数据存储器和程序存储器的地址 (外部数据存储器的地址也是16位)。存储器结构 见图3-7所示。 第3章 80C51单片机的存储器结构 图3-7 外部数据存储器结构 外部数据 储存器64K (SRAM) FFFFH 0000H 第3章 80C5
19、1单片机的存储器结构 3.3.3 特殊功能寄存器(SFR) 80C51系列单片机内的锁存器、定时器、串行 口、数据缓冲器及各种控制寄存器、状态寄存器都 以特殊功能寄存器(SFR)的形式出现,它们离散 地分布在高128位片内RAM 80HFFH中。51子系 列共有18个特殊功能寄存器,占用21个单元,其余 107个单元用户不好使用(AT89C51)。 第3章 80C51单片机的存储器结构 表3-2 SFR地址映像表 第3章 80C51单片机的存储器结构 第3章 80C51单片机的存储器结构 这18个特殊功能寄存器,其中有15个特殊功能寄存器 占用1个单元,另外3个特殊功能寄存器占用2个单元,这就
20、 是为什么18个特殊功能寄存器占用21个单元的原因。这18 个特功能寄存器我们先学5个,其余的放在以后学习。 第3章 80C51单片机的存储器结构 1累加器ACC(E0H) 累加器ACC 是80C51型单片机中最常用的寄存器。许多 指令的操作数取自ACC,许多运算的结果存放在ACC 中。 乘除法指令必须通过ACC 进行。累加器ACC 的指令助记符 为。 简单的讲就是一个8位的存储器,使用非常频繁,很多 指令中必须用到ACC。 D7D6D5D4D3D2D1D0ACCE0H ACC.7 ACC.6 ACC.5 ACC.4 ACC.3 ACC.2 ACC.1 ACC.0 E7H E6H E5H E4
21、H E3H E2H E1H E0H 第3章 80C51单片机的存储器结构 在指令系统中,可直接使用寄存器名ACC(A)和字节 地址E0H对这八个二进制位进行操作,前者称之为寄存器寻 址,后者称之为直接寻址(direct),用户一般使用寄存器 寻址,即寄存器寻址,在特殊条件下才会使用直接寻址。累 加器ACC也是一个可以对8个二进制位进行位寻址的寄存器 ,8个二进制位都有唯一的位地址,指令中只能使用位地址 (bit),也称之为位寻址,若使用位编号,编译软件会将位 编号转换成位地址,再进行编译,最后形成目标文件。 第3章 80C51单片机的存储器结构 2寄存器(F0H) 80C51单片机乘除法指令中
22、要用到寄存器,用于存放 操作数和操作结果。也可作为通用存储器器使用。 在乘除指令中,直接使用寄存器名B,称之为寄存器寻寄存器寻 址址。用作通用存储器时只能使用地址F0H称之为直接寻址直接寻址, 若用寄存器名B,编译软件会将其转换成地址F0H来使用。 寄存器B是可以进行位寻址的单元,8个二进制位都有唯一的 位地址,在对二进制位寻址时,指令中只能使用位地址(bit ),称之为位寻址,若使用位编号,编译软件会将位编号转 换成位地址,再进行编译,最后形成目标文件,见图3-9所 示。 D7D6D5D4D3D2D1D0BF0H B.7 B.6 B.5 B.4 B.3 B.2 B.1 B.0 F7H F6H
23、 F5H F4H F3H F2H F1H F0H 第3章 80C51单片机的存储器结构 3程序状态字寄存器程序状态字寄存器PSW(D0H) 程序状态字寄存器程序状态字寄存器PSW也称为标志寄存器,存放各有也称为标志寄存器,存放各有 关标志和对工作寄存器的选择设置。其结构和定义如图关标志和对工作寄存器的选择设置。其结构和定义如图3-10 所示。在指令系统中该单元只能使用字节地址所示。在指令系统中该单元只能使用字节地址D0H来访问,来访问, 称之为直接寻址(称之为直接寻址(direct),若用寄存器名),若用寄存器名PSW,编译软件,编译软件 会将其转换成地址会将其转换成地址D0H来使用。程序状态
24、字寄存器来使用。程序状态字寄存器PSW是是 可以进行位寻址的单元,可以进行位寻址的单元,8个二进制位都有唯一的位地址,个二进制位都有唯一的位地址, 在对二进制位寻址时,指令中只能使用位地址(在对二进制位寻址时,指令中只能使用位地址(bit),称之),称之 为位寻址,若使用位定义或位编号,编译软件会将位定义和为位寻址,若使用位定义或位编号,编译软件会将位定义和 位编号转换成位地址,再进行编译,最后形成目标文件。位编号转换成位地址,再进行编译,最后形成目标文件。 D7D6D5D4D3D2D1D0PSWD0H PSW.7 PSW.6 PSW.5 PSW.4 PSW.3 PSW.2 PSW.1 PSW
25、.0 CY AC F0 RS1 RS0 OV - P D7H D6H D5H D4H D3H D2H D1H D0H 第3章 80C51单片机的存储器结构 该单元各位的定义如下:该单元各位的定义如下: CY:进(借)位标志位,有进(借)位(:进(借)位标志位,有进(借)位(CY)1,否则,否则 (CY)0,主要用于加减运算中。,主要用于加减运算中。 AC:辅助进(借)位标志位,低四位向高四位的进(借):辅助进(借)位标志位,低四位向高四位的进(借) 位,有进(借)(位,有进(借)(AC)=1,否则(,否则(AC)=0,主要用,主要用 于加减运算中。于加减运算中。 RS1、RS0:工作寄存器组的
26、选择位,见表:工作寄存器组的选择位,见表3-3所示。所示。 字节地址字节地址寄存器名寄存器名RS1RS1RS0RS0 0 0组组00H00H07H07HR0R0R7R70 00 0 1 1组组08H08H0FH0FHR0R0R7R70 01 1 2 2组组10H10H17H17HR0R0R7R71 10 0 3 3组组18H18H1FH1FHR0R0R7R71 11 1 第3章 80C51单片机的存储器结构 OV:溢出标志位,:溢出标志位,80C51单片机单片机CPU的位数是的位数是8位,则表示位,则表示 带符号数的位数只能是带符号数的位数只能是8位,最高位是符号位,数据位位,最高位是符号位,
27、数据位 只有只有7位,数的范围在位,数的范围在-128+127之间,若运算的结果之间,若运算的结果 超出这个范围,溢出(结果出错)。计算机中判断结超出这个范围,溢出(结果出错)。计算机中判断结 果溢出的算法是果溢出的算法是 公式:公式:OV =Cy6 Cy7 ; 式中,式中,Cy6表示表示D6位向位向D7位的进位或借位,位的进位或借位, Cy7表示表示D6位向位向CY的进位或借位。的进位或借位。 F0:用户位,用户可以作为一般的一位二进制数的存储器使:用户位,用户可以作为一般的一位二进制数的存储器使 用。用。 P:奇偶标志位,累加器:奇偶标志位,累加器A中中1的个数为奇数时(的个数为奇数时(P
28、)=1,否,否 则(则(P)=0,只要,只要A中的数值发生变化,就影响中的数值发生变化,就影响P(实时(实时 反映累加器反映累加器A中中1的个数的奇偶性)。的个数的奇偶性)。 第3章 80C51单片机的存储器结构 注:注: CY、AC、OV、P这这4个标志位由指令运行后,对其个标志位由指令运行后,对其 产生影响(由硬件产生各标志),主要用于算术运算产生影响(由硬件产生各标志),主要用于算术运算 类指令,除了类指令,除了CY一般这一般这3位不会用于数据的存储,位不会用于数据的存储, CY也是位处理器(也是位处理器(1位的位的CPU)中的累加器,在位操)中的累加器,在位操 作中使用较为频繁。作中使
29、用较为频繁。 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补码+Y补码 :
30、 1 1 1 1 0 1 1 0 1 B 在单片机中,上述运算后,(CY)=1,(AC)=0, (OV)= Cy6 Cy7=1 1=0(结果正确),(P)=0。 第3章 80C51单片机的存储器结构 4数据指针数据指针DPTR(83H、82H) 数据指针数据指针DPTR是一个是一个16位的特殊功能寄存器,不可位位的特殊功能寄存器,不可位 寻址,由两个位寄存器寻址,由两个位寄存器DPH(83H) 和和DPL(82H) 组组 成,成,DPH 是是DPTR的高位,的高位,DPL是是DPTR的低位,的低位, DPTR既可合并作为一个既可合并作为一个16位寄存器,又可分开按位寄存位寄存器,又可分开按位寄
31、存 器单独操作,见图器单独操作,见图3-11所示。所示。 第3章 80C51单片机的存储器结构 在指令中一般都是以一个在指令中一般都是以一个16位的寄存器位的寄存器DPTR使用使用,用用 于存放外部数据存储器的地址和程序程序器的地址,访问外于存放外部数据存储器的地址和程序程序器的地址,访问外 部数据存储器是用部数据存储器是用DPTR,称之为寄存器间接寻址;访问,称之为寄存器间接寻址;访问 程序存储器是用程序存储器是用A+DPTR,称之为变址寻址。作为两个独,称之为变址寻址。作为两个独 立的立的8位寄存器(位寄存器(DPH、DPL)使用时,只能使用其地址,)使用时,只能使用其地址, 在指令系统中
32、会详解。在指令系统中会详解。 第3章 80C51单片机的存储器结构 5堆栈指针堆栈指针SP(81H) 堆栈是堆栈是CPU 用于暂时存放部分数据的用于暂时存放部分数据的“仓库仓库”,它的作它的作 用是用来保护现场和保护断点。在用是用来保护现场和保护断点。在80C51中,由内部数据存中,由内部数据存 储器中若干存储单元组成,可由用户自定义单元地址,一般储器中若干存储单元组成,可由用户自定义单元地址,一般 开辟在内部数据存储器开辟在内部数据存储器30H7FH这个空间。存储单元的个这个空间。存储单元的个 数称为堆栈的深度,可理解为仓库容量。为了实现上述数据数称为堆栈的深度,可理解为仓库容量。为了实现上
33、述数据 保护的需要,数据的存取,要遵循先进后出,后进先出的原保护的需要,数据的存取,要遵循先进后出,后进先出的原 则。则。80C51单片机中用堆栈指针单片机中用堆栈指针SP(81H)来实现数据的先)来实现数据的先 进后出,后进先出,即不可位寻址。它开辟在特殊功能寄存进后出,后进先出,即不可位寻址。它开辟在特殊功能寄存 器器81H中,没有位地址,即不可位寻址,如图中,没有位地址,即不可位寻址,如图3-12所示所示 D7D6D5D4D3D2D1D0SP81H 第3章 80C51单片机的存储器结构 堆栈指针堆栈指针SP是用来存放堆栈数据区的地址,如图是用来存放堆栈数据区的地址,如图3-13 所示。一
34、般为了书写方便,堆栈的示意图,如图所示。一般为了书写方便,堆栈的示意图,如图3-14所示。所示。 SP 2FH 00H 2FH 30H 31H 32H 33H 34H 35H 80H 81H FFH 7FH 1FH 20H 特殊功能 寄存器区 用户区 位寻址区 工作寄存器区 SP(81H)2FH2FH 30H 31H 32H 33H 34H 35H 7FH 用户区 第3章 80C51单片机的存储器结构 堆栈数据的存取又称之为进栈和出栈。进栈时,首先堆堆栈数据的存取又称之为进栈和出栈。进栈时,首先堆 栈指针加栈指针加1,即,即(SP) (SP)+1,然后数据进栈;出栈时,先,然后数据进栈;出栈时
35、,先 取堆栈的数据,然后堆栈指针减取堆栈的数据,然后堆栈指针减1,即,即(SP) (SP)-1。 数据的进栈和出栈,又有两种操作形式,一是硬件操作数据的进栈和出栈,又有两种操作形式,一是硬件操作 ,计算机执行某个操作时,硬件自动进栈(中断、调用)和,计算机执行某个操作时,硬件自动进栈(中断、调用)和 出栈(返回指令),用于保护断点。二是软件操作,由指令出栈(返回指令),用于保护断点。二是软件操作,由指令 PUSH direct(进栈)和指令(进栈)和指令POP direct(出栈)来实现。(出栈)来实现。 不管是硬件操作还是软件操作,进栈时,首先堆栈指针加不管是硬件操作还是软件操作,进栈时,首
36、先堆栈指针加1 ,然后数据进栈;出栈时,先取堆栈的数据,然后堆栈指针,然后数据进栈;出栈时,先取堆栈的数据,然后堆栈指针 减减1。下面以软件操作加以说明。下面以软件操作加以说明。 第3章 80C51单片机的存储器结构 例例2:已知:已知(SP)=2FH,(40H)=22H,(41H)=33H执行下列程序。执行下列程序。 PUSH 40H PUSH 41H POP 40H POP 41H 解:根据初始条件,得示意图,存储器中没有提到单元的数据解:根据初始条件,得示意图,存储器中没有提到单元的数据 为任意值。为任意值。 SP(81H)2FH2FH 30H 31H 32H 40H 41H 42H 7
37、FH XX XX XX XX 22H 33H XX XX XX 第3章 80C51单片机的存储器结构 执行第一条指令执行第一条指令 PUSH 40H,首先,首先(SP) (SP)+1 =2FH+1=30H,然后将,然后将40H中的数据中的数据22H,送入堆栈指针,送入堆栈指针SP 指向的单元指向的单元30H中,如图中,如图3-16(a)所示。第一个进栈的数)所示。第一个进栈的数 据不是堆栈指针指向的初始单元,在计算机中数据的传送,据不是堆栈指针指向的初始单元,在计算机中数据的传送, 不是完全给予的意思,而是复制,不是完全给予的意思,而是复制,40H单元数据进栈后,影单元数据进栈后,影 响了堆栈
38、指针指向的单元,但不影响响了堆栈指针指向的单元,但不影响40H这个单元的原始数这个单元的原始数 据,所以据,所以40H的数据仍为的数据仍为22H。 第3章 80C51单片机的存储器结构 执行第二条指令执行第二条指令 PUSH 41H,进栈过程同第一条指令。,进栈过程同第一条指令。 进栈后,示意图如图进栈后,示意图如图3-16(b)所示。)所示。 第3章 80C51单片机的存储器结构 执行第三条指令执行第三条指令 POP 40H,首先是取堆栈指针指向单,首先是取堆栈指针指向单 元的数据给元的数据给40H,则,则40H的数据为的数据为33H,然后将,然后将(SP) (SP)- 1=31H-1=30
39、H,执行完后,示意图如图,执行完后,示意图如图3-16(c)所示。)所示。 第3章 80C51单片机的存储器结构 执行第四条指令执行第四条指令 POP 41H,出栈过程同第四条指令,出栈过程同第四条指令, 示意图如图示意图如图3-16(d)所示。当数据取出后,堆栈指针又回)所示。当数据取出后,堆栈指针又回 到初始状态,如图到初始状态,如图3-15所示。但原来进栈的数还存于堆栈中所示。但原来进栈的数还存于堆栈中 ,直到下次进栈的数据将其覆盖。,直到下次进栈的数据将其覆盖。 第3章 80C51单片机的存储器结构 该程序,是将该程序,是将40H和和41H的数据交换,进栈两次,出栈的数据交换,进栈两次
40、,出栈 两次,所以堆栈指针两次,所以堆栈指针SP的值,仍为初始值的值,仍为初始值2FH,堆栈指针的,堆栈指针的 初始值指向的单元,是不能用于存放堆栈数据的,第一个入初始值指向的单元,是不能用于存放堆栈数据的,第一个入 栈的数据,是该单元的地址加栈的数据,是该单元的地址加1单元。单元。 第3章 80C51单片机的存储器结构 系统复位时堆栈指示器的值为系统复位时堆栈指示器的值为07H,即指向的是工作寄,即指向的是工作寄 存器区存器区0组的组的R7单元,如图单元,如图3-17所示,第一个入栈的数放于所示,第一个入栈的数放于 08H单元,但堆栈一般开辟在用户区(单元,但堆栈一般开辟在用户区(30H7F
41、H)中。堆栈)中。堆栈 的深度是由数据连续进栈的次数来决定的。若根据某个程序的深度是由数据连续进栈的次数来决定的。若根据某个程序 设计的需要,需要设计的需要,需要16个单元堆栈来存储数据,堆栈开辟在个单元堆栈来存储数据,堆栈开辟在 40H到到4FH单元,则堆栈指示器单元,则堆栈指示器SP的初始值应付的初始值应付3FH,第一,第一 个入栈的数放入个入栈的数放入40H中,在程序的设计中,中,在程序的设计中,40H41H中不能中不能 用于其它的数据的存放,否则数据被覆盖。若实际进栈的数用于其它的数据的存放,否则数据被覆盖。若实际进栈的数 据超出了据超出了16个单元,则堆栈溢出,溢出的单元在个单元,则
42、堆栈溢出,溢出的单元在50H以上,以上, 这些单元没有数据,则没有影响,否则影响原有数据。堆栈这些单元没有数据,则没有影响,否则影响原有数据。堆栈 指针始终指向的是堆栈的栈顶位置。指针始终指向的是堆栈的栈顶位置。 SP(81H)07H 07H 08H 09H 0AH 00H 7FH R7 R0 R1 R2 R0 第3章 80C51单片机的存储器结构 注:注: 51子系列中,共有子系列中,共有18个个SFR(特殊功能寄存器),(特殊功能寄存器), 占用占用21个单元,我们先学个单元,我们先学5个个SFR(共(共6个单元),个单元), 其余其余SFR在后面的学习中,会逐步的给大家介绍。在后面的学习
43、中,会逐步的给大家介绍。 这这18个个SFR,21个单元中,字节地址能被个单元中,字节地址能被8整除的单整除的单 元是可以进行位寻址的,也就是说字节地址的后面元是可以进行位寻址的,也就是说字节地址的后面 一位是一位是0或者或者8,都是可以进行位寻址的(,都是可以进行位寻址的(bit)。)。 可位寻址的单元,可以用位地址、位编号或位定可位寻址的单元,可以用位地址、位编号或位定 义,在寻址中都称之为位寻址(义,在寻址中都称之为位寻址(bit)。)。 系统复位后,各寄存器的值如表系统复位后,各寄存器的值如表3-4所示。所示。 第3章 80C51单片机的存储器结构 第3章 80C51单片机的存储器结构
44、 3.3.4 程序存储器程序存储器 程序存储器的作用是用来存放程序和数表(固定不变的程序存储器的作用是用来存放程序和数表(固定不变的 常数)。常数)。AT89S51单片机内部有单片机内部有4K的程序存储器的程序存储器 FlashROM,外部最多可扩展,外部最多可扩展64K的程序存储器,内外程序的程序存储器,内外程序 存储器采用统一编址的方法,即共用存储器采用统一编址的方法,即共用64K的地址,地址范围的地址,地址范围 0000HFFFFH,不管是内部还是外部都是用指令,不管是内部还是外部都是用指令MOVC来来 访问。如图访问。如图3-18所示。所示。 0000H FFFFH 0FFFH 1000H 内部程序储 存器4K (ROM) 外部程序储 存器可扩展 64K (ROM) 第3章 80C51单片机的存储器结构 1.程序存储器的结构程序存储器的结构 8051(80C51)系列有系列有64K ROM 的寻址区,地址范围的寻址区,地址范围 0000HFFFFH,用于存放程序。用于存放程序。 其中低其中低4K(0000H0FFFH) 的地址区可以为片内的地址区可以为片内ROM 和片外和片外ROM共用,但不能同时使用共用,但不能同时使用(由外引脚由外引脚 决定决定)。 高高60K(1000HFFFFH) 的地址区为片外的地址区为片外ROM所专用。所专用。 第3章 80C51单片机的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论