C51单片机的存储器结构.ppt

上传人:牧羊曲112 文档编号:5417010 上传时间:2023-07-05 格式:PPT 页数:56 大小:781KB
返回 下载 相关 举报
C51单片机的存储器结构.ppt_第1页
第1页 / 共56页
C51单片机的存储器结构.ppt_第2页
第2页 / 共56页
C51单片机的存储器结构.ppt_第3页
第3页 / 共56页
C51单片机的存储器结构.ppt_第4页
第4页 / 共56页
C51单片机的存储器结构.ppt_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《C51单片机的存储器结构.ppt》由会员分享,可在线阅读,更多相关《C51单片机的存储器结构.ppt(56页珍藏版)》请在三一办公上搜索。

1、第3章 80C51单片机的存储器结构,3.1 存储器的分类 存储器的的作用是用来存放程序和数据,存储器可分为磁存储和半导体存储器,半导体存储器按功能又可分为只读存储器ROM和随机存储器RAM,如图3-1所示。单片机存储器结构中都采用半导体存储器。,1.只读存储器ROM 只读存储器在正常工作状态下只能从中读出数据,用户不能快速地随时修改或者重新写入数据,数据可长时间的保存。(1)可编程ROM,可通过专用设备(编程器)将数据写入ROM。PROM:用户可一次编程;EPROM:紫外线擦除,电改写(多次);EEPROM:电擦除,电改写(多次);FLASHROM:闪存(多次)。(2)掩膜ROM 用户不能将

2、数据写入,由厂家写入数据。由于上述特点,所以在单片机中一般做为程序存储器。,2.随机存取存储器RAM 在加电期间,可以随时向存储器里写入数据或从中读出数据,但掉电后,数据丢失。SRAM:静态存储器,加电期间数据可以长久保存,掉电信息丢失。DRAM:动态存储器,即使在加电期间数据也会丢失(数据要刷新)。由于上述特点,所以在单片机中一般作为数据储存器。,3.2 计算机中储存器的两种结构 在计算机中存储器的用途是存放程序和数据,它有两种结构:冯诺伊曼结构和哈佛结构。冯诺伊曼结构:程序和数据共用一个存储器逻辑空间,统一编址。哈佛结构:程序与数据分为两个独立存储器逻辑空间,分开编址。注:个人电脑(PC机

3、)采用的是冯诺伊曼结 构;单片机一般采用哈佛结构(8051);8051(80C51)单片机,数据存储器用的是 SRAM程序存储器用的是ROM。,3.3 80C51单片机的储存器3.3.1 8051(80C51)系列存储器结构1.物理空间有四个部分(1)内部数据存储器(128B SRAM)。(2)外部扩展数据存储器(最大64K RAM)。(3)内部程序存储器(4K FlashROM AT89S51)。(4)外部扩展程序存储器(最大64K RAM)。,2.逻辑空间有三个部分(1)程序存储器ROM:包括内部和外部,共用一个64K的寻址空间。(2)内部数据存储器RAM(128B),独立的一个128B的

4、寻址空间。(3)外部数据存储器RAM(64K),独立的一个64K的寻址空间。,如图3-2所示。内部数据存储器和外部数据存储器相互之间独立编址,内部程序存储器和外部程序存储器统一编址,共用一个64K的寻址空间。,3.3.2 数据储存器 数据存储器是采用了静态随机存储器(SRAM)的结构,掉电信息丢失,故用于暂存数据及运算的中间结果。1.内部数据存储器的结构 内部数据储存器它由工作寄存器区、位寻址区、用户区三个部分组成,地址范围00H7FH,共128个单元。用户对这些单元的访问,可以用“直接寻址”的方法,即在指令中用“direct”表示,指的就是00H7FH这128个地址单元,指令中直接给出操作数

5、所在单元地址的这种寻址方式称之为“直接寻址”。何为寻址方式,即寻找操作数的方法。,图3-3 内部数据存储器结构,(1)工作寄存器区(00H1FH)共32个单元,又分为4组,每组8个单元,都用R0R7表示,如图3-4所示,,个寄存器对应的地址见表3-1所示 在内部工作寄存器中的地址是唯一,但寄存器名重名,一个寄存器名对应有4个单元,为了解决重名问题,单片机用特殊功能寄存器PSW中的RS1、RS0来选择,也就是说,单片机在工作时不会同时使用这4组寄存器,在某一时刻,只能选择其中的一组。,在指令系统中对于这些空间的访问有以下方法:直接使用地址,在指令系统中用“direct”表示,这种方式称之为直接寻

