2011-05-24 18:46:00 cyd191488039 阅读数 564
  • 《计算机体系结构 硬件篇2》之 存储器

    第一阶段:《计算机体系结构》课程 分成4篇:分别是硬件篇,软件篇,网络篇,行业篇 第二阶段:《嵌入式技术》课程 分成5部分:Linux基础,C语言基础,C语言,Linux系统编程/网络编程,8051单片机,单片机,linux嵌入式,安卓,项目

    2661 人正在学习 去看看 张先凤

单片机的存储器有程序存储器ROM与数据存储器RAM两种。 这两种存储器在使用上是严格区分的,不得混用。 程序存储器存放程序指令,以及常数,表格等;而数据存储器则存放缓冲数据。 MCS-51单片机存储器的结构共有3部分:一是程序存储器  二是内部数据存储器 三是外部数据存储器MCS-51单片机的存储器可分为5类:程序存储器、内部数据存储器、特殊功能寄存器、位地址空间、外部数据存储器程序存储器

  程序是控制计算机动作的一系列命令,单片机只认识由“0”和“1”代码构成的机器指令。如前述用助记符编写的命令MOV A,#20H,换成机器认识的代码74H、20H:(写成二进制就是01110100B和00100000B)。在单片机处理问题之前必须事先将编好的程序、表格、常数汇编成机器代码后存入单片机的存储器中,该存储器称为程序存储器。程序存储器可以放在片内或片外,亦可片内片外同时设置。由于PC程序计数器为16位,使得程序存储器可用16位二进制地址,因此,内外存储器的地址最大可从0000H到FFFFH。8051内部有4k字节的ROM,就占用了由0000H~0FFFH的最低4k个字节,这时片外扩充的程序存储器地址编号应由1000H开始,如果将8051当做8031使用,不想利用片内4kROM,全用片外存储器,则地址编号仍可由0000H开始。不过,这时应使8051的第{31}脚(即EA脚)保持低电平。当EA为高电平时,用户在0000H至0FFFH范围内使用内部ROM,大于0FFFH后,单片机CPU自动访问外部程序存储器。数据存储器

  单片机的数据存储器由读写存储器RAM组成。其最大容量可扩展到64k,用于存储实时输入的数据。8051内部有256个单元的内部数据存储器,其中00H~7FH为内部随机存储器RAM,80H~FFH为专用寄存器区。实际使用时应首先充分利用内部存储器,从使用角度讲,搞清内部数据存储器的结构和地址分配是十分重要的。因为将来在学习指令系统和程序设计时会经常用到它们。8051内部数据存储器地址由00H至FFH共有256个字节的地址空间,该空间被分为两部分,其中内部数据RAM的地址为00H~7FH(即0~127)。而用做特殊功能寄存器的地址为80H~FFH。在此256个字节中,还开辟有一个所谓“位地址”区,该区域内不但可按字节寻址,还可按“位(bit)”寻址。对于那些需要进行位操作的数据,可以存放到这个区域。从00H到1FH安排了四组工作寄存器,每组占用8个RAM字节,记为R0~R7。究竟选用那一组寄存器,由前述标志寄存器中的RS1和RS0来选用。在这两位上放入不同的二进制数,即可选用不同的寄存器组。特殊功能寄存器

  特殊功能寄存器(SFR)的地址范围为80H~FFH。在MCS-51中,除程序计数器PC和四个工作寄存器区外,其余21个特殊功能寄存器都在这SFR块中。其中5个是双字节寄存器,它们共占用了26个字节。各特殊功能寄存器的符号和地址见附表2。其中带*号的可位寻址。特殊功能寄存器反映了8051的状态,实际上是8051的状态字及控制字寄存器。用于CPU PSW便是典型一例。这些特殊功能寄存器大体上分为两类,一类与芯片的引脚有关,另一类作片内功能的控制用。与芯片引脚有关的特殊功能寄存器是P0~P3,它们实际上是4个八位锁存器(每个I/O口一个),每个锁存器附加有相应的输出驱动器和输入缓冲器就构成了一个并行口。MCS-51共有P0~P3四个这样的并行口,可提供32根I/O线,每根线都是双向的,并且大都有第二功能。其余用于芯片控制的寄存器中,累加器A、标志寄存器PSW、数据指针DPTR等的功能前已提及,而另一些寄存器的功能在后面有关部分再作进一步介绍。地址空间  要保证多个应用程序同时处于内存中并且不互相影响,则需要解决两个问题:保护和重定位。我们来看一个原始的对前者的解决办法,它曾被用在IBM 360上:给内存块标记上一个保护键,并且比较执行进程的键和其访问的每个内存字的保护键。然而,这种方法本身并没有解决后一个问题,虽然这个问题可以通过在程序被装载时重定位程序来解决,但这是一个缓慢且复杂的解决方法。

  一个更好的办法是创造一个新的内存抽象:地址空间。就像进程的概念创造了一类抽象的CPU以运行程序一样,地址空间为程序创造了一种抽象的内存。地址空间是一个进程可用于寻址内存的一套地址集合。每个进程都有一个自己的地址空间,并且这个地址空间独立于其他进程的地址空间(除了在一些特殊情况下进程需要共享它们的地址空间外)。

  地址空间的概念非常通用,并且在很多场合中出现。比如电话号码,在美国和很多其他国家,一个本地电话号码通常是一个7位的数字。因此,电话号码的地址空间是从0 000 000到9 999 999,虽然一些号码并没有被使用,比如以000开头的号码。随着手机、调制解调器和传真机数量的增长,这个空间变得越来越不够用了,从而导致需要使用更多位数的号码。Pentium的I/O端口的地址空间从0到16 383。IPv4的地址是32位的数字,因此它们的地址空间从0到232-1(也有一些保留数字)。

  地址空间可以不是数字的。一套“.com”的互联网域名也是地址空间。这个地址空间是由所有包含2~63个字符并且后面跟着“.com”的字符串组成的,组成这些字符串的字符可以是字母、数字和连字符。到现在你应该已经明白地址空间的概念了。它是很简单的。外部存储器 软盘、硬盘、光盘、U盘都是外部存储器。

   从冯.诺依曼的存储程序工作原理及计算机的组成来说,计算机分为运算器、控制器、存储器和输入/输出设备,这里的存储器就是指内存,而硬盘属于输入/输出设备。

   CPU运算所需要的程序代码和数据来自于内存,内存中的东西则来自于硬盘。所以硬盘并不直接与CPU打交道。

   硬盘相对于内存来说就是外部存储器。

   存储器是用来存储器数据的,内存有告诉缓存和内存,计算机内部存储,外存就是类似U盘的外部存储,内存储器 速度快 价格贵,容量小,断电 后内存内数据会丢失。

   外存储器 单位价格低,容量大, 速度慢, 断电后数据不会丢失。

