单片机串行存储器_串行口与编码器 51单片机1602液晶显示 - CSDN
  • 原文地址:51单片机程序存储器和数据存储器作者:SUN_403 为了保证程序能够连续地执行下去,CPU必须具有某些手段来确定一条指令的地址。程序计数器PC正是起到了这种作用,所以通常又称其为指令地址计数器。在程序...

    为了保证程序能够连续地执行下去,CPU必须具有某些手段来确定一条指令的地址。程序计数器PC正是起到了这种作用,所以通常又称其为指令地址计数器。在程序开始执行前,必须将其起始地址。即程序的第一条指令所在的内存单元地址送入PC。当执行指令时,CPU将自动修改PC的内容,使之总是保存将要执行的下一个条指令的地址。由于大多数都是按顺序执行的,所以修改的过程只是简单的加1操作。

    下面我们看看8051的存储器系统:(此章非常重要,请仔细理解)

    8051序列单片机与一般微机的存储器配置方式不相同。一般微机通常只有一个地址空间,ROM和RAM可以随意安排在这一地址范围内不同的空间,即ROM和RAM的地址同在一个队列里分配不同的地址空间。CPU访问存储器时,一个地址对应唯一的存储单元,可以是ROM也可以是RAM,并用同类访问指令。此种存储器结构称普林斯顿结构。

     

    8051的存储器在物理结构上分程序存储器空间和数据存储器空间。有四个存储空间:片内程序存储器和片外程序存储空间以及片内数据存储器和片外数据存储器。这种程序存储器和数据存储器分开的结构形式,称为哈佛结构。但从用户使用的角度,8051存储器地址空间分为三类:

    1、片内,片外统一编址0000H—FFFFH的64K字节的程序存储器地址空间,用16位地址;

    2、64K字节片外数据存储器地址空间,地址也从0000H—FFFFH,用16位地址;

    3、256K字节数据存储器地址空间,用8位地址。

    上述三个存储空间地址是重迭的,任何区别这三个不同的逻辑空间呢?8051的指令系统设计了不同的数据传送指令符号:CPU访问片内片外ROM指令用MOVC,访问片外指令用MOVX,访问片内RAM指令用MOV。

    一  程序存储器地址空间

    8051程序存储器用于存放编好的程序和表格常数。程序存储器通过16位程序计数器PC寻址,寻址能力为64K字节。8051,8751的64程序存储器片内ROM为4K字节,地址为0000H—0FFFH,片外最多可扩至64K字节ROM,地址1000H—FFFFH,片内外是统一编址的。

    当引脚EA接高电平时,8051程序计数器PC在0000H—0FFFH范围内,即前4K字节地址执行片内ROM中的程序;当指令地址超过0FFFH后,就自动地转向片外ROM指令。

    当引脚EA接低电平时,8051片内ROM不起作用,CPU只能从片外ROMZ中取指令,地址可以从000H开始编址。这种接法特别适用于采用8031单片机的场合,由于8031片内不带ROM,所以使用使必须使EA=0.以便能够从外部扩展EPROM中取指令。

     

         8051从片内程序存储器和片外程序存储器取 值时执行速度相同。程序存储器的某些单元是留给系统使用的。

          存储单元0000H-0002H用作8051上电复位后引导程序存放单元。因为8051上电复位后程序计数器PC的内容为0000H,所以CPU总是从0000H开始执行程序。如果在这三个单元中存有转移指令,那么程序就被引导到转移指令指定的ROM空间去执行。

    0003H—0023H单元均匀地分为五段,用作五个中断服务程序的入口,因为这五个入口之间的间隔较小,因此,一般说来这五个入口处都是放的一条跳转指令,而把真正的中断服务程序视情况安排在后面的存储器中。这五个入口分别是:

    0003h:

    外部中断0的入口地址,当外部中断引脚INT0,即P3.2有效时,引起中断申请,CPU响应中断后自动将地址0003H装入程序计数器PC,程序就被转换到0003H去执行外部中断0的中断服务程序。

    000Bh:

    定时器0溢出中断的入口地址,当定时器T0产生溢出时,引起中断申请,CPU响应中断后自动将地址000BH装入程序计数器PC, 程序就被转移到000BH去执行定时器0的中断服务程序。

         0013h:

      外部中断1的入口地址,当外部中断引脚INT1,即P3.3有效时,引起中断申请,CPU响应中断后自动将地址0013H装入程序计数器PC, 程序就被转移到0013H去执行外部中断1的中断服务程序。

         001Bh:

    定时器1溢出中断的入口地址,当定时器T1产生溢出时,引起中断申请,CPU响应中断后自动将地址001BH装入程序计数器PC, 程序就被转3移到0003H去执行定时器1的中断服务程序。

        0023h:

    串行接口中断的入口地址,当串行接口接收或发送完一个数据后,引起中断申请,CPU响应中断后自动将地址0023H装入程序计数器PC,程序就被转移到0023H去串行接口中断服务程序。

     

     二.数据存储器地址空间。

    数据存储器RAM用于存放运算中的中间结果,数据暂存,缓冲,标志位等。数据存储器空间也分为片内和片外两部分,即片内RAM和片外RAM。

       8051片外数据存储器空间为64K,从0000H—FFFFH;片内存储器空间为256字节,地址从0000H—00FFH。

    (一)片外RAM

       片外数据存储器与片内数据存储器空间低地址0000H—00FFH是重迭的,如何区分片内,片外RAM空间呢?8051有MOV和MOVX两种指令,用于区分片内片外RAM空间。片内RAM使用MOV指令,片外64KRAM空间专门为MOVX指令使用。

     

    (二)片内RAM数据存储器最大可寻址256个单元,它们又分为两个部分:

    低128字节,00H—7KH,是真正的RAM区。高128字节,80H—FFH,为特殊功能寄存器区。

      低128字节RAM ,00H—1FH地址安排为四组寄存器区,每组有八个工作寄存器,即R0-R7,,共占32个单元。通过对程序状态字PSW中RS1,RS0两位的设置,每组寄存器可选作CPU的当前工作寄存器组。若程序中并不需要四组,那么其余可用作一般RAN单元。CPU复位后,选中第0组工作寄存器。

    工作寄存器区后的16字节单元,即20H—2FH,可以位寻址方式访问其各位,这128个位的地址为00H—7FH。低128字节RAM单元地址范围也是00H—7FH,8051采用不同寻址方式加以区分,即访问128个位地址用位寻址方式。访问低128字节单元用直接寻址或间接寻址,这样就可以区分开00H—7FH是位地址还是字节地址,寻址方式以后再讲。通过执行指令可直接对某一位操作,如置1,请0或判1,判0等,可用作软件标志位或用于位处理。

         高128字节RAM,特殊功能寄存器,8051片内高128字节RAM中,除程序计数器PC外,有21专用寄存器,也称特殊功能寄存器,它们离散地分布在80H—FFH的RAM空间中。在21个特殊功能寄存器中,有11个特殊功能寄存器具有位寻址能力,它们的字节地址正好能被8整除,下面介绍部分特殊功能寄存器,其余将在后面讲述:

    (1)累加器ACC

    累加器ACC是8051最常见,最繁忙的八位特殊功能寄存器,许多指令的操作数取自于ACC,许多运算结果也存放于ACC中。在指令系统中采用A作为累加器ACC的助记符。

    (2)寄存器B

    在乘,除指令中,用到了8位B寄存器。乘法指令的两个操作数分别来自A和B,乘积存放于B,A两个8位寄存器中。除法指令中,A中存放被除数,B中放除数,商存放于A中,B中存放余数。在其他指令中,B可作为一般通用寄存器或一个RAM单元使用。

     

    (3)程序状态寄存器PSW

    PSW是一个8位特殊功能寄存器,它的各位包含了程序执行后的状态信息,供程序查询或判别之用。各位的含义及其格式如下:

     PSW除有确定的字节地址DOH外,每一位均有位地址。

    PY,PSW.7,进位标志位。在执行加法或减法运算指令时,如果运算结果最高位即位7,向前有进位或借位,CY位由硬件置1,如运算结果最高位无进位或借位,则CY清0。CY也是8051在进行位操作时的累加器。

    AC,PSW.6半标记位,也称辅助进位标志。当执行加法或减法操作时,其运算结果产生由低半字节,即位3向高半字节有半进位或借位时AC位将被硬件自动置1,否则AC被自动清0。

    PSW.5,用户标志位。用户可以根据自己的需要对FO位赋予一定含义,由用户置位,复位,系统没有规定它的意义。

    RSO,和RS1,PSW.4,和PSW.5,工作寄存器组选择控制位。这两位的值决定选择哪一组工作寄存器为当前工作寄存器组。由用户用软件改变RS1和RS0值的组合,以切换当前选用的工作寄存器组。

    当RS1=0,RS0=0时,工作寄存器组定位在00到07单元,即此时R0就是00,R1就是01,R2就是02,R3就是03,R4就是04,R5就是05,R6就是06,R7就是07。

    当RS1=0,RS0=1时,工作寄存器组定位在08到0F单元;

           当RS1=1,RS0=0时,工作寄存器组定位在10到17单元;

           当RS1=1,RS0=1时,工作寄存器组定位在18到1F单元;

    8051上电复位后, RS1=0,RS0=0,工作寄存器组定位在00到07单元;

    根据需要,可利用传送指令对PSW整字节操作或用位操作指令改变RS1和RS0的状态,以切换当前工作寄存器组。这样的设置对程序中保护现场提供了方便。

    OV,PSW.2,溢出标志位。当进行补码运算时,如有溢出,即当运算结果超出-128到+127的范围时,OV位由硬件自动置1;无溢出时,OV=0,

    PSW.1,为保留位,8051未用,8052为F1用户标志位。P, PSW.0,奇偶检验标志位。每条指令执行后,该位始终跟踪指示累加器A中1的个数。如结果A中有奇数个1,则置P=1,否则P=0.常用于校验串行通讯中的数据传送是否出错。

     

    (4)堆栈指针SP

    堆栈指针SP为8位特殊功能寄存器,SP的内容即堆栈指针可指向8051片内00H—7FH RAM的任何单元。系统复位后,SP初始化为07H,即指向07H的RAM单元。下面介绍一下堆栈的概念。

       8051同一般微机处理器一样,设有堆栈。在片内RAM中专门开辟出一个区域,数据的存取是以“后进先出”的结构方式处理的。这种数据结构方式对于中断,调用子程序都非常方便。堆栈的操作有两种:

    一种叫数据压入,即PUSH;另一种叫数据弹出,即POP。栈顶由堆栈指针SP自动管理。每次进行压入或弹出操作以后,堆栈指针便自动调整以保持指示堆栈顶部的位置。在使用堆栈之前,先给SP赋值,以规定堆栈的起始位置,称为栈 底。

    当数据压入堆栈后SP自动加1以指出当前栈顶位置。8051的堆栈指针SP是一个双向计数器。在压栈时SP内容自动增值,出栈时自动减值,存取信号必须按照“后进先出”的原则。

     

    (5)数据指针DPTR

    DPTR是一个16位的特殊功能寄存器,其高位字节寄存器用DPH表示,地址83H,低位字节寄存器用DPL表示,地址82H。DPTR既可以作为一个16位寄存器来处理,也可以作为一个16寄存器来处理,也可以作为两个独立的8位寄存器DPH和DPL使用。

     

    (6)IO端口PO,P1,P2,P3.

    PO,P1,P2,P3.为四个8位特殊功能寄存器,分别是四个并行IO端口的锁存器。它们都是有字节地址,每一个锁存器还有位地址,所以每一个IO线独立地作输入或输出时,数据可以锁存,作输出时数据可以缓冲。8051的中断源包括:定时计数器0,定时计数器1,外中断0,外中断1,串口中断,除上述资源外8051还有40条引脚(关于这40条引脚,请查看相关资料)。
     单片机简介

     

     

     
     
       

     

     

    展开全文
  • 根据下图电路编写程序用数码管显示0-9共10个数字循环显示。 代码: #include <reg51.h> unsigned char led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//字型码 ...i...
    根据下图电路编写程序用数码管显示0-910个数字循环显示。
     
     
    代码:
    #include <reg51.h>
    unsigned char led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//字型码 
    
    void delay()//延时函数
    {
         int i,j;
          for(i=0;i<3000;i++)
    		for(j=0;j<5;j++);
    }
    
    int main(void)
    {
        unsigned char i;
      	while(1)
    	{
    	    for(i=0;i<10;i++)//循环显示10个数字
         	   {
         	        P1=led[i];
     	                delay();//延时一段时间
        	           }
    	}
    }
    

     

    展开全文
  • (文字略有改动)  为了保证程序能够连续地执行下去,CPU必须具有某些手段来确定一条指令的地址。程序计数器PC正是起到了这种作用,所以通常又称其为指令地址计数器。在程序开始执行前,必须将其起始地址。...

    转载地址:http://www.eeworld.com.cn/mcu/2015/0817/article_21731.html

    (文字略有改动)

          为了保证程序能够连续地执行下去,CPU必须具有某些手段来确定一条指令的地址。程序计数器PC正是起到了这种作用,所以通常又称其为指令地址计数器。在程序开始执行前,必须将其起始地址即程序的第一条指令所在的内存单元地址送入PC。当执行指令时,CPU将自动修改PC的内容,使之总是保存将要执行的下一个条指令的地址。由于大多数都是按顺序执行的,所以修改的过程只是简单的加1操作。

    下面我们看看8051的存储器系统:(此章非常重要,请仔细理解)

            8051序列单片机与一般微机的存储器配置方式不相同。一般微机通常只有一个地址空间,ROM和RAM可以随意安排在这一地址范围内不同的空间,即ROM和RAM的地址同在一个队列里分配不同的地址空间。CPU访问存储器时,一个地址对应唯一的存储单元,可以是ROM也可以是RAM,并用同类访问指令。此种存储器结构称普林斯顿结构(普林斯顿结构 VS 哈佛结构)。

     

           8051的存储器在物理结构上分程序存储器空间和数据存储器空间。有四个存储空间:片内程序存储器和片外程序存储空间以及片内数据存储器和片外数据存储器。这种程序存储器和数据存储器分开的结构形式,称为哈佛结构。但从用户使用的角度,8051存储器地址空间分为三类:

    1、片内,片外统一编址0000H—FFFFH的64K字节的程序存储器地址空间,用16位地址;

    2、64K字节片外数据存储器地址空间,地址也从0000H—FFFFH,用16位地址;

    3、256K字节数据存储器地址空间,用8位地址。

    上述三个存储空间地址是重迭的,任何区别这三个不同的逻辑空间呢?8051的指令系统设计了不同的数据传送指令符号:CPU访问片内片外ROM指令用MOVC,访问片外指令用MOVX,访问片内RAM指令用MOV。

    一  程序存储器地址空间

           8051程序存储器用于存放编好的程序和表格常数。程序存储器通过16位程序计数器PC寻址,寻址能力为64K字节。8051,8751的64程序存储器片内ROM为4K字节,地址为0000H—0FFFH,片外最多可扩至64K字节ROM,地址1000H—FFFFH,片内外是统一编址的。

            当引脚EA接高电平时,8051程序计数器PC在0000H—0FFFH范围内,即前4K字节地址执行片内ROM中的程序;当指令地址超过0FFFH后,就自动地转向片外ROM指令。

            当引脚EA接低电平时,8051片内ROM不起作用,CPU只能从片外ROM中取指令,地址可以从000H开始编址。这种接法特别适用于采用8031单片机的场合,由于8031片内不带ROM,所以使用使必须使EA=0.以便能够从外部扩展EPROM中取指令。

     

           8051从片内程序存储器和片外程序存储器取值时执行速度相同。程序存储器的某些单元是留给系统使用的。

           存储单元0000H-0002H用作8051上电复位后引导程序存放单元。因为8051上电复位后程序计数器PC的内容为         0000H,所以CPU总是从0000H开始执行程序。如果在这三个单元中存有转移指令,那么程序就被引导到转移指令指定的ROM空间去执行。

            0003H—0023H单元均匀地分为五段,用作五个中断服务程序的入口,因为这五个入口之间的间隔较小,因此,一般说来这五个入口处都是放的一条跳转指令,而把真正的中断服务程序视情况安排在后面的存储器中。这五个入口分别是:

    0003h:

    外部中断0的入口地址,当外部中断引脚INT0,即P3.2有效时,引起中断申请,CPU响应中断后自动将地址0003H装入程序计数器PC,程序就被转换到0003H去执行外部中断0的中断服务程序。

    000Bh:

    定时器0溢出中断的入口地址,当定时器T0产生溢出时,引起中断申请,CPU响应中断后自动将地址000BH装入程序计数器PC, 程序就被转移到000BH去执行定时器0的中断服务程序。

         0013h:

      外部中断1的入口地址,当外部中断引脚INT1,即P3.3有效时,引起中断申请,CPU响应中断后自动将地址0013H装入程序计数器PC, 程序就被转移到0013H去执行外部中断1的中断服务程序。

         001Bh:

    定时器1溢出中断的入口地址,当定时器T1产生溢出时,引起中断申请,CPU响应中断后自动将地址001BH装入程序计数器PC, 程序就被转3移到0003H去执行定时器1的中断服务程序。

        0023h:

    串行接口中断的入口地址,当串行接口接收或发送完一个数据后,引起中断申请,CPU响应中断后自动将地址0023H装入程序计数器PC,程序就被转移到0023H去串行接口中断服务程序。

     

     二.数据存储器地址空间。

            数据存储器RAM用于存放运算中的中间结果,数据暂存,缓冲,标志位等。数据存储器空间也分为片内和片外两部分,即片内RAM和片外RAM。

       8051片外数据存储器空间为64K,从0000H—FFFFH;片内存储器空间为256字节,地址从0000H—00FFH。

    (一)片外RAM

             片外数据存储器与片内数据存储器空间低地址0000H—00FFH是重迭的,如何区分片内,片外RAM空间呢?8051有MOV和MOVX两种指令,用于区分片内片外RAM空间。片内RAM使用MOV指令,片外64KRAM空间专门为MOVX指令使用。

     

    (二)片内RAM数据存储器最大可寻址256个单元,它们又分为两个部分:

    低128字节,00H—7FH,是真正的RAM区。高128字节,80H—FFH,为特殊功能寄存器区。

           低128字节RAM ,00H—1FH地址安排为四组寄存器区,每组有八个工作寄存器,即R0-R7,,共占32个单元。通过对程序状态字PSW中RS1,RS0两位的设置,每组寄存器可选作CPU的当前工作寄存器组。若程序中并不需要四组,那么其余可用作一般RAN单元。CPU复位后,选中第0组工作寄存器。

    工作寄存器区后的16字节单元,即20H—2FH,可以位寻址方式访问其各位,这128个位的地址为00H—7FH。低128字节RAM单元地址范围也是00H—7FH,8051采用不同寻址方式加以区分,即访问128个位地址用位寻址方式。访问低128字节单元用直接寻址或间接寻址,这样就可以区分开00H—7FH是位地址还是字节地址,寻址方式以后再讲。通过执行指令可直接对某一位操作,如置1,请0或判1,判0等,可用作软件标志位或用于位处理。

           高128字节RAM,特殊功能寄存器,8051片内高128字节RAM中,除程序计数器PC外,有21专用寄存器,也称特殊功能寄存器,它们离散地分布在80H—FFH的RAM空间中。在21个特殊功能寄存器中,有11个特殊功能寄存器具有位寻址能力,它们的字节地址正好能被8整除,下面介绍部分特殊功能寄存器,其余将在后面讲述:

    (1)累加器ACC

    累加器ACC是8051最常见,最繁忙的八位特殊功能寄存器,许多指令的操作数取自于ACC,许多运算结果也存放于ACC中。在指令系统中采用A作为累加器ACC的助记符。

    (2)寄存器B

    在乘,除指令中,用到了8位B寄存器。乘法指令的两个操作数分别来自A和B,乘积存放于B,A两个8位寄存器中。除法指令中,A中存放被除数,B中放除数,商存放于A中,B中存放余数。在其他指令中,B可作为一般通用寄存器或一个RAM单元使用。

     

    (3)程序状态寄存器PSW

    PSW是一个8位特殊功能寄存器,它的各位包含了程序执行后的状态信息,供程序查询或判别之用。各位的含义及其格式如下:

     PSW除有确定的字节地址D0H外,每一位均有位地址。

    PY,PSW.7,进位标志位。在执行加法或减法运算指令时,如果运算结果最高位即位7,向前有进位或借位,CY位由硬件置1,如运算结果最高位无进位或借位,则CY清0。CY也是8051在进行位操作时的累加器。

    AC,PSW.6半标记位,也称辅助进位标志。当执行加法或减法操作时,其运算结果产生由低半字节,即位3向高半字节有半进位或借位时AC位将被硬件自动置1,否则AC被自动清0。

    PSW.5,用户标志位。用户可以根据自己的需要对F0位赋予一定含义,由用户置位,复位,系统没有规定它的意义。

    RS0,和RS1,PSW.3,和PSW.4,工作寄存器组选择控制位。这两位的值决定选择哪一组工作寄存器为当前工作寄存器组。由用户用软件改变RS1和RS0值的组合,以切换当前选用的工作寄存器组。

    当RS1=0,RS0=0时,工作寄存器组定位在00到07单元,即此时R0就是00,R1就是01,R2就是02,R3就是03,R4就是04,R5就是05,R6就是06,R7就是07。

    当RS1=0,RS0=1时,工作寄存器组定位在08到0F单元;

           当RS1=1,RS0=0时,工作寄存器组定位在10到17单元;

           当RS1=1,RS0=1时,工作寄存器组定位在18到1F单元;

    8051上电复位后, RS1=0,RS0=0,工作寄存器组定位在00到07单元;

    根据需要,可利用传送指令对PSW整字节操作或用位操作指令改变RS1和RS0的状态,以切换当前工作寄存器组。这样的设置对程序中保护现场提供了方便。

    OV,PSW.2,溢出标志位。当进行补码运算时,如有溢出,即当运算结果超出-128到+127的范围时,OV位由硬件自动置1;无溢出时,OV=0,

    PSW.1,为保留位,8051未用,8052为F1用户标志位。P, PSW.0,奇偶检验标志位。每条指令执行后,该位始终跟踪指示累加器A中1的个数。如结果A中有奇数个1,则置P=1,否则P=0.常用于校验串行通讯中的数据传送是否出错。

     

    (4)堆栈指针SP

    堆栈指针SP为8位特殊功能寄存器,SP的内容即堆栈指针可指向8051片内00H—7FH RAM的任何单元。系统复位后,SP初始化为07H,即指向07H的RAM单元。下面介绍一下堆栈的概念。

       8051同一般微机处理器一样,设有堆栈。在片内RAM中专门开辟出一个区域,数据的存取是以“后进先出”的结构方式处理的。这种数据结构方式对于中断,调用子程序都非常方便。堆栈的操作有两种:

    一种叫数据压入,即PUSH;另一种叫数据弹出,即POP。栈顶由堆栈指针SP自动管理。每次进行压入或弹出操作以后,堆栈指针便自动调整以保持指示堆栈顶部的位置。在使用堆栈之前,先给SP赋值,以规定堆栈的起始位置,称为栈 底。

    当数据压入堆栈后SP自动加1以指出当前栈顶位置。8051的堆栈指针SP是一个双向计数器。在压栈时SP内容自动增值,出栈时自动减值,存取信号必须按照“后进先出”的原则。

     

    (5)数据指针DPTR

    DPTR是一个16位的特殊功能寄存器,其高位字节寄存器用DPH表示,地址83H,低位字节寄存器用DPL表示,地址82H。DPTR既可以作为一个16位寄存器来处理,也可以作为两个独立的8位寄存器DPH和DPL使用。

     

    (6)IO端口P0,P1,P2,P3.

    P0,P1,P2,P3.为四个8位特殊功能寄存器,分别是四个并行IO端口的锁存器。它们都是有字节地址,每一个锁存器还有位地址,所以每一个IO线独立地作输入时,数据可以锁存,作输出时数据可以缓冲。8051的中断源包括:定时计数器0,定时计数器1,外中断0,外中断1,串口中断,除上述资源外8051还有40条引脚(关于这40条引脚,请查看相关资料)。


    展开全文
  • 存储器结构 从用户的角度上,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定时器和中断系统》中详细说明。

    展开全文
  • MCS-51单片机在物理结构上有四个存储空间: 1、片内程序存储器 2、片外程序存储器 3、片内数据存储器 4、片外数据存储器 但在逻辑上,即从用户的角度上,8051单片机有三个存储空间: 1、片内外统一编址的64K的...
  • 与并行Flash存储器相比,所需引脚少、体积小、易于扩展、与单片机或控制器连接简单、工作可靠,所以串行Flash存储器越来越多地用在各类电子产品和工业测控系统中。 DataFlash是美国Atmel公司新推出的大容量串行...
  • MCS-51单片机存储器结构MCS-51的存储器可分为四类: 程序存储器 一个微处理器能够聪明地执行某种任务,除了它们强大的硬件外,还需要它们运行的软件,其实微处理器并不聪明,它们只是完全按照人们预先编写的程序而...
  • AVR 系列单片机内部有三种类型的被独立编址的存储器,它们分别为:Flash 程序存储器、内部SRAM 数据存储器和EEPROM 数据存储器[1]。 Flash 存储器为1K~128K 字节,支持并行编程和串行下载,下载寿命通常可达10,000 ...
  • 单片机串行口与PC机通讯.doc 单片机串行通信发射机.doc 单片机和计算机的串行通信.doc 单片机课程设计1——新颖60秒LED旋转电子钟.doc 单片机课程设计2——数控低频正弦信号发生器.doc 单片机课程设计3——LED点阵双...
  • 2006-05-08 23:15:16 51单片机存储器的基本结构及工作原理 第一个问题:单片机的外部结构怎样呢?拿到一块芯片,想要使用它,首先必须要知道怎样连线,我们“新动力2004”单片机学习套件用的一块称之为89...
  • 51单片机存储器结构

    2019-07-21 07:29:05
    MCS-51单片机在物理结构上有四个存储空间:1、片内程序存储器2、片外程序存储器3、片内数据存储器4、片外数据存储器但在逻辑上,即从用户的角度上,8051单片机有三个存储空间:1、片内外统一编址的64K的程序存储器...
  • MCS-51的存储器可分为四类,51单片机存储器详解http://www.21ic.com/jichuzhishi/mcu/memory/2017-09-19/738404.html MCS-51的存储器可分为四类: 程序存储器 一个微处理器能够聪明地执行某种任务,...
  • AT24C02A, 2K SERIAL EEPROM: Internally organized with 32 pages of 8 bytes each,the 2K requires an 8-bit data word address for random word addressing. 24c02有32个页,每页8字节,本帖中不讨论页写的方式 ...
  • 单片机片内存储器烧写(ROM编程)(纯粹个人理解,收集资料总结,如有不妥还请指出)单片机应用系统由硬件和软件组成,软件的载体是硬件的程序存储器,程序存储器采用只读存储器,这种存储器在电源关闭后,仍能保存...
  • PIC单片机以性能稳定、品种众多等特点在工业控 制、仪器仪表、家电、通信等领域得到广泛应用。虽然很多 型号自身集成了存储器,但在很多情况下难以满足系统对 大容量存储的要求,需要外扩非易失性的存储器。与并行 ...
  • MCS51 程序存储器(ROM)

    2019-03-02 09:38:32
    程序存储器(ROM) 作用:存放程序、表格或常数,具有非易失性 特点:片内ROM与片外ROM可有2种组合方案 方案1 : 4 KB以内的地址在片内ROM, 大于4KB的地址在片外ROM中(图中折 线),两者共同构成64KB空间; 方案2 ...
  • 程序存储器低端的一些地址被固定地用作特定程序的入口地址: (1) 0000H——单片机复位后的程序入口地址。 (2) 0003H——外部中断 0 的中断服务子程序入口地址。 (3) 000BH——定时/计数器 0 的中断服务子程序入口...
1 2 3 4 5 ... 20
收藏数 4,312
精华内容 1,724
关键字:

单片机串行存储器