内部的ROM与外部RAM的空间分配

内部的ROM与外部RAM的空间分配

2023年7月17日发(作者:)

内部的ROM与外部RAM的空间分配

8051单片机的存储器在物理结构上分为程序存储器空间和数据存储器空间,共有4个存储空间: 片内程序存储器、片外程序存储器以及片内数据存储器、片外数据存储器空间。

这种程序存储和数据存储分开的结构形式被称为哈佛结构。MCS-51使用哈弗结构,它的程序空间和数据空间是分开编址的,即各自有各自的地址空间,互不重叠。所以即使地址一样,但因为分开编址,所以依然要说哪一个空间内的某地址。而ARM(甚至是x86)这种冯诺依曼结构的MCU/CPU,它的地址空间是统一并且连续的,代码存储器/RAM/CPU寄存器,甚至PC机的显存,都是统一编址的,只是不同功能的存储器占据不同的地址块,各自为政。

图1

MCS-51单片机存储器的配置特点

① 内部集成了4K的程序存储器ROM;

② 内部具有256B的数据存储器RAM(用户空间+SFR空间);

③ 可以外接64K的程序存储器ROM和 数据存储器RAM。

从物理结构的角度讲,51单片机的存储系统可以分为四个存储空间:既片内ROM,RAM和片外ROM、RAM。

从逻辑结构上看(既编程的角度),可以分为三个不同的空间:

(1) 片内、片外统一编址的64KB的程序存储器地址空间:0000H~FFFFH(用16位地址);,其中0000H~0FFFH为片内4KB的ROM地址空间,1000H~FFFFH为外部ROM地址空间;

(2) 256B的内部数据存储器地址空间(用8位地址),00H~FFH,分为两大部分,其中00H~7FH(共128B单元)为内部静态RAM的地址空间,80H~FFH为特殊功能寄存器的地址空间,21个特殊功能寄存器离散地分布在这个区域;

(3) 64KB的外部数据存储器地址空间(用16位地址):0000H~FFFFH,包括扩展I/O地址空间。

上述4个存储空间地址是重叠的,如图1所示。8051的指令系统设计了不同的数据传送指令以区别这4个不同的逻辑空间:CPU访问片内、片外ROM指令用MOVC,访问片外RAM指令用MOVX,访问片内RAM指令用MOV。

程序存储器用于存放编好的程序和表格常数。程序通过16位程序计数器寻址,寻址能力为64KB。这使得指令能在64KB的地址空间内任意跳转,但不能使程序从程序存储器空间转移到数据存储器空间。

程序存储器ROM的片内和片外寻址

一丶ROM的片内寻址:

1.程序存储器ROM用于存放程序、常数或表格。

2.在51单片机中,由引脚 /EA 上的电平选择内、外ROM: EA=1时,CPU执行片内的4KROM中的程序; EA=0时,CPU选择片外ROM中的程序。

3.无论是使用片内还是使用片外ROM,程序的起始地址都是从ROM的0000H单元开始。

4.尽管系统可以同时具备片内ROM和外部ROM,但是在一般正常使用情况下,通过/EA的设定来选择其一(或者使用内部ROM,或者使用外部ROM)。

5.如果EA=1(执行片内程序存储器中程序时):如果程序计数器的指针PC值超过0FFFH(4K)时,单片机就要自动的转向片外的ROM存储器且从1000H单元开始执行程序(无法使用片外ROM的低4K空间)。

6.当程序超过4K时,有两种使用程序存储器ROM的方法:

①设置EA=0,使用外部ROM。从地址=0000H开始;

②设置EA=1,使用内部的4KROM和外部ROM(地址从1000H开始的单元)。

8051从片内程序存储器和片外程序存储器取指时的执行速度相同。

程序存储器六个特殊的单元:

在ROM中有六个单元具有特定功能。

0000H单元:复位时程序计数器PC所指向的单元,因此用来 存放程序中的第一条指令;