2016-11-17 17:24:50 yezheui 阅读数 3711
  • 《计算机体系结构 硬件篇2》之 存储器

    第一阶段:《计算机体系结构》课程 分成4篇:分别是硬件篇,软件篇,网络篇,行业篇 第二阶段:《嵌入式技术》课程 分成5部分:Linux基础,C语言基础,C语言,Linux系统编程/网络编程,8051单片机,单片机,linux嵌入式,安卓,项目

    2661 人正在学习 去看看 张先凤

                                                                                                        8051单片机存储器扩展

        以AT89C51为例,内部只有128B的RAM和4KB的ROM。当存储空间不够用时,需要扩展51单片机的存储器。

        51单片机有3条访问存储器指令,MOV访问内部RAM,MOVX访问外部RAM,MOVC读取ROM区代码。也就是8051有3类独自的寻址空间,共用16位的地址总线和8位的数据总线,最大寻址64KB。

       常见的EPROM有2732(4K*8bit),2764(8K*8bit),27264(32K*8bit)等。以2764为例,有13位地址线(A0-A12)。

       常见的SRAM有6264(8k*8bit),62265(32k*8bit)。74138为3/8译码器,74139为2/4译码器,74373位8位锁存起。

       首先在扩展时,P0口既传送地址又要传输数据(分时复用),需要外接74373(51的ALE)。P2口传送高8位地址。相关的控制总线有PSEN,WR,RD,需要将这3个控制总线和对应的存储器引脚连接。

       常用的扩展方法有①线选法和②片选法。以扩展3个2764为例。2764为8KB(8K*8bit)ROM芯片,有13位地址线。

      ①线选法:P0口接2764的低8位地址线(A0~A7),P2.0 ~ P2.4接高5位地址线(A8~A12)。将3个2764编号U1~U3。 P2.5~P2.7 分别这3个存储器的片选(CS)引脚。此时,U1对应的地址范围是2000H~3FFFH,U2对应的范围是 4000H~5FFFH,U3的地址范围是8000H~9FFFH。编程时,外部的ROM地址不连续。

      ②片选法:P0口分时复用。P2.0~P2.4接高5位地址线。P2.5~P2.6接74139的A0、A1段,Y0~Y2接3个存储器的片选引脚。 此时,U1对应的地址空间是0000H~1FFFH,U2对应的地址空间是2000H~3FFFH,U3对应的地址空间是4000H~5FFFH。 编程时,外部的ROM地址空间连续。 扩展外部RAM时,亦可采用上述2种方法。