6、址。如:指令 MOV A,direct;指令中的“direct”就是指内部数据存储器中的地址(00H7FH)该指令就是把direct这个单元中的操作数传送到A中。操作数是指指令中参与操作的数据。指令系统中出现的“direct”,在实际编程的过程中不能出现,必须写对应的实际地址“00H7FH”,这一点非常重要。如:MOV A,30H;就是将30H中的数送给A。,直接使用寄存器名R0R7,指令系统中用“Rn”表示这8个寄存器,这种方式的寻址称之为“寄存器寻址”,就是操作数放在寄存器中。如:指令 MOV A,Rn;指令中的“Rn”就是指工作寄存器R0R7。该指令就是把Rn中的操作数传送到A中。指令系

7、统中出现的“Rn”,在实际编程的过程中不能出现,必须写对应的寄存器“R0R7”。如:MOV A,R3;就是将工作寄存器R3中的数传送到A中。,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所指的操作数就是1010

8、1010B(AAH)。,3-5所示,指令MOV A,R0 操作示意。可以用(R0)=(40H)=AAH表示。,注:在寄存器寻址中(Rn),这4组寄存器,由用户使用中通过PSW中的RS1和RS0的设定,来确定用户使用的组。这32个单元可以使用“直接寻址”方式,也可使用“寄存器寻址”方式来进行访问。4组中的R0和R1除了“直接寻址”和“寄存器寻址”外,还可采用“寄存器间接寻址”方式来访问。,(2)位寻址区(20H2FH)这16个RAM 单元具有双重功能。它们既可以像普通RAM 单元一样按字节存取,即“直接寻址(direct)”也可以对每个RAM 单元中的任何一个二进制位单独存取,这就是位寻址(bi

9、t),80C51单片机为这些区域专门设置了位处理器(一个1位的CPU),用于这些空间的访问,如图3-6所示。,图3-6,位地址表。,在指令系统中对于这些空间的访问有以下方法:可以采用“直接寻址”的方式去访问这16个单元;如:MOV A,20H(MOV A,direct)也可以采用“位寻址(bit)”的方式去访问这128个二进制位。如:MOV C,00H(MOV C,bit)该指令就是把00H中的一个二进制数送到C中。指令中“bit”,指的就是位地址“00H7FH”。注:字节地址:20H2FH,位地址:00H7FH。为了区分位地址“00H7FH”和内部数据存储器的地址“00H7FH”,提到位寻址

10、区中的位地址时,必须注明位地址。单元地址,称之为字节地址,也可简称地址。,(3)数据缓冲区(用户区)(30H7FH)数据缓冲区共有80个RAM 单元,用于存放用户数据或作堆栈区使用,也称用户RAM区。80C51对用户RAM区中每个RAM单元只能按字节存取的(不可位寻址)。在指令系统中对于这些空间的访问只有一种方法,即直接寻址(direct)。如:MOV A,40H(MOV A,direct),内部数据存储器小结:内部数据存储器中所有的单元(128B)都可以用直接寻址的方法来进行访问(direct)。工作寄存器区也可以用寄存器寻址(Rn)的方法来访问,指令系统中一般都用寄存器寻址(Rn)的方法来

11、访问该空间。除了寄存器寻址的方式,R0和R1也可采用寄存器间接寻址Ri的方式,在使用中R0和R1必须先满足间接寻址方式,有多余的可用于寄存器寻址方式。位寻址区,对这16个单元可以使用直接寻址方式,这16个单元中的128个位(都有位地址),还可以用位寻址的方式来访问。用户区只能用直接寻址的方式来访问。指令系统中所有的数据处理、运算都是在内部数据存储器中完成,所以指令系统也是非常丰富的(大部分指令都是针对该空间)。,2.外部数据存储器 当内部数据存储器不够用时,在单片机的外总线上可以最大扩展64K的RAM,可独立寻址,有专用指令系统(MOVX传送指令),不能用于数据的运算及处理,所以仅有4条指令,

12、两条读,两条写,用于一般数据的存放,地址为0000HFFFFH。寻址方式采用寄存器间接寻址的方式,如MOVX A,DPTR.,指令中DPTR,开辟在特殊功能寄存器(SFR)中,是一个16位的数据存储器(数据指针),用于访问外部数据存储器和程序存储器,一般用于存放的是外部数据存储器和程序存储器的地址(外部数据存储器的地址也是16位)。存储器结构见图3-7所示。,图3-7 外部数据存储器结构,3.3.3 特殊功能寄存器(SFR)80C51系列单片机内的锁存器、定时器、串行口、数据缓冲器及各种控制寄存器、状态寄存器都以特殊功能寄存器(SFR)的形式出现,它们离散地分布在高128位片内RAM 80HF

