C51存储器类型与51单片机的物理区域

合集下载

51单片机:存储器

51单片机:存储器
特殊功 能寄存器
内部 RAM 0000 H
RAM (64K )
007FH
0000 H
数据存储器
引脚接为高电平时,CPU可访问内部和外部ROM,并 且程序自片内程序存储器开始执行,PC值超出片内 ROM容量时,会自动转向片外程序存储器中的程序。 引脚接为低电平时,CPU只 能访问外部ROM,无法使 用片内程序存储器。
(3)EPROM型(Erasable Programmable ROM,可擦除可编程 ROM),其典型外观标志是芯片上有一个紫外线擦除窗口。 这种存储器编程使用一定的直流电源(如+21V电压),而 擦除则用紫外线灯光照射芯片窗口(一般需15~30分钟), 重新编程后用不透明标签将窗口贴覆遮盖住即可。 MCS-51系列单片机8751的片内ROM以及27系列存储器 芯片都属于此类产品。 (4)E2PROM型(Electrically Erasable Programmable ROM,电可擦除可编程ROM)。这种存储器可以直接用电擦 写,比较方便数据的改写,较新型只读存储器,编程速度较 快。擦除、写入和读出电压均为+5V。28系列存储器属于此 类产品。
(二) 存储器的分类
sk ROM 型 OTPROM型
ROM
半导体存储器 (Memory)
EPROM型 E2PROM型 Flash ROM型 SRAM
RAM
DRAM
(1)Mask ROM 型:掩膜ROM。其编程只能由制造商通过 半导体掩膜技术完成,用户无法改写,所以对用户而言, 它是严格意义的只读存储器。如8051中的4KB程序存储器 就是这一种,这种ROM适用于有固定程序且大批量生产的 产品中。 一次可编程ROM(One Time 型:一次可编程 (2)OTPROM型: Programmable ROM)。用户可通过专门设备对其一次性写 入程序,此后便不能改写。这种程序存储器可靠性很高, 适合于存放已调试成功的用户程序,投入规模生产,但调 试阶段不宜用。目前,国内外有很多单片机制造商提供片 内集有OTPROM的单片机产品,可供用户选择。

C51数据类型和存储空间

C51数据类型和存储空间

关于单片机存储器的问题,idata,data,badata,xdata,pdata,code,片内存储区,片外存储区关于51单片机内存问题,一直是个疑惑大家的问题,因为51单片机是个很另类的单片机。

下面我给楼主讲解一下:51单片机之所以另类,是因为,他寻址内存的空间,不是靠总线,是用指令的方式。

51单片机有以下几个内存模块组成:1】ROM或者Flash,叫程序存储区,你写的程序是存在这里面的,上电后从这里面执行。

程序存储区也分为片内和片外,一般来说,现在的51很多已经做到了64K,所以很少有外扩片外Flash或者片外的Rom了,Flash或者Rom不管是片内还是片外的,只能用来定义常量,是用code来修饰,也就是说,用code来修饰的东西,在程序运行过程中,不能修改;2】RAM有------内部RAM的低128位(00-7F),对应C语言就是data,比如我定义一个变量,data unsigned char Var = 0;那么,这个Var变量就是放在内部的低128位Ram中-------内部RAM的高128位(80-FF),对应C语言就是idata,比如我定义一个变量,idata unsigned char Var = 0;那么,这个Var变量就是放在内部的高128位Ram中-------特殊功能寄存器(SFR)(80-FF),对应C语言就是Sfr比如我定义一个变量,Sfr unsigned char Var = 0x90;那么,这个Var变量就是放在内部的特殊功能寄存器中,这是你对Var操作,相当于操作一个特殊的寄存器,但是小心,不能随便定义Sfr变量,很危险------外部RAM 64K(0000-FFFF)外部的RAM可以扩展到65536个,但是前256个算是一页,这一页比较特殊,是用pdata来修饰的,当然,也可以用xdata来修饰。

除了第一页的256个以外的其他65280个空间,只能用xdata来修饰;回过头来讨论pdata和xdata,这两个都能修饰外部Ram的第一页,但是,Pdata只能修饰第一页,即最前面的256个外部Ram,那么,这最前面的256个到底用Pdata还是Xdata好的呢?答案:是Pdata,因为Xdata修饰的变量,用的是DPTR寻址,Pdata用的是R0和R1.DPTR因为是16位的,所以可以覆盖整个的64K外部Ram,R0和R1是8位,所以只能寻址最前面的256个,也就是外部Ram的第一页,但是,用R0寻址,比DPTR快一倍,代码也小的很多。

51单片机数据类型

51单片机数据类型

从数据存储类型来说,8051系列有片内、片外程序存储器,片内、片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code、data、xdata、idata以及根据51系列特点而设定的pdata类型,使用不同的存储器,将使程序执行效率不同,在编写C51程序时,最好指定变量的存储类型,这样将有利于提高程序执行效率。