注:ALE(30脚) Address Latch Enable,地址锁存使能,该引脚提供一个ALE地址允许信号(由正向负跳变,负跳沿),将低8位地址信息锁存到片外的地址锁存器中。  

      !PSEN(29脚) Program Storage ENable,外部程序存储器读选通信号,低电平有效。


2016年11月17日 星期四

FH

2008-01-17 16:04:00 mybirdsky 阅读数 1769
  • 《计算机体系结构 硬件篇2》之 存储器

    第一阶段:《计算机体系结构》课程 分成4篇:分别是硬件篇,软件篇,网络篇,行业篇 第二阶段:《嵌入式技术》课程 分成5部分:Linux基础,C语言基础,C语言,Linux系统编程/网络编程,8051单片机,单片机,linux嵌入式,安卓,项目

    2661 人正在学习 去看看 张先凤
2006-05-08 23:15:16

字体变小 字体变大

51单片机存储器的基本结构及工作原理

第一个问题:单片机的外部结构怎样呢?

拿到一块芯片,想要使用它,首先必须要知道怎样连线,我们“新动力2004”单片机学习套件用的一块称之为89S51的芯片,下面我们就看一下如何给它连线。

1、 电源:这当然是必不可少的了。单片机使用的是5V电源,其中正极接40引脚,负极(地)接20引脚。

2、 振蒎电路:单片机是一种时序电路,必须提供脉冲信号才能正常工作,在单片机内部已集成了振荡器,使用晶体振荡器,接18、19脚。只要买来晶振,电容,连上就可以了,按“新动力2004版”实验部份原理图接上即可。

3、复位引脚:按“新动力2004版”实验部份原理图中接法连好,至于复位是何含义及为何需要复要复位,复位章节中已做介绍。

4、 EA引脚:EA引脚接到正电源端。 至此,一个单片机就接好,通上电,单片机就开始工作了。

注:上述讲的是单片机最小应用系统图,朋友们在书让随便找本书都有,也以参考“新动力2004版”实验部份原理图。

这里我就不再画了。

第二个问题:单片机的工作任务分析

我们的第一个任务是要用单片机点亮一只发光二极管LED,显然,这个LED必须要和单片机的某个引脚相连,否则单片机就没法控制它了,那么和哪个引脚相连呢?单片机上除了刚才用掉的5个引脚,还有35个,我们将这个LED和1脚相连。

按照“新动力2004版”实验部份原理图的接法,当1脚是高电平时,LED不亮,只有1脚是低电平时,LED才发亮。因此要1脚我们要能够控制,也就是说,我们要能够让1引脚按要求变为高或低电平。即然我们要控制1脚,就得给它起个名字,总不能就叫它一脚吧?叫它什么名字呢?设计51芯片的INTEL公司已经起好了,就叫它P1.0,这是规定,不可以由我们来更改。

名字有了,我们又怎样让它变--高--或变--低--呢?叫人做事,说一声就可以,这叫发布命令,要计算机做事,也得要向计算机发命令,计算机能听得懂的命令称之为计算机的指令。让一个引脚输出高电平的指令是SETB,让一个引脚输出低电平的指令是CLR。因此,我们要P1.0输出高电平,只要写SETB P1.0,要P1.0输出低电平,只要写 CLR P1.0就可以了。

现在我们已经有办法让计算机去将P1.0输出高或低电平了,但是我们怎样才能计算机执行这条指令呢?总不能也对计算机也说一声了事吧。要解决这个问题,还得有几步要走。

第一步:计算机看不懂SETB CLR之类的指令,我们得把指令翻译成计算机能懂的方式,再让计算机去读。计算机能懂什么呢?它只懂一样东西——数字。因此我们得把SETB P1.0变为(D2H,90H ),把CLR P1.0变为 (C2H,90H ),至于为什么是这两个数字,这也是由51芯片的设计者--INTEL规定的,我们不去研究。