13、FH中。51子系列共有18个特殊功能寄存器,占用21个单元,其余107个单元用户不好使用(AT89C51)。,表3-2 SFR地址映像表,这18个特殊功能寄存器,其中有15个特殊功能寄存器占用1个单元,另外3个特殊功能寄存器占用2个单元,这就是为什么18个特殊功能寄存器占用21个单元的原因。这18个特功能寄存器我们先学5个,其余的放在以后学习。,1累加器ACC(E0H)累加器ACC 是80C51型单片机中最常用的寄存器。许多指令的操作数取自ACC,许多运算的结果存放在ACC 中。乘除法指令必须通过ACC 进行。累加器ACC 的指令助记符为。简单的讲就是一个8位的存储器,使用非常频繁,很多指令中

14、必须用到ACC。,在指令系统中,可直接使用寄存器名ACC(A)和字节地址E0H对这八个二进制位进行操作,前者称之为寄存器寻址,后者称之为直接寻址(direct),用户一般使用寄存器寻址,即寄存器寻址,在特殊条件下才会使用直接寻址。累加器ACC也是一个可以对8个二进制位进行位寻址的寄存器,8个二进制位都有唯一的位地址,指令中只能使用位地址(bit),也称之为位寻址,若使用位编号,编译软件会将位编号转换成位地址,再进行编译,最后形成目标文件。,2寄存器(F0H)80C51单片机乘除法指令中要用到寄存器,用于存放操作数和操作结果。也可作为通用存储器器使用。在乘除指令中,直接使用寄存器名B,称之为寄存

15、器寻址。用作通用存储器时只能使用地址F0H称之为直接寻址,若用寄存器名B,编译软件会将其转换成地址F0H来使用。寄存器B是可以进行位寻址的单元,8个二进制位都有唯一的位地址,在对二进制位寻址时,指令中只能使用位地址(bit),称之为位寻址,若使用位编号,编译软件会将位编号转换成位地址,再进行编译,最后形成目标文件,见图3-9所示。,3程序状态字寄存器PSW(D0H)程序状态字寄存器PSW也称为标志寄存器,存放各有关标志和对工作寄存器的选择设置。其结构和定义如图3-10所示。在指令系统中该单元只能使用字节地址D0H来访问,称之为直接寻址(direct),若用寄存器名PSW,编译软件会将其转换成地

16、址D0H来使用。程序状态字寄存器PSW是可以进行位寻址的单元,8个二进制位都有唯一的位地址,在对二进制位寻址时,指令中只能使用位地址(bit),称之为位寻址,若使用位定义或位编号,编译软件会将位定义和位编号转换成位地址,再进行编译,最后形成目标文件。,该单元各位的定义如下:CY:进(借)位标志位,有进(借)位(CY)1,否则(CY)0,主要用于加减运算中。AC:辅助进(借)位标志位,低四位向高四位的进(借)位,有进(借)(AC)=1,否则(AC)=0,主要用 于加减运算中。RS1、RS0:工作寄存器组的选择位,见表3-3所示。,OV:溢出标志位,80C51单片机CPU的位数是8位,则表示 带符

17、号数的位数只能是8位,最高位是符号位,数据位 只有7位,数的范围在-128+127之间,若运算的结果 超出这个范围,溢出(结果出错)。计算机中判断结 果溢出的算法是 公式:OV=Cy6Cy7;式中,Cy6表示D6位向D7位的进位或借位,Cy7表示D6位向CY的进位或借位。F0:用户位,用户可以作为一般的一位二进制数的存储器使 用。P:奇偶标志位,累加器A中1的个数为奇数时(P)=1,否 则(P)=0,只要A中的数值发生变化,就影响P(实时 反映累加器A中1的个数的奇偶性)。,注:CY、AC、OV、P这4个标志位由指令运行后,对其 产生影响(由硬件产生各标志),主要用于算术运算 类指令,除了CY

