MCS-51单片机内部存储器:

来自:對伱→不離不棄
2年前
已收藏
收藏
阅读数
40
回复数
0

CPU访问存储器时,一个地址对应唯一的存储器单元,可以是ROM,也可以是RAM,并用同类访问指令,此种存储器结构称为普林斯顿结构。MCS-51单片机的存储器在物理上是分开的,共有4个存储空间:片内程序存储器、片外程序存储器、片内数据存储器和片外


数据存储器,这种程序存储器和数据存储器分开的结构形式称为哈佛结构。 MCS-51单片机的存储器从逻辑上划分为3个存储地址空间:片内外统一编址的64kB程序存储器地址空间(0000H~FFFFH),64kB片外数据存储器地址空间(0000H~FFFFH),256B片内数据存储器地址空间(00H~FFH)。CPU访问片内、片外ROM指令用MOVC,访问片外RAM指令用MOVX,访问片内RAM指令用MOV。图1-5所示为MCS-51单片机的存储器配置。
一、程序存储器: MCS-51单片机的程序存储器用于存放编好的程序和表格常数,以8051为例的配置参见图1-6。8051片内有4kB的ROM,8751片内有4kB的 EPROM,8031片内无程序存储器。MCS51的片外最多能扩展64kB程序存储器,片内外的ROM是统一编址的。如EA端保持高电平,8051的程序计数器PC在0000H~0FFFH地址范围内(即前4kB地址)是执行片内ROM中的程序,当PC在1000H~ FFFFH地址范围时,自动执行片外程序存储器中的程序,当EA保持低电平时,只能寻址外部程序存储器,片外存储器可以从0000H开始编址。
MCS-51单片机的程序存储器中有些单元具有特殊功能,使用时应予以注意。其中一组特殊单元是0000H~0002H。系统复位后,PC=0000H,单片机从0000H单元开始取指令
执行程序。如果程序不从0000H单元开始,应在这三个单元中存放一条无条件转移指令,以便直接转去执行指定的程序。 还有一组特殊单元是0003H~002AH,共40个单元,这40个单元被均匀地分为五段,作为五个中断源的中断地址区。其中: ①0003H~000AH为外部中断0中断地址区; ②000BH~0012H为定时器/计数器0中断地址区; ③0013H~001AH为外部中断1中断地址区; ④001BH~0022H为定时器/计数器1中断地址区; ⑤0023H~002AH为串行中断地址区。 中断响应后,按中断种类,自动转到各中断区的首地址去执行程序。因此,在中断地址区中理应存放中断服务程序。但通常情况下,8个单元难以存下一个完整的中断服务程序。 因此,通常也是从中断地址区首地址开始存放一条无条件转移指令,以便中断响应后,通过中断地址区,再转到中断服务程序的实际入口地址去。 二、数据存储器: MCS-51单片机的数据存储器分为内部RAM和外部RAM,其RAM的配置如图1-7所示。
5051片内RAM共有128B,分成工作寄存器区、位寻址区、通用RAM区三部分。 基本型单片机片内RAM地址范围是00H~7FH。增强型单片机(如80C52)片内除地址范围在00H~7FH的128B RAM外,又增加了80H~FFH的高128B的RAM。增加的这一部分RAM仅能采用间接寻址方式访问(以与特殊功能寄存器SFR的访问相区别)。 片外RAM地址空间为64kB,地址范围是0000H~ FFFFH。与程序存储器地址空间不同的是,片外RAM地址空间与片内RAM地址空间在地址的低端0000H~007FH是重叠的,这就需要采用不同的寻址方式加以区分。访间片外RAM时采用专门的指令MOVX实现,这时读(RD)或写(WR)信号有效;而访问片内RAM使用MOV指令,无读写信号产生。另外,与片内RAM不同,片外RAM不能进行堆栈操作。
1.内部数据存储器低128单元: 8051的内部RAM共有256个单元,通常把这256个单元按其功能划分为两部分:低128单元(单元地址00H~7FH)和高128单元(单元地址80H~FFH),低128单元的配置情况如表1-3所示。低128单元是单片机的真正RAM存储器,按其用途划分为三个区域。
(1)寄存器区:8051单片机片内RAM低端的00H~1FH共32B,分成4个工作寄存器组,每组占8个单元。 寄存器0组:地址00H~07H。 寄存器1组:地址08H~OFH。 寄存器2组:地址10H~17H寄存器3组:地址18H~FH。 在任一时刻,CPU只能使用其中的一组寄存器,并且把正在使用的那组寄存器称为当前寄存器组。到底是哪一组,由程序状态字寄存器PSW中RS1、RS0位的状态组合来决定。 通用寄存器为CPU提供了就近数据存储的便利,有利于提高单片机的运算速度。此外,使用通用寄存器还能提高程序编制的灵活性。因此,在单片机的应用编程中应充分利用这些寄存器,以简化程序设计,提高程序运行速度。 (2)位寻址区:一盏灯亮或者说一根线的电平的高低,可以代表两种状态:0和1。实际上这就是一个二进制位,用bit表示。字节的含义:一根线可以表示0和1,两根线可以表示00、01、10、11四种状态,而三根线可以表达0~7共8种状态,计算机中通常将8根线放在一起,同时计数,就可以表示0~255一共256种状态。这8根线或者8位就称为一个字节(byte)。 内部RAM的20H~2FH单元,既可作为一般RAM单元使用,进行字节操作,也可以对单元中每一位进行位操作,因此,把该区称为位寻址区。位寻址区共有16个RAM单元,计128位,位地址为00H~7FH。MCS-51具有布尔处理机功能,这个位寻址区可以构成布尔处理机的存储空间。这种位寻址能力是MCS-51的一个重要特点。表1-4为片内RAM位寻址区的位地址。
(3)用户RAM区:在内部RAM低128单元中,通用寄存器占去32个单元,位寻址区占去16个单元,剩下80个单元,这就是供用户使用的一般RAM区,其单元地址为30H~7FH。对用户RAM区的使用没有任何规定或限制。但在一般应用中常把堆栈开辟在此区中。 2.内部数据存储器高128单元: 内部RAM的高128单元是供给专用寄存器使用的,其单元地址为80H~FFH。因这些寄存器的功能已作专门规定,故而称为专用寄存器( Special Function Resister,SFR),也可称为特殊功能寄存器。 8051共有21个专用寄存器,现把其中部分寄存器简单介绍如下。 (1)程序计数器( Program Counter,PC) :PC是一个16位的计数器,它总是存放着下一个要取的指令的16位存储单元地址,它的作用是控制程序的执行顺序。其内容为将要执行指令的地址,寻址范围达64kB。PC有自动加1功能,从而实现程序的顺序执行。PC没有地址,是不可寻址的。因此,用户无法对它进行读写。但可以通过转移、调用、返回等指令改变其内容,以实现程序的转移。因地址不在SFR之内,一般不计作专用寄存器。 (2)与运算器相关的寄存器(3个): ①累加器( Accumulator,ACC)。累加器为8位寄存器,是最常用的专用寄存器,功能较多,地位重要。它既可用于存放操作数,也可用来存放运算的中间结果。MCS-51单片机中大部分单操作数指令的操作数就取自累加器,许多双操作数指令中的一个操作数也取自累加器。 ②B寄存器。B寄存器是一个8位寄存器,主要用于乘除运算。乘法运算时,B是乘数。乘法操作后,乘积的高8位存于B中。除法运算时,B是除数。除法操作后,余数存于B中。此外,B寄存器也可作为一般数据寄存器使用。 ③程序状态字( Program Status Word,PsW)。程序状态字
内部含有程序在运行时的相关信息,其详细情况如表1-5所示。现说明如下。
进位标志(CY),可简写为C,它的用途如下。 ◆当CPU在做加法运算时,若有进位,则CY=1;否则CY=0。 ◆当CPU在做减法运算时,若有借位,则CY=1;否则CY=0。 ◆作为位处理的运算中心即位累加器。 辅助进位标志( Auxiliary Carry,AC)。 ◆在相加的过程中,若两数的bit3相加后有进位产生,则AC=1;否则AC=0。 ◆在相减的过程中,若bit3不够减,必须向bit4借位,则AC=1;否则AC=0用户标志位(FO)。 ◆由用户根据程序执行的需要通过软件来使它置位或清除。 RS1、RSO:工作寄存器组选择位。 ◆80C51的RAM区域地址00H~1FH单元(32B)为工作寄存器区,共分四组,每组有8个8位寄存器,用R0~R7表示。 ◆RS1、RS0可以用软件来置位或清零,以确定当前使用的工作寄存器组。 溢出标志(OV)。 ◆当两个数相加时,若bit6及bit7同时有进位或没有进位,则OV=0;否则OV=1◆当两个数相减时,若bit6及bit7同时有借位或没有借位,则OV=0;否则OV=1。 ◆根据执行运算指令后OV的状态,可判断累加器中的结果是否正确。 奇偶位标志(P)。 ◆对于累加器的内容,若等于1的位有奇数个,则P=1;否则P=0。
(3)与指针相关的寄存器(3个): ①数据指针(DPTR)。数据指针为16位寄存器,它是MCS51单片机中一个16位寄存器。编程时,DPTR既可以按16位寄存器使用,也可以按两个8位寄存器分开使用,即: ◆ DPH DPTR高位字节; ◆ DPL DPTR低位字节。 DPTR通常在访问外部数据存储器时作地址指针使用,由于外部数据存储器的寻址范围为64kB,故把DPTR设计为16位。 ②堆栈指针(SP)。堆栈是一个特殊的存储区,用来暂存数据和地址,它是按“先进后出”的原则存取数据的。堆栈共有两种操作:进栈和出栈。 MCS-51单片机由于堆栈设在内部RAM中,因此SP是一个8位寄存器。系统复位后,SP的内容为07H,使得堆栈实际上从08H单元开始。但08H~1FH单元分别属于工作寄存器1~3区,如程序中要用到这些区,则最好把SP值改为1FH或更大的值。一般情况下,堆栈最好在内部RAM的30H~7FH单元中开辟。SP的内容一经确定,堆栈的位置也就跟着确定下来,由于SP可初始化为不同值,因此堆栈位置是浮动的。 (4)与接口相关的寄存器(7个): ①并行I/O接口P0、P1、P2、P3,均为8位;通过对这4个寄存器的读和写,可以实现数据从相应接口的输入和输出。 ②串行接口数据缓冲器SBUF。 ③串行接口控制寄存器SCON。 ④串行通信波特率倍增寄存器PCON(一些位还与电源控制相关,所以又称为电源控制寄存器)。 (5)与中断相关的寄存器(2个)。 ①中断允许控制寄存器IE。 ②中断优先级控制寄存器IP。 (6)与定时/计数器相关的寄存器(6个)。 ①定时/计数器T0的两个8位计数初值寄存器TH0、TL0,它们可以构成16位的计数器,TH0存放高8位,T L0存放低8位。 ②定时/计数器T1的两个8位计数初值寄存器TH1、TL1、它们可以构成16位的计数器,TH1
存放低8位。 ③定时/计数器的工作方式寄存器TMOD。 ④定时/计数器的控制寄存器TCON。 3.专用寄存器中的字节寻址和位地址: MCS-51单片机有21个可寻址的专用寄存器,其中有11个专用寄存器(字节地址能被8整除的)是可以位寻址的。各寄存器的字节地址及位地址一并列于表1-6。对专用寄存器只能使用直接寻址方式,书写时既可使用寄存器符号,也可使用寄存器单元地址。

上一篇下一篇
参与回答(0条评论)
用户头像
上传
用户头像
{{item.nickname}}{{item.pubtime}}回复
回复图片
用户头像
上传
用户头像
{{item1.nickname}}回复 {{item1.othername}} {{item1.pubtime}} 回复
回复图片
用户头像
上传
查看全部回复{{item.replylist_count}}条 查看全部
收起回复 收起全部
{{isLoadList==1?'加载中...':(isLoadList==2&&(list.length <=3||(list.length>3&&!is_hidden))?'没有更多内容了':'查看更多回答')}}
返回顶部

返回顶部