第二步:在得到这两个数字后,怎样让这两个数字进入单片机的内部呢?这要借助于一个硬件工具"编程器"。本站开发的“新动力2004版”集编程器和实验板于一体。大家可以参考一下,如想购买请进入看看!

我们将“新动力2004”学习套件与电脑连好,运行编程器的软件,然后在编缉区内写入(D2H,90H)见图2,写入……好,拿下片子,把片子插入学习套件的实验板,接通电源……什么?灯不亮?这就对了,因为我们写进去的指令就是让P1.0输出高电平,灯当然不亮,要是亮就错了。现在我们再拨下这块芯片,重新放回到编程器上,将编缉区的内容改为(C2H,90H),也就是CLR P1.0,写片,拿下片子,把片子插进实验板,接电,好,灯亮了。因为我们写入的(CLR P1.0)就是让P1.0输出低电平的指令。这样我们看到,硬件电路的连线没有做任何改变,只要改变写入单片机中的内容,就可以改变电路的输出效果。

第三个问题:单片机内部结构分析

我们来思考一个问题,当我们在编程器中把一条指令写进单片机内部,然后取下单片机,单片机就可以执行这条指令,那么这条指令一定保存在单片机的某个地方,并且这个地方在单片机掉电后依然可以保持这条指令不会丢失,这是个什么地方呢?这个地方就是单片机内部的只读存储器即ROM(READ ONLY MEMORY)。为什么称它为只读存储器呢?刚才我们不是明明把两个数字写进去了吗?原来在89C51中的ROM是一种电可擦除的ROM,称为FLASH ROM,刚才我们是用的编程器,在特殊的条件下由外部设备对ROM进行写的操作,在单片机正常工作条件下,只能从那面读,不能把数据写进去,所以我们还是把它称为ROM

下面分别介绍各组成部份硬件的结构,工作原理和操作方法:

存储器 :

8031单片机有4个存储器空间,分别用来安排4种不同功用的存储器:
一/内部数据存储器;二/特殊功能寄存器;三/程序存储器;四/外部数据存储器。
内部数据存储器和特殊功能寄存器集成于片内,程序存储器和外部数据存储器则安排在
片外,用接口电路与单片机连接。4种存储器中,除内部数据存储器和特殊功能寄存器是统一编址的除外,各存储器均分开编址,并用不完全相同的寻址方式来访问它们。


RAM,共128字节,地址范围为00H一7FH,见下图2。前32个单元(地址00H一1FH)称为寄存器区。其中,每8个寄存器形成-个寄存器组。具体说来:
寄存器0组 地址00H一07H
寄存器1组 地址08H一0FH
寄存器2组 地址10H一17H

寄存器3组 地址18H一1FH

图2 内部数据存储器结构

通过对特殊功能寄存器PSW中RS1、RS0两位的编程设置),可选择任一寄存器组为工作寄存器组,方法如下:
RS1 RSO 所选中的寄存器组
0 0 选中的寄存器0组
0 1 选中的寄存器1组
1 0 选中的寄存器2组
1 1 选中的寄存器3组
当某一组被设定成工作寄存器组后,该组中的8个寄存器,从低地址到高地址就分别称为Ro-R7,从而可以把它们用作通用寄存器,并可按寄存器寻址方式被访问。一旦工作寄存器组被指定后,另外三组寄存器则同其它数据RAM一样,只能按字节地址被予以读写。
字节地址20H到2FH称为位地址区,共有16个字节,计128位,每位都有相应的位地址,位地址范围为00H一7FH,见图3。通过位寻址,可以对各位进行位操作。由此可见,8031单片机有着相当出色的位处理能力。

内部数据RAM中,既有字节地址,又有位地址,两者的地址范围都是00H一7FH,这在数据操作时应加以注意。内部数据RAM通常用来存放运算过程的中间值,并用作堆栈区。

程序存储器