0003H单元:外部中断/INT0的矢量入口地址;

000BH单元:定时器T0溢出中断的矢量入口地址;

0013H单元:外部中断/INT1的矢量入口地址;

001BH单元:定时器T1的溢出中断矢量入口地址;

0023H单元:串行口接收、传送的中断矢量入口地址。

矢量入口单元:在编写中断程序时,写入对应的“跳板指令”

单片机第一条指令的两个特征:

①存放在ROM的0000H单元;

②必须是“跳转指令”以跳过下面的5个中断矢量,转到后面的真正的主程序入口0100H单元。

ORG 0000H LJMP 0100H

ORG 0100H START: MOV A,#00H

∶ ∶

∶ ∶

∶ ∶

∶ ∶

END

二丶ROM的外部寻址:

当单片机使用外ROM存储器时(扩展系统),必须设定/EA=0,此时单片机的端口功能就要发生相应的改变:

② P0、P2作为外部ROM的地址和数据总线;

② 使用引脚/psen信号来选通外部ROM的数据三态输出。

程序存储器RAM的片内和片外寻址

一丶RAM片内还是片外程序存储器RAM的片内和片外寻址:无论在物理上还是逻辑上,系统中RAM 都可分为两个独立空间:内部和外部RAM。由不同的指令来访问。

1.访问内部数据存储单元时,使用 MOV 指令;

2.访问外部数据存储器时,使用 MOVX 指令。内部RAM从功能上将256B空间分为二个不同的块:

1.低128B的RAM块;

2.高128B的SFR(Special Function Register )块。

在低128B的RAM存储单元中又可划分为:

1.工作寄存器区;

2.位寻址区;

3.通用存储数据的“便签区”。

高128B的专用寄存器区SFR中仅仅使用了21寄存器(51系列),其它107个单元不能使用。

对于数据存储器,分为内部数据存储器(IDATA/RAM)和外部数据存储器(XDATA)两个部分,但这两个存储器就不像code存储器那样共享地址空间的了。一般的8051芯片,内部RAM只有128B,从0x00-0x7F,而从0x80-0xFF则是SFR(CPU工作寄存器和各种外设寄存器都在此)的区域。对于8052来说,内部RAM有256B,所以0x80-0xFF是高128B的RAM在使用。可这部分不是SFR专用的吗?是SFR专用,但注意,SFR的访问只能使用“直接寻址方式”(使用特定的汇编指令来实现),区别就在这里。只有通过直接寻址访问的地址才是SFR,否则就是普通的RAM。

至于外扩的RAM(XDATA),地址也是从0x0000-0xFFFF的,而且这里的0x0000和内部RAM的0x00是不同的,是完全独立的两个空间。他们的访问方法也是不同的。MCS-51使用MOVX指令,来读写XDATA区。而且,访问XDATA区,是需要DPTR寄存器来辅助的。因为只有DPTR才能装得下十六位的XDATA地址。

所以说,MCS-51读写IDATA区的速度是最快的,而且访问方法也是最多的。访问XDATA区的速度相对就要慢很多。

用P0口作地址/数据复用总线,用P2口的口线作高位地址线,最多可以扩展开关电源模块64KB的存储器。控制信号线包括:使用ALE作为地址锁存的选通信号,以实现低8位地址的锁存;以PSEN信号作为扩展程序存储器的读选通信号;以EA信号作为内、外程序存储器的选择信号;以EA和作为扩展数据存储器和I/O端口的读、写选通信号。执行MOVX指令时,RD和WR信号分别自动有效。片外数据存储器RAM的读和写由8051的RD(P3.7)和WR(P3.6)信号控制,而片外程序存储器的输出允许(OE)由读选通PSEN信号控制。

单片的21个特殊功能寄存器的作用

符号

B

ACC

PSW

IP

P3

IE

P2

SUBF

SCON

P1

TH1

TH0

TL1