在51系列中data,idata,xdata,pdata的区别:1、data:固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小。

2、idata:固定指前面0x00-0xff的256个RAM,其中前128和data的128完全相同,只是因为访问的方式不同。

idata是用类似C中的指针方式访问的。

汇编中的语句为:moxACC,@Rx.(不重要的补充:c中idata做指针式的访问效果很好)3、 xdata:外部扩展RAM,一般指外部0x0000-0xffff空间,用DPTR访问。

4、 pdata:外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,用movxACC,@Rx读写。

这个比较特殊,而且C51好象有对此BUG,建议少用。

但也有他的优点,具体用法属于中级问题,这里不提。

当然现在有些51单片本身内部就有扩展的RAM区域,故在允许使用内部扩展RAM的时候使用xdata 和pdata并不影响P2和P0口。

单片机C语言unsigned char code table[] code 是什么作用?code的作用是告诉单片机,我定义的数据要放在ROM(程序存储区)里面,写入后就不能再更改,其实是相当与汇编里面的寻址MOVX(好像是),因为C语言中没办法详细描述存入的是ROM 还是RAM(寄存器),所以在软件中添加了这一个语句起到代替汇编指令的作用,对应的还有data 是存入RAM的意思。

程序可以简单的分为code(程序)区,和data (数据)区,code区在运行的时候是不可以更改的,data区放全局变量和临时变量,是要不断的改变的,cpu从code区读取指令,对data 区的数据进行运算处理,因此code区存储在什么介质上并不重要,象以前的计算机程序存储在卡片上,code区也可以放在rom里面,也可以放在ram里面,也可以放在flash里面(但是运行速度要慢很多,主要读flash比读ram要费时间),因此一般的做法是要将程序放到flash里面,然后load到 ram里面运行的;DATA区就没有什么选择了,肯定要放在RAM里面,放到rom 里面改动不了。

51单片机存储器结构介绍

51单片机存储器结构介绍

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

程序内存ROM寻址范围:0000H ~ FFFFH容量64KBEA = 1,寻址内部ROM;EA = 0,寻址外部ROM地址长度:16位作用:存放程序及程序运行时所需的常数。

七个具有特殊含义的单元是:0000H ——系统复位,PC指向此处;0003H ——外部中断0入口000BH —— T0溢出中断入口0013H ——外中断1入口001BH —— T1溢出中断入口0023H ——串口中断入口002BH —— T2溢出中断入口内部数据存储器RAM物理上分为两大区:00H ~ 7FH即128B内RAM和SFR区。

作用:作数据缓冲器用。

下图是8051单片机存储器的空间结构图程序存储器一个微处理器能够聪明地执行某种任务,除了它们强大的硬件外,还需要它们运行的软件,其实微处理器并不聪明,它们只是完全按照人们预先编写的程序而执行之。

那么设计人员编写的程序就存放在微处理器的程序存储器中,俗称只读程序存储器(ROM)。

程序相当于给微处理器处理问题的一系列命令。

其实程序和数据一样,都是由机器码组成的代码串。

只是程序代码则存放于程序存储器中。

MCS-51具有64kB程序存储器寻址空间,它是用于存放用户程序、数据和表格等信息。

对于内部无ROM的8031单片机,它的程序存储器必须外接,空间地址为64kB,此时单片机的端必须接地。

强制CPU从外部程序存储器读取程序。

51单片机存储器内部结构

51单片机存储器内部结构

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

程序内存ROM寻址范围:0000H ~ FFFFH 容量64KBEA = 1,寻址内部ROM;EA = 0,寻址外部ROM地址长度:16位作用:存放程序及程序运行时所需的常数。

七个具有特殊含义的单元是:0000H ——系统复位,PC指向此处;0003H ——外部中断0入口000BH —— T0溢出中断入口0013H ——外中断1入口001BH —— T1溢出中断入口0023H ——串口中断入口002BH —— T2溢出中断入口内部数据存储器RAM物理上分为两大区:00H ~ 7FH即128B内RAM 和 SFR区。

作用:作数据缓冲器用。

下图是8051单片机存储器的空间结构图程序存储器一个微处理器能够聪明地执行某种任务,除了它们强大的硬件外,还需要它们运行的软件,其实微处理器并不聪明,它们只是完全按照人们预先编写的程序而执行之。

那么设计人员编写的程序就存放在微处理器的程序存储器中,俗称只读程序存储器(ROM)。

程序相当于给微处理器处理问题的一系列命令。

其实程序和数据一样,都是由机器码组成的代码串。

只是程序代码则存放于程序存储器中。

MCS-51具有64kB程序存储器寻址空间,它是用于存放用户程序、数据和表格等信息。