MCS-51单片机具有64K字节的程序存储器空间。其中,8051或8751在片内各有4K字节的程序存储器ROM或EPROM,并处于这一空间的最低地址区。8031片内没有程序存储器,必须在外部扩展程序存储器才能构成单片机应用电路。扩展容量可为64K字节中的任一容量,并且常用EPROM或E2PROM的形式(扩展方法见第四章)。 程序存储器中的某些地址被固定地用于特定程序的入口地址:
地址 用途
0000H 复位操作后的程序入口
0003H 外部中断0服务程序入口
000BH 定时器0中断服务程序入口
0013H 外部中断1服务程序入口
001BH 定时器1中断服务程序入口
0023H 串行I/O中断服务程序入口
在编程时,通常在这些入口地址开始的二三个地址单元中,放入一条转移类指令,以使相应的程序在指定的程序存储器区域中生成。例如,从000阳地址单元开始,放入一条转移到3000H地址单元的转移类指令,定时器0的中断服务程序就可从3000H地址单元开始安排。又如,定时器l的中断服务程序非常短,不会占用到0023H地址单元,或者串行I/O中断根本就没被使用,那么001BH就可以直接作为定时器1中断服务程序的首地址,而不必安排转移类指令。
程序存储器用来存放固化了的用户程序,取指地址由程序计数器PC给出,PC具有自动加l的功能,从而在无转移类指令的条件下,指令被逐一执行。转移类指令可改变PC值,使程序得以转移。程序存储器中也可固化一片数据区,存放被查阅的表格和参数等。

外部数据存储器

外部数据存储器又称为外部数据RAM,当803l片内128个字节的数据RAM不能满足数量上的要求时,可通过总线端口和其它I/O端口扩展外部数据RAM(扩展方法见相关章节),其最大容量可达64K字节。外部数据RAM与内部数据RAM的功用基本相同,但前者不能进行堆栈操作。
当803l单片机同时外接有程序存储器和数据存储器时,两者的区别在于:程序存储器只有读操作而无写操作,且读操作信号由引脚PSEN直接提供;数据存储器则有读写操作,且由引脚信号RD和WR选通读写操作。对片内RAM和片外RAM操作的区别在于:片内RAM操作时无读写信号产生,片外RAM操作时则有读写信号(RD,WR)产生。上面是不同的存储器操作在硬件信号方面的区别,这些反映在符号指令上则是有着完全不同的符号形式和寻址方式.

存储器的数据操作

1.程序存储器的数据操作
只有读操作。除由PC直接寻址,以执行各条指令外,还可用FC或DPTR作变址寻址。例如,若DPTR=2000H,A=20H,则指令MOVC A,@A十DPTR完成了把程序存储器2020H单元中的内容送入A中的操作。这种数据操作方式通常用来查阅程序存储器中的数据表格。

2.外部数据RAM的数据操作
可进行读写操作。用DPTR或工作寄存器组中的Ro或R1作寄存器间接寻址。当用RO或R1作寄存器间接寻址时,由P2端口提供高8位地址,R0或R1提供低8位地址。 例1 MOVX A, @DPTR ;外部数据RAM中以DPTR为地址中的内容 ----A
例2 MOV P2, #20H ;数20H ----P2
MOV R0, #30H ;数30H ----R0
MOVX @R0, A ;A ---- 外部数据RAM中2030H单元

3.内部数据RAM的数据操作
可进行读写操作。按直接字节地址作直接寻址或用工作寄存器组中的R0或R1作寄存器间接寻址。
例1 MOV 35H,#64H ;数64H送入片内RAM35H单元
例2 MOV R0 ,#40H ;数40H ----R0
MOV A ,@Ro ;内部数据RAM中40H地址中的内容 ----A


4.特殊功能寄存器SFR的数据操作
可进行读写操作。只能用直接寻址方式对给出地址的SFR作数据操作。
例1 MOV P1 ,#55H ;数55H经P1端口输出
例2 MOV A ,P0 ;把Po端口上的数据输入到A
例3 MOV PSW,#10H ;数10H ----PSW,从而使RS1=1,RS0=O,实现了选中第2组寄存器为工作寄存器的操作(此操作还清掉了PSW其它各标志位)


5.位地址空间的数据操作
可进行读写操作。采用直接位寻址方式对位地址中的数据作位操作。
例1 SETB 20H ;"1" ----片内RAM20H位地址单元
创2 SETB EA ;"1" ----SFR中的EA位(由图可见,EA的位地址为AFH)
803l单片机4种存储空间的主要特点及数据操作方式可归纳如下表所示。关于数据操作方法,在下面的章节中还会详细讨论

8031的存储器特点及数据操作
 
容量
地 址
寻址方式
操作例子
字节地址
位地址
外部程序存储器 最大64KB 0000H~FFFFH PC间址,DPTR问址 MOVC A,@A+DPTR
外部数据存储器
最小64KB 0000H~FFFFH P2Ri间址,DPTR间址 MOVX A,@R0;
MOVX @DPTR,A
内部数据存储器
128字节 00H~7FH 00H~7FH 直接寻址,Ri间址,位寻址

MOV 50H,#32H,
MOV @R1,A