18、一般这3位不会用于数据的存储,CY也是位处理器(1位的CPU)中的累加器,在位操 作中使用较为频繁。P 在任何一条指令中,只要有累加器A出现并且A中的 值发生变化,就会影响P。RS1、RS0是工作寄存器组的选择位,由用户根据需 要通过指令来设定,去选择寄存器组(软件设定)。,例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补码:1 1 1 1 0 1 1 0 1 B 在单片机中,上述运算后,(CY)=1,(AC)=0,(OV)=Cy6Cy7=11=

19、0(结果正确),(P)=0。,4数据指针DPTR(83H、82H)数据指针DPTR是一个16位的特殊功能寄存器,不可位寻址,由两个位寄存器DPH(83H)和DPL(82H)组成,DPH 是DPTR的高位,DPL是DPTR的低位,DPTR既可合并作为一个16位寄存器,又可分开按位寄存器单独操作,见图3-11所示。,在指令中一般都是以一个16位的寄存器DPTR使用,用于存放外部数据存储器的地址和程序程序器的地址,访问外部数据存储器是用DPTR,称之为寄存器间接寻址;访问程序存储器是用A+DPTR,称之为变址寻址。作为两个独立的8位寄存器(DPH、DPL)使用时,只能使用其地址,在指令系统中会详解。

20、,5堆栈指针SP(81H)堆栈是CPU 用于暂时存放部分数据的“仓库”,它的作用是用来保护现场和保护断点。在80C51中,由内部数据存储器中若干存储单元组成,可由用户自定义单元地址,一般开辟在内部数据存储器30H7FH这个空间。存储单元的个数称为堆栈的深度,可理解为仓库容量。为了实现上述数据保护的需要,数据的存取,要遵循先进后出,后进先出的原则。80C51单片机中用堆栈指针SP(81H)来实现数据的先进后出,后进先出,即不可位寻址。它开辟在特殊功能寄存器81H中,没有位地址,即不可位寻址,如图3-12所示,堆栈指针SP是用来存放堆栈数据区的地址,如图3-13所示。一般为了书写方便,堆栈的示意图

21、,如图3-14所示。,堆栈数据的存取又称之为进栈和出栈。进栈时,首先堆栈指针加1,即(SP)(SP)+1,然后数据进栈;出栈时,先取堆栈的数据,然后堆栈指针减1,即(SP)(SP)-1。数据的进栈和出栈,又有两种操作形式,一是硬件操作,计算机执行某个操作时,硬件自动进栈(中断、调用)和出栈(返回指令),用于保护断点。二是软件操作,由指令PUSH direct(进栈)和指令POP direct(出栈)来实现。不管是硬件操作还是软件操作,进栈时,首先堆栈指针加1,然后数据进栈;出栈时,先取堆栈的数据,然后堆栈指针减1。下面以软件操作加以说明。,例2:已知(SP)=2FH,(40H)=22H,(41

22、H)=33H执行下列程序。PUSH 40H PUSH 41H POP 40H POP 41H解:根据初始条件,得示意图,存储器中没有提到单元的数据为任意值。,执行第一条指令 PUSH 40H,首先(SP)(SP)+1=2FH+1=30H,然后将40H中的数据22H,送入堆栈指针SP指向的单元30H中,如图3-16(a)所示。第一个进栈的数据不是堆栈指针指向的初始单元,在计算机中数据的传送,不是完全给予的意思,而是复制,40H单元数据进栈后,影响了堆栈指针指向的单元,但不影响40H这个单元的原始数据,所以40H的数据仍为22H。,执行第二条指令 PUSH 41H,进栈过程同第一条指令。进栈后,示

23、意图如图3-16(b)所示。,执行第三条指令 POP 40H,首先是取堆栈指针指向单元的数据给40H,则40H的数据为33H,然后将(SP)(SP)-1=31H-1=30H,执行完后,示意图如图3-16(c)所示。,执行第四条指令 POP 41H,出栈过程同第四条指令,示意图如图3-16(d)所示。当数据取出后,堆栈指针又回到初始状态,如图3-15所示。但原来进栈的数还存于堆栈中,直到下次进栈的数据将其覆盖。,该程序,是将40H和41H的数据交换,进栈两次,出栈两次,所以堆栈指针SP的值,仍为初始值2FH,堆栈指针的初始值指向的单元,是不能用于存放堆栈数据的,第一个入栈的数据,是该单元的地址加

