精华内容
下载资源
问答
  • 单片机存储器

    2011-05-24 18:46:00
    单片机存储器

    单片机的存储器有程序存储器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盘的外部存储,内存储器 速度快 价格贵,容量小,断电 后内存内数据会丢失。

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

    展开全文
  • 51单片机存储器原理

    2021-07-31 11:00:18
    一、 80C51单片机存储器结构 80C51单片机存储器包括两类:程序存储器和数据存储器。 程序存储器用来存放用户程序和常用的表格、常数,采用只读存储器(ROM)作为程序存储器。 数据存储器用来存放程序运行中的...

    一、 80C51单片机的存储器结构

    80C51单片机的存储器包括两类:程序存储器数据存储器

    程序存储器用来存放用户程序和常用的表格、常数,采用只读存储器(ROM)作为程序存储器。

    数据存储器用来存放程序运行中的数据、中间计算结果等,采用随机访问存储器(RAM)作为数据存储器。

    从物理地址上看,MCS-51系列单片机有4个存储器空间,即片内程序存储器和片外程序存储器、片内数据存储器和片外数据存储器。

     二、片内数据存储器

    80C51单片机的内部存储器分为内部程序存储器和内部数据存储器,这种程序与数据分开存放的存储器结构称为“哈佛”结构。(所谓哈弗就是数据与程序分开存储,这也是51单片机的缺点:速度不快;对应的是冯诺依曼结构,是数据与程序存储一块。)

    因为80C51单片机的内部数据存储器有256个单元,所以单元地址用8位二进制数表示。但这256个单元并不完全是作为数据存储器来使用的,其中低128个单元(地址范围为00H~7FH)是对用户开放的;

    高128个单元(80H~FFH)中分散地分布了21个特殊功能寄存器。

    片内RAM低128个单元按其用途可分为3个不同的区域,即工作寄存器区位寻址区用户RAM区。

    工作寄存器区

    ​​​​​​​​​​​​​​

    在此区域中共有32个存储单元,其地址范围是00H~1FH,分成4个通用寄存器组,即通用寄存器组0~通用寄存器组3,每组有8个存储单元,构成通用寄存器R0~R7。各组通用寄存器的名称与单元地址的对应关系见表从表可以看出,每个通用寄存器组都包含相同的通用寄存器R0~R7,它们只是地址不同,所以这4个通用寄存器组是不能同时使用的,可以使用程序状态字寄存器(PSW)中的RS1和RS0位来选择当前使用的通用寄存器组,在单片机的初始状态下,当前使用的通用寄存器组为通用寄存器组0。

       

       

    //方法一:改PSW
    
    MAIN:
    ......
    ......
    ACALL DELAY
    AJMP MAIN
    
    DELAY:
          SETB RS1;
          SETB RS0;//调用通用寄存器3   //也可以PSW|=0x18;
         ........
         ........//寄存器延时
         CLR RS1;
         CLR RS0;//恢复默认状态:调用寄存器0  //也可以PSW&=0xE7;
        RET
    END
    方法二:不调用寄存器组,申请一片空间
    
    MAIN:
    ......
    ......
    ACALL DELAY
    AJMP MAIN
    
    DELAY:
         PUSH ACC
    D0:     MOV A,#00H
          MOV 30H,A
          INC ACC
        CJNE ACC,#0FFH,DO
      POP ACC
    RET
    //这也是c语言中的unsigned char i;存储在RAM中,
    由于51单片机本身用户自定义的就不多,最好用方法一
    
    
    
    

    位寻址区

    位寻址区位于工作寄存器区之上,它的地址范围是20H~2FH,共16个单元。这16个单元都有单元地址(也称字节地址),可以按单元地址访问其内部存储的8位二进制数,称为单元寻址。另外,这16个单元中的每一位都有一个位地址,也可以按位地址访问所存储的一位二进制数,称为位寻址。所以,位寻址区的单元既可以按单元寻址,也可以按位寻址。这128位的位地址范围是00H~7FH。

    例如:MOV   20H,#0FFH

              MOV 24H,   #11111110B

            MOV   A,   20H;字节寻址:把20h单元的8位2进制数(一字节)送到A=0FF

            MOV C,    20H; 位地址寻址:把20h,代表的一个2进制数送到C=0;

     用户RAM区

    从地址30H至7FH共80个单元,把这一存储区域称为用户RAM区。对这个区域的使用,不做任何规定和限制,一般把堆栈设置在此区域。

    特殊功能寄存器(SFR,Special Function Register)

    80C51单片机有21个特殊功能寄存器,它们分散地分布在80H~FFH地址范围内的21个单元中,剩余的存储单元用户不能使用。

    程序存储器

    在MCS-51系列单片机中,有些单片机内部含有程序存储器,例如80C51单片机内部含有4KB程序存储器;

    无论内部有无程序存储器,外部都可以再扩展程序存储器,扩展的最大容量为64KB,下面以80C51单片机为例加以说明。80C51内部含有4KB ROM,其地址范围是0000H~FFFH。它的外部可以再扩展64KBROM,其地址范围是0000H~FFFFH。从两者的地址对比可以看出,内部程序存储器的地址和外部存储器的低4K地址重叠,地址范围都是0000H~0FFFH。解决的办法就是利用引脚的状态来区分。如果引脚接地,即=0时,就使用64KB的外部程序存储器;如果引脚接高电平,即=1时,就使用4KB的内部程序存储器和外部程序存储器的高60KB空间,如图2.3所示。总之,CPU可访问的程序存储器的最大容量为64KB。注意:由于80C31单片机内部不含有程序存储器,要在片外外接程序存储器,因此它的引脚必须接地。

    单片机的程序存储器中有两个具有特殊功能的区域。

     总结

    作者观点:总之,对于RAM和ROM,当我们写程序时,把程序烧到ROM,也就是按一定的逻辑形成一系列的逻辑开关,但是在CPU进行运算,转移时需要不断改变开关逻辑,于是RAM孕育而生,但是由于技术限制,RAM不能掉电保存逻辑,也就是电路中各个硅电子不能保存,且工艺限制做的内存大。于是形成了RAM与ROM通过CPU总线联动。

    通过51单片机的RAM地址,ROM地址,可以看到,ROM存储程序,通过CPU传递数据,到RAM,而RAM是各个寄存器的集合,按ROM程序形成逻辑,响应CPU,同时传递给ROM信号(这里ROM的逻辑已不变,相当于与或非的各种开关)。

    展开全文
  • 单片机存储器结构

    千次阅读 2018-09-08 10:27:33
    单片机内部存储结构分析   我们来思考一个问题,当我们在编程器中把...这个地方就是单片机内部的只读存储器即ROM(READ ONLY MEMORY)。为什么称它为只读存储器呢?刚才我们不是明明把两个数字写进去了吗?原来在...

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

       数的本质和物理现象:我们知道,计算机能进行数学运算,这可令我们非常的难以理解,计算机吗,我们虽不了解它的组成,但它总只是一些电子元器件,怎么能进行数学运算呢?我们做数学题如37+45是这样做的,先在纸上写37,然后在下面写45,然后大脑运算,最后写出结果,运算的原材料:37、45和结果:82都是写在纸上的,计算机中又是放在什么地方呢?为了解决这个问题,先让我们做一个实验:这里有一盏灯,我们知道灯要么亮,要么不亮,就有两种状态,我们能用’0’和’1’来代替这两种状态,规定亮为’1’,不亮为’0’。现在放上两盏灯,一共有几种状态呢?我们列表来看一下:

     

    状态

    表达

    0 0

    0 1

    1 0

    1 1


      请大家自已写上3盏灯的情况000 001 010 011 100 101 110 111

     

      我们来看,这个000,001,101 不就是我们学过的的二进制数吗?本来,灯的亮和灭只是一种物理现象,可当我们把它们按一按的次序排更好后,灯的亮和灭就代表了数字了。让我们再抽象一步,灯为什么会亮呢?看电路1,是因为输出电路输出高电平,给灯通了电。因此,灯亮和灭就能用电路的输出是高电平还是低电平来替代了。这样,数字就和电平的高、低联系上了。(请想一下,我们还看到过什么样的类似的例程呢?(海军之)灯语、旗语,电报,甚至红、绿灯)

    什么是位: 
      通过上面的实验我们已经知道:一盏灯亮或者说一根线的电平的高低,能代表两种状态:0和1。实际上这就是一个二进制位,因此我们就把一根线称之为一“位”,用BIT表示。

    什么是字节:
      一根线能表于0和1,两根线能表达00,01,10,11四种状态,也就是能表于0到3,而三根能表达0-7,计算机中常常用8根线放在一起,同时计数,就能表过到0-255一共256种状态。这8根线或者8位就称之为一个字节(BYTE)。不要问我为什么是8根而不是其它数,因为我也不知道。(计算机世界是一本人造的世界,不是自然界,很多事情你无法问为什么,只能说:它是一种规定,大家在以后的学习过程中也要注意这个问题)

    存储器的工作原理:

    1、存储器构造

       存储器就是用来存放数据的地方。它是利用电平的高低来存放数据的,也就是说,它存放的实际上是电平的高、低,而不是我们所习惯认为的1234这样的数字,这样,我们的一个谜团就解开了,计算机也没什么神秘的吗。

     

     

    存储器结构图 
    图2

    单片机存储器结构图 
    图3


      让我们看图2。单片机里面都有这样的存储器,这是一个存储器的示意图:一个存储器就象一个个的小抽屉,一个小抽屉里有八个小格子,每个小格子就是用来存放“电荷”的,电荷通过与它相连的电线传进来或释放掉,至于电荷在小格子里是怎样存的,就不用我们操心了,你能把电线想象成水管,小格子里的电荷就象是水,那就好理解了。存储器中的每个小抽屉就是一个放数据的地方,我们称之为一个“单元”。

     

     

      有了这么一个构造,我们就能开始存放数据了,想要放进一个数据12,也就是00001100,我们只要把第二号和第三号小格子里存满电荷,而其它小格子里的电荷给放掉就行了(看图3)。可是问题出来了,看图2,一个存储器有好多单元,线是并联的,在放入电荷的时候,会将电荷放入所有的单元中,而释放电荷的时候,会把每个单元中的电荷都放掉,这样的话,不管存储器有多少个单元,都只能放同一个数,这当然不是我们所希望的,因此,要在结构上稍作变化,看图2,在每个单元上有个控制线,我想要把数据放进哪个单元,就给一个信号这个单元的控制线,这个控制线就把开关打开,这样电荷就能自由流动了,而其它单元控制线上没有信号,所以开关不打开,不会受到影响,这样,只要控制不一样单元的控制线,就能向各单元写入不一样的数据了,同样,如果要某个单元中取数据,也只要打开对应的控制开关就行了。

    2、存储器译码
      那么,我们怎样来控制各个单元的控制线呢?这个还不简单,把每个单元元的控制线都引到集成电路的外面不就行了吗?事情可没那么简单,一片27512存储器中有65536个单元,把每根线都引出来,这个集成电路就得有6万多个脚?不行,怎么办?要想法减少线的数量。我们有一种办法称这为译码,简单介绍一下:一根线能代表2种状态,2根线能代表4种状态,3根线能代表几种,256种状态又需要几根线代表?8种,8根线,所以65536种状态我们只需要16根线就能代表了。存储器译码

    (图4)

    3、存储器的选片及总线的概念
       至此,译码的问题解决了,让我们再来关注另外一个问题。送入每个单元的八根线是用从什么地方来的呢?它就是从计算机上接过来的,一般地,这八根线除了接一个存储器之外,还要接其它的器件,如图4所示。这样问题就出来了,这八根线既然不是存储器和计算机之间专用的,如果总是将某个单元接在这八根线上,就不好了,比如这个存储器单元中的数值是0FFH另一个存储器的单元是00H,那么这根线到底是处于高电平,还是低电平?岂非要打架看谁历害了?所以我们要让它们分离。办法当然很简单,当外面的线接到集成电路的管脚进来后,不直接接到各单元去,中间再加一组开关(参考图4 )就行了。平时我们让开关关闭着,如果确实是要向这个存储器中写入数据,或要从存储器中读出数据,再让开关接通就行了。这组开关由三根引线选择:读控制端、写控制端和片选端。要将数据写入片中,先选中该片,然后发出写信号,开关就合上了,并将传过来的数据(电荷)写入片中。如果要读,先选中该片,然后发出读信号,开关合上,数据就被送出去了。注意图4,读和写信号同时还接入到另一个存储器,但是由于片选端不一样,所以虽有读或写信号,但没有片选信号,所以另一个存储器不会“误会”而开门,造成冲突。那么会不一样时选中两片芯片呢?只要是设计好的系统就不会,因为它是由计算控制的,而不是我们人来控制的,如果真的出现同时出现选中两片的情况,那就是电路出了故障了,这不在我们的讨论之列。

       从上面的介绍中我们已经看到,用来传递数据的八根线并不是专用的,而是很多器件大家共用的,所以我们称之为数据总线,总线英文名为BUS,总即公交车道,谁者能走。而十六根地址线也是连在一起的,称之为地址总线。

    半导体存储器的分类

      按功能能分为只读和随机存取存储器两大类。所谓只读,从字面上理解就是只能从里面读,不能写进去,它类似于我们的书本,发到我们手回之后,我们只能读里面的内容,不能随意更改书本上的内容。只读存储器的英文缩写为ROM(READ ONLY MEMORY)

    所谓随机存取存储器,即随时能改写,也能读出里面的数据,它类似于我们的黑板,我能随时写东西上去,也能用黑板擦擦掉重写。随机存储器的英文缩写为RAM(Random Access Memory)这两种存储器的英文缩写一定要记牢。

    注意:所谓的只读和随机存取都是指在正常工作情况下而言,也就是在使用这块存储器的时候,而不是指制造这块芯片的时候。不然,只读存储器中的数据是怎么来的呢?其实这个道理也很好理解,书本拿到我们手里是不能改了,能当它还是原材料——白纸的时候,当然能由印刷厂印上去了。

    顺便解释一下其它几个常见的概念

      PROM,称之为可编程存储器。这就象我们的练习本,买来的时候是空白的,能写东西上去,可一旦写上去,就擦不掉了,所以它只能用写一次,要是写错了,就报销了。(现在已经被淘汰)

      EPROM,称之为紫外线擦除的可编程只读存储器。它里面的内容写上去之后,如果觉得不满意,能用一种特殊的办法去掉后重写,这就是用紫外线照射,紫外线就象“消字灵”,能把字去掉,然后再重写。当然消的次数多了,也就不灵光了,所以这种芯片能擦除的次数也是有限的——几百次吧。(现在已经被淘汰)

       EEPROM,也叫 E2PROM称之为电可擦可编程只读存储器,它和EEPROM类似,写上去的东西也能擦掉重写,但它要方便一些,不需要光照了,只要用电就能擦除或者重新改写数据,所以就方便许多,而且寿命也很长(几万到几十万次不等)。

      FLASH,称之为闪速存储器,属于EEPROM的改进产品,它的最大特点是必须按块(Block)擦除(每个区块的大小不定,不同厂家的产品有不同的规格), 而EEPROM则可以一次只擦除一个字节(Byte)。FLASH现在常用于大容量存储,比如u盘

      再次强调,这里的所有的写都不是指在正常工作条件下。不管是PROM还是EPROM,它们的写都要有特殊的条件,一般我们用一种称之为“编程器”的设备来做这项工作,一旦把它装到它的工作位置,就不能随便改写了。

     

     

     

    转载自——电子开发网

     

     

     

    展开全文
  • [单片机]51单片机存储器结构

    千次阅读 2020-02-14 10:34:19
    从用户的角度上,8051单片机有三个存储空间: 1. 片内外统一编址的64K的程序存储器地址空间(MOVC) 2. 256B的片内数据存储器的地址空间(MOV) 3. 以及64K片外数据存储器的地址空间(MOVX) 在访问三个不同的逻辑...

    存储器结构

    从用户的角度上,8051单片机有三个存储空间:
    1. 片内外统一编址的64K的程序存储器地址空间(MOVC)
    2. 256B的片内数据存储器的地址空间(MOV)
    3. 以及64K片外数据存储器的地址空间(MOVX)
    在访问三个不同的逻辑空间时,应采用不同形式的指令,以产生不同的存储器空间的选通信号。
    存储器结构

    程序内存ROM

    寻址范围:0000H ~ FFFFH 容量64KB
    EA = 1,寻址内部ROM;
    EA = 0,寻址外部ROM
    地址长度:16位
    作用:存放程序及程序运行时所需的常数。
    七个具有特殊含义的单元是:
    0000H —— 系统复位,PC指向此处;
    0003H —— 外部中断0入口
    000BH —— T0溢出中断入口
    0013H —— 外中断1入口
    001BH —— T1溢出中断入口
    0023H —— 串口中断入口
    002BH —— T2溢出中断入口

    内部数据存储器RAM

    物理上分为两大区:00H ~ 7FH(低128单元用户RAM 和 高128单元SFR区)
    作用:作数据缓冲器用。

    一、程序存储器

    一个微处理器能够聪明地执行某种任务,除了它们强大的硬件外,还需要它们运行的软件,其实微处理器并不聪明,它们只是完全按照人们预先编写的程序而执行之。那么设计人员编写的程序就存放在微处理器的程序存储器中,俗称只读程序存储器(ROM)。程序相当于给微处理器处理问题的一系列命令。其实程序和数据一样,都是由机器码组成的代码串。只是程序代码则存放于程序存储器中。
    MCS-51具有64kB程序存储器寻址空间,它是用于存放用户程序、数据和表格等信息。(对于内部无ROM的8031单片机,它的程序存储器必须外接,空间地址为64kB,此时单片机的EA端必须接地。强制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指令任意安排,但在应用中应注意,不要超过了实际的存储空间,不然程序就会找不到。
    ROM分布图

    二、数据存储器

    数据存储器也称为随机存取数据存储器。数据存储器分为内部数据存储和外部数据存储。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组工作寄存器。

    在这里插入图片描述

    2、位寻址区(20H-2FH)

    内部RAM的20H—2FH单元为位寻址区,既可作为一般单元用字节寻址,也可对它们的位进行寻址。位寻址区共有16个字节,128个位,位地址为00H—7FH。位地址分配如表1所示,CPU能直接寻址这些位,执行例如置“1”、清“0”、求“反”、转移,传送和逻辑等操作。我们常称MCS-51具有布尔处理功能,布尔处理的存储空间指的就是这些为寻址区。
    在这里插入图片描述

    3、用户RAM区(30H-7FH)

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

    (二)高128单元:(80H-FFH)

    1、特殊功能寄存器

    特殊功能寄存器(SFR)也称为专用寄存器,特殊功能寄存器反映了MCS-51单片机的运行状态。很多功能也通过特殊功能寄存器来定义和控制程序的执行。
    MCS-51有21个特殊功能寄存器,它们被离散地分布在内部RAM的80H—FFH地址中,这些寄存的功能已作了专门的规定,用户不能修改其结构。表2是特殊功能寄存器分布一览表,我们对其主要的寄存器作一些简单的介绍。
    在这里插入图片描述
    程序计数器PC(program Counter)
    程序计数器在物理上是独立的,它不属于特殊内部数据存储器块中。PC是一个16位的计数器,用于存放一条要执行的指令地址,寻址范围为64kB,PC有自动加1功能,即完成了一条指令的执行后,其内容自动加1。PC本身并没有地址,因而不可寻址,用户无法对它进行读写,但是可以通过转移、调用、返回等指令改变其内容,以控制程序按我们的要求去执行。

    累加器ACC(Accumulator)
    累加器A是一个最常用的专用寄存器,大部分单操作指令的一个操作数取自累加器,很多双操作数指令中的一个操作数也取自累加器。加、减、乘、除法运算的指令,运算结果都存放于累加器A或AB累加器对中。大部分的数据操作都会通过累加器A进行,它形象于一个交通要道,在程序比较复杂的运算中,累加器成了制约软件效率的“瓶颈”,它的功能较多,地位也十分重要。以至于后来发展的单片机,有的集成了多累加器结构,或者使用寄存器阵列来代替累加器,即赋予更多寄存器以累加器的功能,目的是解决累加器的“交通堵塞”问题。提高单片机的软件效率。

    寄存器B
    在乘除法指令中,乘法指令中的两个操作数分别取自累加器A和寄存器B,其结果存放于AB寄存器对中。除法指令中,被除数取自累加器A,除数取自寄存器B,结果商存放于累加器A,余数存放于寄存器B中。

    程序状态字(Program Status Word)
    程序状态字是一个8位寄存器,用于存放程序运行的状态信息,这个寄存器的一些位可由软件设置,有些位则由硬件运行时自动设置的。寄存器的各位定义如下,其中PSW.1是保留位,未使用。下表是它的功能说明,并对各个位的定义介绍如下:
    在这里插入图片描述
    PSW.7(CY) 进位标志位,此位有两个功能:一是存放执行某写算数运算时,存放进位标志,可被硬件或软件置位或清零。二是在位操作中作累加位使用。

    PSW.6(AC) 辅助进位标志位,当进行加、减运算时当有低4位向高4位进位或借位时,AC置位,否则被清零。AC辅助进位位也常用于十进制调整。

    PSW.5(F0) 用户标志位,供用户设置的标志位。

    PSW.4、PSW.3(RS1和 RS0) 寄存器组选择位。可参见本章的图2定义。

    PSW.2(OV) 溢出标志。带符号加减运算中,超出了累加器A所能表示的符号数有效范围(-128—+127)时,即产生溢出,OV=1。表明运算运算结果错误。如果OV=0,表明运算结果正确。
    执行加法指令ADD时,当位6向位7进位,而位7不向C进位时,OV=1。或者位6不向位7进位,而位7向C进位时,同样OV=1。
    除法指令,乘积超过255时,OV=1。表面乘积在AB寄存器对中。若OV=0,则说明乘积没有超过255,乘积只在累加器A中。
    除法指令,OV=1,表示除数为0,运算不被执行。否则OV=0。

    PSW.0(P) 奇偶校验位。声明累加器A的奇偶性,每个指令周期都由硬件来置位或清零,若值为1的位数奇数,则P置位,否则清零。

    数据指针(DPTR)
    数据指针为16位寄存器,编程时,既可以按16位寄存器来使用,也可以按两个8位寄存器来使用,即高位字节寄存器DPH和低位字节DPL。
    DPTR主要是用来保存16位地址,当对64kB外部数据存储器寻址时,可作为间址寄存器使用,此时,使用如下两条指令:
    MOVX A, @DPTR
    MOVX @DPTR, A

    在访问程序存储器时,DPTR可用来作基址寄存器,采用基址+变址寻址方式访问程序存储器,这条指令常用于读取程序存储器内的表格数据。
    MOVC A, @A+@DPTR

    堆栈指针SP(Stack Pointer)
    堆栈是一种数据结构,它是一个8位寄存器,它指示堆栈顶部在内部RAM中的位置。系统复位后,SP的初始值为07H,使得堆栈实际上是从08H开始的。但我们从RAM的结构分布中可知,08H—1FH隶属1—3工作寄存器区,若编程时需要用到这些数据单元,必须对堆栈指针SP进行初始化,原则上设在任何一个区域均可,但一般设在30H—1FH之间较为适宜。

    数据的写入堆栈我们称为入栈(PUSH,有些文献也称作插入运算或压入),从堆栈中取出数据称为出栈(POP,也称为删除运算或弹出),堆栈的最主要特征是“后进先出”规则,也即最先入栈的数据放在堆栈的最底部,而最后入栈的数据放在栈的顶部,因此,最后入栈的数据出栈时则是最先的。这和我们往一个箱里存放书本一样,需将最先放入箱底部的书取出,必须先取走最上层的书籍。这个道理非常相似。

    那么堆栈有何用途呢?堆栈的设立是为了中断操作和子程序的调用而用于保存数据的,即常说的断点保护和现场保护。微处理器无论是在转入子程序和中断服务程序的执行,执行完后,还是要回到主程序中来,在转入子程序和中断服务程序前,必须先将现场的数据进行保存起来,否则返回时,CPU并不知道原来的程序执行到哪一步,原来的中间结果如何?所以在转入执行其它子程序前,先将需要保存的数据压入堆栈中保存。以备返回时,再复原当时的数据。供主程序继续执行。

    转入中断服务程序或子程序时,需要保存的数据可能有若干个,都需要一一地保留。如果微处理器进行多重子程序或中断服务程序嵌套,那么需保存的数据就更多,这要求堆栈还需要有相当的容量。否则会造成堆栈溢出,丢失应备份的数据。轻者使运算和执行结果错误,重则使整个程序紊乱。

    MCS-51的堆栈是在RAM中开辟的,即堆栈要占据一定的RAM存储单元。同时MCS-51的堆栈可以由用户设置,SP的初始值不同,堆栈的位置则不一定,不同的设计人员,使用的堆栈区则不同,不同的应用要求,堆栈要求的容量也有所不同。堆栈的操作只有两种,即进栈和出栈,但不管是向堆栈写入数据还是从堆栈中读出数据,都是对栈顶单元进行的,SP就是即时指示出栈顶的位置(即地址)。在子程序调用和中断服务程序响应的开始和结束期间,CPU都是根据SP指示的地址与相应的RAM存储单元交换数据。

    堆栈的操作有两种方法:其一是自动方式,即在中断服务程序响应或子程序调用时,返回地址自动进栈。当需要返回执行主程序时,返回的地址自动交给PC,以保证程序从断点处继续执行,这种方式是不需要编程人员干预的。第二种方式是人工指令方式,使用专有的堆栈操作指令进行进出栈操作,也只有两条指令:进栈为PUSH指令,在中断服务程序或子程序调用时作为现场保护。出栈操作POP指令,用于子程序完成时,为主程序恢复现场。

    I/O口专用寄存器(P0、P1、P2、P3)
    I/O口寄存器P0、P1、P2和P3分别是MCS-51单片机的四组I/O口锁存器。MCS-51单片机并没有专门的I/O口操作指令,而是把I/O口也当作一般的寄存器来使用,数据传送都统一使用MOV指令来进行,这样的好处在于,四组I/O口还可以当作寄存器直接寻址方式参与其他操作。

    定时/计数器(TL0、TH0、TL1和TH1)
    MCS-51单片机中有两个16位的定时/计数器T0和T1,它们由四个8位寄存器组成的,两个16位定时/计数器却是完全独立的。我们可以单独对这四个寄存器进行寻址,但不能把T0和T1当作16位寄存来使用。

    定时/计数器方式选择寄存器(TMOD)
    TMOD寄存器是一个专用寄存器,用于控制两个定时计数器的工作方式,TMOD可以用字节传送指令设置其内容,但不能位寻址,各位的定义如下,更详细的内容,我们将在《MCS-51定时器和中断系统》章节中叙述。
    在这里插入图片描述
    串行数据缓冲器(SBUF)
    串行数据缓冲器SBUF用来存放需发送和接收的数据,它由两个独立的寄存器组成,一个是发送缓冲器,另一个是接收缓冲器,要发送和接收的操作其实都是对串行数据缓冲器进行。

    其他控制寄存器(TMOD)
    除了以上我们简述的几个专用寄存外,还有IP、IE、TCON、SCON和PCON等几个寄存器,这几个控制寄存器主要用于中断和定时的,我们将在《MCS-51定时器和中断系统》中详细说明。

    展开全文
  • 51单片机存储器结构

    2016-06-24 16:05:00
    第十二课:51单片机存储器结构 MCS-51单片机在物理结构上有四个存储空间:1、片内程序存储器2、片外程序存储器3、片内数据存储器4、片外数据存储器但在逻辑上,即从用户的角度上,8051单片机有三个存储空间:1、片...
  • 摘要:设计了基于MCS一51单片机的大容量(超64KB)数据存储器的扩展方案,采用具有19根地址线的大容量Flash芯片F29C51004作为扩展存储体。将数据线和地址线合并使用,对F29C51004进行分页访问,解决了单片机存储单元...
  • 在51单片机应用系统中,有一些特殊的应用场合需要使用大容量的数据存储器。传统的用I/O口线直接控制大容量数据存储器的片选信号的扩展系统存在运行C51编译的程序时容易死机的缺点。文中根据作者实际使用的应用系统,...
  • 摘要:设计了基于MCS一51单片机的大容量(超64KB)数据存储器的扩展方案,采用具有19根地址线的大容量Flash芯片F29C51004作为扩展存储体。将数据线和地址线合并使用,对F29C51004进行分页访问,解决了单片机存储单元...
  • MCS-51的存储器可分为四类,51单片机存储器详解http://www.21ic.com/jichuzhishi/mcu/memory/2017-09-19/738404.html MCS-51的存储器可分为四类: 程序存储器 一个微处理器能够聪明地执行某种任务,...
  • 单片机内部存储结构分析   我们来思考一个问题,当我们在编程器中把一条...这个地方就是单片机内部的只读存储器即ROM(READ ONLY MEMORY)。为什么称它为只读存储器呢?刚才我们不是明明把两个数字写进去了吗?原来
  • 使用本文方法可轻易地为MCS-51单片机扩展大容量的数据存储器,这对于数据量大的数据采集系统有着非常大的意义。
  • 单片机存储器结构(zz)

    2016-10-09 12:30:27
    zz: http://www.51hei.com/mcuteach/249.html单片机内部存储结构分析   我们来思考一个问题,当我们在编程器中把一条指令写进单片要内部,然后取下单片机,...这个地方就是单片机内部的只读存储器即ROM(READ ONLY
  • MCS-51单片机存储器结构

    千次阅读 2010-10-28 23:07:00
    MCS-51单片机存储器结构MCS-51的存储器可分为四类: 程序存储器 一个微处理器能够聪明地执行某种任务,除了它们强大的硬件外,还需要它们运行的软件,其实微处理器并不聪明,它们只是完全按照人们预先编写的程序而...
  • 提出了一种使MCS-51单片机扩展容量远大于64K的数据存储器的办法,该法简单、易于实现、数据传输速率快。
  • 51单片机 数据存储器 系统扩展 课程设计论文
  • 很多硬件架构已经对存储器映射进行了划分,比如今天作为典型介绍的Cortex-M3体系架构,即使允许半导体厂商进行特定功能存储区域的重新定义,总体的存储器映射大框架也是不变的。 Cortex-m3支持最大4GB的存储空间,...
  • 典型微型计算机的存储器都是采用冯•诺依曼结构,也称普林斯顿结构,即存放程序指令的存储器——程序存储器和存放数据的存储器——数据存储器采取统一的地址编码结构。程序存储器与数据存储器分开的地址编码结构称为...
  • 为解决采集系统中大量数据存储及数据传输问题,本文对数据采集系统中基于单片机容量静态存储器的应用进行了刨析。闪速存储器采用Atmel公司的AT29C040,对系统的总体设计思想及闪速存储器的特点做了阐述。给出了...
  • 单片机内部存储结构分析   我们来思考一个问题,当我们在编程器中把一条...这个地方就是单片机内部的只读存储器即ROM(READ ONLY MEMORY)。为什么称它为只读存储器呢?刚才我们不是明明把两个数字写进去了吗?原来
  • 单片机系统中大容量数据存储器的系统扩展 南京师范大学控制科学与工程系 (南京 210042)曹国华 程继红 1 引言 MCS-51单片机系统扩展时,一般使用P0口作为地址低8位(与数据口分时复用),而P2口作为地址高8位,它...
  • 摘要:在单片机开发板上或者是核心板上通常会看到除了MCU之外的的芯片—EEPROM和FLASH,一般是AT24CXX、W25QXX这两颗芯片。但在利用单片机做一些项目的时候,比如做一个小车,驱动一些外设、显示一些温湿度信息等,...
  • 0 引言  随着信息技术的发展,在工业应用领域中需要采集存储的信息越来越多,相应地使用了各种数据采集装置,以获得被研究对象的相关信息。有时为了节约时间和计算机资源,一般并不是在当地立即...该存储器容量可达
  • 文章介绍了单片机程序存储器ROM。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,462
精华内容 2,184
关键字:

单片机存储器容量