SETB 44H

特殊功能寄存器
21字节 80H~FFH(不连续) 80H~FFH(不连续) 直接寻址,位寻址 MOV A,90H
CLR B0H

需要指出的是,单片机中的存储器结构与数据操作方法,是应用单片机的基础,必须了解得十分清楚。 

长期提供单片机编程器,单片机实验板和配套电子器材

SP-51A单片机实验板(带1602屏) 165元 SP-51pro单片机编程器: 98元
SP-51B单片机实验板 108元 SP-51单片机仿真器: 108元
SP-51K单片机实验板 108元 NSP单片机多功能编程器: 298元

郑州超越单片机技术有限公司

郑州市郑东新区郑汴路白庄小区23号楼

TEL:0371--66160112(可接传真) 66160113(可接传真) 66160068

电子信箱: saxmcu@yahoo.com.cn

 

2016-06-24 16:05:00 weixin_30800987 阅读数 19
  • 《计算机体系结构 硬件篇2》之 存储器

    第一阶段:《计算机体系结构》课程 分成4篇:分别是硬件篇,软件篇,网络篇,行业篇 第二阶段:《嵌入式技术》课程 分成5部分:Linux基础,C语言基础,C语言,Linux系统编程/网络编程,8051单片机,单片机,linux嵌入式,安卓,项目

    2661 人正在学习 去看看 张先凤

第十二课:51单片机存储器结构

MCS-51单片机在物理结构上有四个存储空间
1、片内程序存储器
2、片外程序存储器
3、片内数据存储器
4、片外数据存储器
但在逻辑上,即从用户的角度上,8051单片机有三个存储空间:
1、片内外统一编址的64K的程序存储器地址空间
2、256B的片内数据存储器的地址空间
3、以及64K片外数据存储器的地址空间
在访问三个不同的逻辑空间时,应采用不同形式的指令(具体我们在后面的指令系统学习时将会讲解),以产生不同的存储器空间的选通信号。
下图是8051单片机存储器的空间结构图

 

 程序存储器
    一个微处理器能够聪明地执行某种任务,除了它们强大的硬件外,还需要它们运行的软件,其实微处理器并不聪明,它们只是完全按照人们预先编写的程序而执行之。那么设计人员编写的程序就存放在微处理器的程序存储器中,俗称只读程序存储器(ROM)。程序相当于给微处理器处理问题的一系列命令。其实程序和数据一样,都是由机器码组成的代码串。只是程序代码则存放于程序存储器中。
    MCS-51具有64kB程序存储器寻址空间,它是用于存放用户程序、数据和表格等信息。对于内部无ROM的8031单片机,它的程序存储器必须外接,空间地址为64kB,此时单片机的端必须接地。强制CPU从外部程序存储器读取程序。对于内部有ROM的8051等单片机,正常运行时,则需接高电平,使CPU先从内部的程序存储中读取程序,当PC值超过内部ROM的容量时,才会转向外部的程序存储器读取程序。
    当=1时,程序从片内ROM开始执行,当PC值超过片内ROM容量时会自动转向外部ROM空间。
    当=0时,程序从外部存储器开始执行,例如前面提到的片内无ROM的8031单片机,在实际应用中就要把8031的引脚接为低电平。
    8051片内有4kB的程序存储单元,其地址为0000H—0FFFH,单片机启动复位后,程序计数器的内容为0000H,所以系统将从0000H单元开始执行程序。但在程序存储中有些特殊的单元,这在使用中应加以注意:
    其中一组特殊是0000H—0002H单元,系统复位后,PC为0000H,单片机从0000H单元开始执行程序,如果程序不是从0000H单元开始,则应在这三个单元中存放一条无条件转移指令,让CPU直接去执行用户指定的程序。
    另一组特殊单元是0003H—002AH,这40个单元各有用途,它们被均匀地分为五段,它们的定义如下:
     0003H—000AH  外部中断0中断地址区。
     000BH—0012H  定时/计数器0中断地址区。
     0013H—001AH  外部中断1中断地址区。
     001BH—0022H  定时/计数器1中断地址区。
     0023H—002AH  串行中断地址区。
    可见以上的40个单元是专门用于存放中断处理程序的地址单元,中断响应后,按中断的类型,自动转到各自的中断区去执行程序。从上面可以看出,每个中断服务程序只有8个字节单元,用8个字节来存放一个中断服务程序显然是不可能的。因此以上地址单元不能用于存放程序的其他内容,只能存放中断服务程序。但是通常情况下,我们是在中断响应的地址区安放一条无条件转移指令,指向程序存储器的其它真正存放中断服务程序的空间去执行,这样中断响应后,CPU读到这条转移指令,便转向其他地方去继续执行中断服务程序。