对于内部无ROM的8031单片机,它的程序存储器必须外接,空间地址为64kB,此时单片机的端必须接地。

强制CPU从外部程序存储器读取程序。

C51存储器类型MCS-51单片机物理存储器区域

C51存储器类型MCS-51单片机物理存储器区域

C51存储器类型MCS-51单⽚机物理存储器区域1、 data区空间⼩,所以只有频繁⽤到或对运算速度要求很⾼的变量才放到data区内,⽐如for循环中的计数值。

2、 data区内最好放局部变量。

因为局部变量的空间是可以覆盖的(某个函数的局部变量空间在退出该函数是就释放,由别的函数的局部变量覆盖),可以提⾼内存利⽤率。

当然静态局部变量除外,其内存使⽤⽅式与全局变量相同;3、确保你的程序中没有未调⽤的函数。

在Keil C⾥遇到未调⽤函数,编译器就将其认为可能是中断函数。

函数⾥⽤的局部变量的空间是不释放,也就是同全局变量⼀样处理。

这⼀点Keil C做得很愚蠢,但也没办法。

4、程序中遇到的逻辑标志变量可以定义到bdata中,可以⼤⼤降低内存占⽤空间。

在51系列芯⽚中有16个字节位寻址区bdata,其中可以定义8*16=128个逻辑变量。

定义⽅法是: bdata bit LedState;但位类型不能⽤在数组和结构体中。

5、其他不频繁⽤到和对运算速度要求不⾼的变量都放到xdata区。

6、如果想节省data空间就必须⽤large模式,将未定义内存位置的变量全放到xdata区。

当然最好对所有变量都要指定内存类型。

7、当使⽤到指针时,要指定指针指向的内存类型。

在C51中未定义指向内存类型的通⽤指针占⽤3个字节;⽽指定指向data区的指针只占1个字节;指定指向xdata区的指针占2个字节。

如指针p是指向data区,则应定义为: char data *p;。

还可指定指针本⾝的存放内存类型,如:char data * xdata p;。

其含义是指针p指向data区变量,⽽其本⾝存放在xdata区。

bit是在内部数据存储空间中 20H .. 2FH 区域中⼀个位的地址,或者 8051 位可寻址 SFR 的⼀个位地址。

code是在 0000H .. 0FFFFH 之间的⼀个代码地址。

data是在 0 到 127 之间的⼀个数据存储器地址,或者在 128 .. 255 范围内的⼀个特殊功能寄存器(SFR)地址。

51单片机存储器结构介绍

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

【程序内存ROM】寻址范围:0000H ~ FFFFH 容量64KBEA = 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的容量时,才会转向外部的程序存储器读取程序。

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

② AC(PSW.6)——辅助进位标志位。在加减运算中,当有低4 位 向 高 4 位 进 位 或 借 位 时 , AC 由 硬 件 置 位 , 否 则 AC 位 被 清 “0”。在进行十进制数运算时需要十进制调整,此时要用 到AC位状态进行判断。
③ F0(PSW.5)——用户标志位。这是一个由用户自定义的标 志位,用户根据需要用软件方法置位或复位。例如用它来控 制程序的转向。
4. 堆栈类型
向上生长型和向下生长型。MCS-51的堆栈是向上生长的。
5. 堆栈使用方法
① 调用子程序或中断时,返回地址(断点)自动进栈。程序返回时, 断点再自动弹回PC。
② 使用专用的堆栈操作指令,进行进出栈操作。保护现场(PUSH); 恢复现场(POP)。
1.4 内部程序存储器
MCS-51单片机的程序计数器PC为16位,因此可以寻址的 地址空间为64KB。8051和8751单片机内部有4KB字节 ROM/EPROM程序存储器(0000H~0FFFH),1000H~FFFFH是外 部扩展程序存储器地址空间。而8052单片机内部有8KB ROM程 序存储器,同样可以扩展到64KB。在64KB程序存储器中,有6 个地址单元具有特殊功能。
3. 堆栈指示器
堆栈共有两种操作:进栈和出栈。
但不论是数据进栈还是出栈,都是对堆栈的栈顶单元进行的, 即对堆栈栈顶单元的写和读操作。为了指示栈顶地址,所以 要设置堆栈指示器SP。SP的内容就是堆栈栈顶的存储单元地 址。
MCS-51单片机由于堆栈设在内部RAM上,因此SP是一个8位 寄存器。实际上SP就是专用寄存器的一员。系统复位后,SP 的内容为07H,但由于堆栈最好在内部RAM的30H~7FH单元中 开辟,所以在程序设计时,应注意把SP值初始化为30H。SP的 内容一旦确定,栈顶的位置就确定了。

51单片机的程序存储器和数据存储器