TL0

TMOD

TCON

DPH

DPL

SP

P0

PCON

D7

CY

D6

AC

D5

F0

D4

RS1

D3

RS0

D2

OV

D1

D0

P

90H

8DH

8CH

8BH

8AH

89H

88H

83H

82H

81H

80H

87H

P1口锁存器

定时器/计数器1(高8位)

定时器/计数器1(低8位)

定时器/计数器0(高8位)

定时器/计数器0(低8位)

定时器/计数器方式控制寄存器

定时器/计数器控制寄存器

数据地址指针(高8位)

数据地址指针(低8位)

堆栈指针

P0口锁存器

电源控制寄存器

地址

F0H

EOH

D0H

B8H

BOH

A8H

A0H

99H

98H

功能

B寄存器

累加器

程序状态字

中断优先级控制寄存器

P3口锁存器

中断允许控制寄存器

P2口锁存器

串行口锁存器

串行口控制寄存器

0V:溢出标志位。运算结果按补码运算理解。有溢出,OV=1;无溢出,OV=0。

P:奇偶校验位:它用来表示ALU运算结果中二进制数位“1”的个数的奇偶性。若为奇数,则P=1,否则为0。 运算结果有奇数个1,P=1;运算结果有偶数个1,P=0。

P0、P1、P2、P3是四个并行输入/输出口的寄存器.

IE-----中断充许寄存器.

B7 B6

EA -

B5

ET2

B4

ES

B3

ET1

B2 B1 B0

EX1 ET0 EX0

EA (IE.7):EA=0时,所有中断禁止(即不产生中断)

EA=1时,各中断的产生由个别的允许位决定

- (IE.6):保留

ET2(IE.5):定时2溢出中断充许(8052用)

ES (IE.4):串行口中断充许(ES=1充许,ES=0禁止)

ET1(IE.3):定时1中断充许

EX1(IE.2):外中断INT1中断充许

ET0(IE.1):定时器0中断充许

EX0(IE.0):外部中断INT0的中断允许

7、IP-----中断优先级控制寄存器

按位寻址,地址位B8H

6、指针寄存器

(1)程序计数器PC

指明即将执行的下一条指令的地址,16位,寻址64KB范围,

复位时PC = 0000H

(2)堆栈指针SP

指明栈顶元素的地址,8位,可软件设置初值,复位时SP = 07H

(3)数据指针DPTR

@R0、 @R1、@DPTR;指明访问的数据存储器的单元地址,16位,寻址范围64KB。 DPTR = DPH + DPL。可以用它来访问外部数据存储器中的任一单元,如果不用,也可以作为通用寄存器来用,由我们自已决定如何使用。 分成DPL(低8位)和DPH(高8位)两个寄存器。用来存放16位地址值,以便用间接寻址或变址寻址的方式对片外数据RAM或程序存储器作64K字节范 围内的数据操作。

7、定时/计数器

(1) 定时器方式寄存器:TMOD (2) 定时器控制寄存器:TCON

6、指针寄存器

(1)程序计数器PC

指明即将执行的下一条指令的地址,16位,寻址64KB范围,

复位时PC = 0000H

(2)堆栈指针SP

指明栈顶元素的地址,8位,可软件设置初值,复位时SP = 07H

(3)数据指针DPTR

@R0、 @R1、@DPTR;指明访问的数据存储器的单元地址,16位,寻址范围64KB。 DPTR = DPH + DPL。可以用它来访问外部数据存储器中的任一单元,如果不用,

(3) 计数寄存器:TH0、TL0;TH1、TL1。可用于设定计数初值。

8052/8032增设专用寄存器

(1) 定时器2控制寄存器T2CON;控制、设置工作方式。

(2) 计数寄存器:TH2、TL2

(3) 定时器2捕获/重装载寄存器:RCAP2H、RCAP2L

存放自动重装载到TH2、TL2的数据

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1689548577a265242.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信