下图是ROM的地址分配图:

 

从上图中大家可以看到,0000H-0002H,只有三个存储单元,3个存储单元在我们的程序存放时是存放不了实际意义的程序的,通常我们在实际编写程序时是在这里安排一条ORG指令,通过ORG指令跳转到从0033H开始的用户ROM区域,再来安排我们的程序语言。从0033开始的用户ROM区域用户可以通过ORG指令任意安排,但在应用中应注意,不要超过了实际的存储空间,不然程序就会找不到。

 数据存储器
    数据存储器也称为随机存取数据存储器。数据存储器分为内部数据存储和外部数据存储。MCS-51内部RAM有128或256个字节的用户数据存储(不同的型号有分别),片外最多可扩展64KB的RAM,构成两个地址空间,访问片内RAM用“MOV”指令,访问片外RAM用“MOVX”指令。它们是用于存放执行的中间结果和过程数据的。MCS-51的数据存储器均可读写,部分单元还可以位寻址。
    MCS-51单片机的内部数据存储器在物理上和逻辑上都分为两个地址空间,即:
数据存储器空间(低128单元);
特殊功能寄存器空间(高128单元);

这两个空间是相连的,从用户角度而言,低128单元才是真正的数据存储器。下面我们就来详细的与大家讲解一下:

低128单元:
    片内数据存储器为8位地址,所以最大可寻址的范围为256个单元地址,对片外数据存储器采用间接寻址方式,R0、R1和DPTR都可以做为间接寻址寄存器,R0、R1是8位的寄存器,即R0、R1的寻址范围最大为256个单元,而DPTR是16位地址指针,寻址范围就可达到64KB。也就是说在寻址片外数据存储器时,寻址范围超过了256B,就不能用R0、R1做为间接寻址寄存器,而必须用DPTR寄存器做为间接寻址寄存器。

 

从上图中我们可以看到,8051单片机片内RAM共有256个单元(00H-FFH),这256个单元共分为两部分。其一是地址从00H—7FH单元(共128个字节)为用户数据RAM。从80H—FFH地址单元(也是128个字节)为特殊寄存器(SFR)单元。从图1中可清楚地看出它们的结构分布。

1、通用寄存器区(00H-1FH)
    在00H—1FH共32个单元中被均匀地分为四块,每块包含八个8位寄存器,均以R0—R7来命名,我们常称这些寄存器为通用寄存器。这四块中的寄存器都称为R0—R7,那么在程序中怎么区分和使用它们呢?聪明的INTEL工程师们又安排了一个寄存器——程序状态字寄存器(PSW)来管理它们,CPU只要定义这个寄存的PSW的D3和D4位(RS0和RS1),即可选中这四组通用寄存器。对应的编码关系如下表所示。惹程序中并不需要用4组,那么其余的可用做一般的数据缓冲器,CPU在复位后,选中第0组工作寄存器。

RS1  RS0

R0

R1

R2

R3

R4

R5

R6

R7

0

1

2

3

0     0

0     1

1     0

1     1

00H

08H

10H

18H

01H

09H

11H

19H

02H

0AH

12H

1AH

03H

0BH

13H

1BH

04H

0CH

14H

1CH

05H

0DH

15H

1DH

06H

0EH

16H

1EH

07H

0FH

17H

1FH

2、位寻址区(20H-2FH)
片内RAM的20H—2FH单元为位寻址区,既可作为一般单元用字节寻址,也可对它们的位进行寻址。位寻址区共有16个字节,128个位,位地址为00H—7FH。位地址分配如下表所示:

 RAM位寻址区地址表

单元地址

MSB        位地址        LSB

 

2FH

7FH

7EH

7DH

7CH

7BH

7AH

79H

78H

 

2EH

77H

76H

75H

74H

73H

72H

71H

70H

 

2DH

6FH

6EH

6DH

6CH

6BH

6AH

69H

68H

 

2CH

67H

66H

65H

64H

63H

62H

61H

60H

 

2BH

5FH

5EH

5DH

5CH

5BH

5AH

59H

58H

 

2AH

57H

56H

55H

54H

53H

52H

51H

50H

 

29H

4FH

4EH

4DH

4CH

4BH

4AH

49H