24、1单元。,系统复位时堆栈指示器的值为07H,即指向的是工作寄存器区0组的R7单元,如图3-17所示,第一个入栈的数放于08H单元,但堆栈一般开辟在用户区(30H7FH)中。堆栈的深度是由数据连续进栈的次数来决定的。若根据某个程序设计的需要,需要16个单元堆栈来存储数据,堆栈开辟在40H到4FH单元,则堆栈指示器SP的初始值应付3FH,第一个入栈的数放入40H中,在程序的设计中,40H41H中不能用于其它的数据的存放,否则数据被覆盖。若实际进栈的数据超出了16个单元,则堆栈溢出,溢出的单元在50H以上,这些单元没有数据,则没有影响,否则影响原有数据。堆栈指针始终指向的是堆栈的栈顶位置。,注:51

25、子系列中,共有18个SFR(特殊功能寄存器),占用21个单元,我们先学5个SFR(共6个单元),其余SFR在后面的学习中,会逐步的给大家介绍。这18个SFR,21个单元中,字节地址能被8整除的单 元是可以进行位寻址的,也就是说字节地址的后面 一位是0或者8,都是可以进行位寻址的(bit)。可位寻址的单元,可以用位地址、位编号或位定 义,在寻址中都称之为位寻址(bit)。系统复位后,各寄存器的值如表3-4所示。,3.3.4 程序存储器 程序存储器的作用是用来存放程序和数表(固定不变的常数)。AT89S51单片机内部有4K的程序存储器FlashROM,外部最多可扩展64K的程序存储器,内外程序存储

26、器采用统一编址的方法,即共用64K的地址,地址范围0000HFFFFH,不管是内部还是外部都是用指令MOVC来访问。如图3-18所示。,1.程序存储器的结构 8051(80C51)系列有64K ROM 的寻址区,地址范围0000HFFFFH,用于存放程序。其中低4K(0000H0FFFH)的地址区可以为片内ROM 和片外ROM共用,但不能同时使用(由外引脚 决定)。高60K(1000HFFFFH)的地址区为片外ROM所专用。,注:低4K共用地址,这样出现一个地址两个单元,地址不能 唯一,这在计算机中是不允许的;解决方法,通过单片机的外引脚 来实现:a、当=0时,CPU直接访问外ROM(0000

27、HFFFFH),内部不用;b、当=1时,CPU先访问内部ROM(0000H0FFFH)结束后,再去访问外部ROM(1000HFFFFH),外部低4K不用,也 就是说外部低4K无需扩展,这种情况下,外部最多可扩展60K。,2.CPU对程序存储器中程序的访问 CPU对存储器的访问也就是执行程序,程序存储器的主要作用是用来存放程序,那CPU怎么去执行程序呢?怎么知道哪一条指令先执行?哪一条指令后执行呢?其实计算机根本不认程序,只认程序存储器的单元地址,先从低字节地址单元开始取指令执行,然后取高字节地址单元指令执行,而CPU这些操作,都是通过程序计数器PC(程序指针)来实现,PC是一个16位的寄存器,

28、不可寻址(无地址),用户不可操作,系统复位后(PC)0000H,每取一个单元程序执行后,PC会由硬件自动加1,去取下一个单元来执行,以此类推,直到遇到转移指令为止,转移时CPU会将转移位置的地址直接付给PC,从这个新的地址开始,又重复上述过程。,由于CPU只认存储器的地址不认程序,哪怎样保证程序的正确执行呢?只能由用户,根据CPU访问程序存储器的特点,将目标程序(二进制语言程序)按上述特点来存放,也就是将先要执行的指令,放在低字节单元,后执行的指令放在高字节单元。又由于PC复位后指向0000H单元,故主程序的第一条指令必须放在0000H开始的单元,0000H也就是主程序的入口地址。目标程序的存

29、放是通过编译软件中的伪指令来实现的,编译软件的作用是检查语法错误和生成目标程序(二进制语言程序),伪指令用于编译的过程(汇编)中,其中伪指令ORG就是给出程序存放在程序存储器中的起始地址。,3CPU对程序存储器中数表的访问 数表即在数据处理过程中用到的一些固定不变的常数,如 值3.14等,要由指令来读出。80C51单片机中,仅有两条指令,即MOVC A,A+PC和MOVC A,A+DPTR,这两条指令比较麻烦,我们在后面给大家介绍。注:不管是程序还是数表,在程序存储器中都是二进制 数,程序只能由CPU直接访问并执行,数表只能由 上述的两条指令来读取,在编程时要注意避免将数表 当程序来执行。由于ROM只能读不能写(软件),那程序和数表的 存入,需要专用的设备,即编程器,编程器就是将编 译软件编译成的目标程序和数表存放到指定的程序 存储器的位置中。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号