51单片机的程序存储器和数据存储器51单片机是一种常见的嵌入式微控制器,具备程序存储器和数据存储器,广泛应用于各个领域。

程序存储器用于存储和执行程序,而数据存储器用于储存运行过程中的变量和数据。

本文将详细介绍51单片机的程序存储器和数据存储器的特点和使用方法。

一、程序存储器程序存储器是51单片机中用于存储程序代码的地方。

它通常在芯片内部,有多种形式,常见的有ROM(只读存储器)和Flash(闪存)两种。

1. ROM存储器ROM存储器可以被写入一次,之后不能再改变。

它通常用于存储经常使用的不变的代码,例如启动程序、中断向量表等。

ROM存储器具有较高的稳定性和可靠性,在操作过程中不易出错。

但是,由于其只能被写入一次,因此对于频繁需要修改的程序代码来说,使用ROM存储器并不方便。

2. Flash存储器Flash存储器是一种可擦写的存储器,它可以多次写入和擦除。

这使得在51单片机的开发过程中,可以方便地修改和更新程序代码。

Flash存储器的优点是灵活性高,容易更新,但相对而言,稳定性较差,可能会出现擦除错误或写入错误的情况。

在使用Flash存储器时,需要注意以下几点:(1)在写入过程中,应该保证电源的稳定性,避免写入过程中电压异常导致写入错误。

(2)应该合理规划Flash存储器的中存储空间的物理布局,以方便程序的定位和管理。

(3)由于Flash存储器的写入次数是有限的,因此要尽量减少对其频繁的擦写。

二、数据存储器数据存储器是51单片机中用于存储程序运行中的变量和数据的地方。

它可以读取和写入,是程序运行和数据处理的重要组成部分。

数据存储器通常分为RAM(随机访问存储器)和SFR(特殊功能寄存器)两种。

1. RAM存储器RAM存储器是一种易读写的存储器,其存储空间较大,可以存储较多的变量和数据。

RAM存储器的读写速度较快,对于频繁读写的数据可以更快地进行处理。

但是,RAM存储器对电源的稳定性要求较高,断电会导致存储的数据丢失。

单片机原理及C51应用设计-理论篇-第3章


1.选择语句if
if语句是用来判断所给定的条件是否满足的一种操 作,它有两种基本形式。
(1) if(表达式) { 语句; }
(2) if(条件表达式) {语句1;}
else {语句2;}
3.2.3 常量与变量
1.常量 常量是在程序执行过程中其值不能改变的量。常量的数
据类型有整型、浮点型、字符型利字符串型等,C51编译器 还扩充了一种位(bit)标量。 (1)整型常量 十进制整数。如1234、-5678、0等。 十六进制整数。以0x开头的数是十六进制数,如0xl23。 (2)浮点型常量 浮点型常量有十进制表示形式和指数表示形式。 如0.3141。
3.1.1 C51与标准C的异同
1. C51虽然继承了标准C语言的绝大部分的特性,而且基本 语法相同。特定的硬件结构上有所扩展,如关键字sbit、 data、idata、xdata、code等。
2. 应用C51特别要注重对系统资源的理解,因为单片机的系 统资源相对PC机来说很贫乏,特别是对内部RAM,其中 的每一字节都要充分利用。
预处理命令 #include< >
函数说明 long fun1( );
float funຫໍສະໝຸດ ( );功能函数1 fun1( )
函数体
{
}
功能函数2 fun2( )
函数体
{
主函数 主函数体
} main( ) {
}
3.2.1 数据类型
表3-1 C51基本数据类型
3.2.2 运算符及表达式
表3-2 C51的运算符
3.2 C51程序设计基础
一般C语言程序具有如下的结构:
预处理命令 #include< >
函数说明 long fun1( );
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C51 存储器类型与51 单片机的物理区域
1、data 区空间小,所以只有频繁用到或对运算速度要求很高的变量才放到data 区内,比如for 循环中的计数值。

2、data 区内最好放局部变量。

因为局部变量的空间是可以覆盖的(某个函数的局部变量空间在退出该函数是就释放,由别的函数的局部变量覆盖),可以提高内存利用率。

当然静态局部
变量除外,其内存使用方式与全局变量相同;
扩展阅读:51 单片机的特殊功能寄存器(SFR)
3、确保你的程序中没有未调用的函数。

在Keil C 里遇到未调用函数,编译器就将其认为可能是中断函数。

函数里用的局部变量的空间是不释放,也就是同全局变量一样处理。

这一点Keil C 做得很愚蠢,但也没办法。

4、程序中遇到的逻辑标志变量可以定义到bdata 中,可以大大降低内存占用空间。

在51 系列芯片中有16 个字节位寻址区bdata,其中可以定义8*16=128 个逻辑变量。

定义方法是:bdata bit LedState;但位类型不能用在数组和结构体。

相关文档
最新文档