48H

 

28H

47H

46H

45H

44H

43H

42H

41H

40H

 

27H

3FH

3EH

3DH

3CH

3BH

3AH

39H

38H

 

26H

37H

36H

35H

34H

33H

32H

31H

30H

 

25H

2FH

2EH

2DH

2CH

2BH

2AH

29H

28H

 

24H

27H

26H

25H

24H

23H

22H

21H

20H

 

23H

1FH

1EH

1DH

1CH

1BH

1AH

19H

18H

 

22H

17H

16H

15H

14H

13H

12H

11H

10H

 

21H

0FH

0EH

0DH

0CH

0BH

0AH

09H

08

H

 

20H

07H

06H

05H

04H

03H

02H

01H

00H

 

CPU能直接寻址这些位,执行例如置“1”、清“0”、求“反”、转移,传送和逻辑等操作。我们常称MCS-51具有布尔处理功能,布尔处理的存储空间指的就是这些为寻址区。

3、用户RAM区(30H-7FH)
在片内RAM低128单元中,通用寄存器占去32个单元,位寻址区占去16个单元,剩下的80个单元就是供用户使用的一般RAM区了,地址单元为30H-7FH。对这部份区域的使用不作任何规定和限制,但应说明的是,堆栈一般开辟在这个区域。

高128单元:(80H-FFH)
前面提到,在片内的RAM中,高128位是专用寄存器区,因这节比较重要,所以我们单独的安排一节课跟大家介绍。下节课我们就重点介绍51单片机片内RAM的高128位,即专用寄存器区。

片外数据存储器在这里我们就先在介绍,在后面关于数据存储器扩展的章节中我们再详细介绍。

 

转载于:https://www.cnblogs.com/shirishiqi/p/5614458.html

2015-12-24 21:52:19 ls667 阅读数 3038
  • 《计算机体系结构 硬件篇2》之 存储器

    第一阶段:《计算机体系结构》课程 分成4篇:分别是硬件篇,软件篇,网络篇,行业篇 第二阶段:《嵌入式技术》课程 分成5部分:Linux基础,C语言基础,C语言,Linux系统编程/网络编程,8051单片机,单片机,linux嵌入式,安卓,项目

    2661 人正在学习 去看看 张先凤

存储器分为程序存储器(ROM)和数据存储器(RAM),两种又都可以分为片内和片外,片外即需要自己在单片机外部扩展。

8051单片机的片内程序存储器有4K,片内数据存储器有256个字节,其中又分为高128字节位特殊功能寄存器区,真正用户能用的RAM只有低128字节。

8052单片机有8K片内程序存储器,而数据存储器除了低128字节外还有扩展的高128字节,地址上跟特殊功能寄存器一样,但物理上是独立的,寻址方式不一样,扩展的高128字节只能间接寻址。


Keil中变量的存储类型:

存储类型

说明

code

程序空间(无需改变的变量)

data

直接访问的内部数据存储器(速度最快)

idata

间接访问的内部数据存储器(可以访问全部256字节RAM)

bdata

可位寻址的内部数据存储器

xdata

外部数据寄存器(最大64K)

pdata

分页的外部数据寄存器(最大256字节,少用)

【如无使用关键字,系统则按默认处理(根据存储模式)】

Keil中的存储模式:

存储模式

说明

Small

变量默认为data型,最大128字节

Compare

变量默认为pdata型,最大256字节

Large

变量默认为xdata型,最大64K

Keil中设置如下图:



我们平常使用的STC单片机,有很多型号,具体存储器大小都要看型号:


【89/90系列的机器周期需要12个或6个时钟周期】


【12/15系列的机器周期只需要1个时钟周期】


51单片机上的FFT算法

最近用增强型51单片机做了一个简易的点阵音乐频谱显示器,最主要是自己刚学完信号处理课程,想自己写一个FFT算法。现将已经能够在51单片机上运行的FFT算法供需要的伙伴们参考。

在51单片机上运行FFT算法,需要注意一下几点:

由于51单片机的内存RAM很小,只有128字节,52有256字节,而16点的浮点数输入,就需要2*4*16=128字节的内存开销,所以只有256字节的做多只能做16点的FFT运算。而且必须要用idata定义才能将其定义在高128字节。所以要做16点以上的FFT运算,必须选用有内部扩展RAM的51系列单片机,然后用xdata定义,并且要将存储模式设为LARGE模式。


单片机存储器结构

阅读数 2144

没有更多推荐了,返回首页