单片机内存寻址XDATA/PDATA回答

发布者:CrystalDawn最新更新时间:2015-11-16 来源: eefocus关键字:单片机  XDATA  PDATA 手机看文章 扫描二维码
随时随地手机看文章
本人遇到的问题和解决方法
1、pdata 空间不够用溢出  直接换成xdata    pdata 就是最后的一点空间很容易溢出至于用pdata 有什么好处暂时没有找到相关的正面解释。
 
 关于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快一倍,代码也小的很多
 
楼主又疑惑了,好多地址是重复的,比如,我向80H地址写一个数值,单片机怎么知道读的是内部的高128位RAM?还是SFR?还是外部64K的RAM呢?
 
答案是用指令,如果是直接寻址,那么访问的就是SFR,如果是R0或者R1间接寻址,就是内部高128位RAM,如果是DPTR或者是R0,R1间接寻址,且配合的是MovX指令,那么就是访问外部64KRAM中的第80H个地址。
 
概括一下来说,51的内存由以下组成:
1----程序存储器(包括片内Flash或Rom,也包括片外Flash或Rom,C语言用Code定义)
2----内部低128位Ram,C语言用data定义
3---内部高128位Ram,C语言用idata定义
4---内部SFR,C语言用Sfr定义
5---外部65536个Ram(通常,很多单片机厂家不会给你扩展那么多的,一般来说扩展256个字节或者1024个字节就差不多了,最近宏晶的出了个扩展4096字节的。这65536字节的Ram,前256个可以用Pdata修饰,也可以用Xdata修饰,超过256个之后的,只能用Xdata修饰)
 
以上所说的只是针对51内核的单片机,其他内核的,像ARM之类的,不是这种结构的。
 
最后,回答我们的大家的问题:
片外存储区是什么?
这个问题太模糊,答案可以是外扩的Flash,也可以说是外扩的RAM,
如果问题是这么问的:
程序或者常量存储在片外存储区,这个片外存储区指的是什么?
答案是外扩Flash;
如果问题是---变量存储在片外存储区,这个片外存储区指的是什么?
答案是外扩RAM;
一般来说,如果不指明的话,外内存储区,行业内人士指的是外部的Ram。
 
片内存储器是什么?是不是就是内部的E2PROM?
片内存储区一般来说,指的是内部的Ram,包括高128位(idata)和低128位(data)
片内存储器,这个说法我没听说过,可能是EEPROM吧。
关键字:单片机  XDATA  PDATA 引用地址:单片机内存寻址XDATA/PDATA回答

上一篇:几个C语言的好函数
下一篇:频率与占空比

推荐阅读最新更新时间:2024-03-16 14:39

MCU串口通讯的尝试
我尝试了一下。我使用的14.7456的晶振,想采用9600 8 1 n的方式通讯,其实是与另外的一个板子(s3c6410)那么单片机的串口设置就的有一定的值。计算公式是这样的: F = 14.7456 Baud = 9600(12T模式) BELOAD = 256 - INT(14745600/9600/32/12 + 0.5) = 256 - INT(5.5) = 256 - 4 = 251 Baud = 14745600 /(256 - 254)/ 32 / 12 = 9600 没有任何的误差 我试验过另外的一个,38400,8,N,1的格式此时 BELOAD =
[单片机]
基于51单片机的教室智能照明控制系统
一.硬件方案 本系统以51单片机作为控制模块的核心部件,采用热释红外人体传感器检测人体的存在,采用光敏三极管构成的电路检测环境光的强度;根据教室合理开灯的条件,通过对人体存在信号和环境光信号的识别与判断,完成对教室灯光的智能控制,避免了教室用电的大量浪费。系统还具有报警功能;同时还采用了软/硬件的“看门狗”等抗干扰措施。 主要由51单片机STC89C52、时钟芯片DS1302、液晶屏LCD1602、比较器芯片LM339、光敏电阻、红外对管、按键、LED等构成;如图: 二.设计功能 (1)使用4个LED灯模拟教室的照明灯,在符合条件开启时,人数小于10人亮一个灯,10-20人亮二个灯,20-30人亮三个灯,大于30人则全亮四
[单片机]
基于51<font color='red'>单片机</font>的教室智能照明控制系统
MAX7219与51单片机的驳接
  MAX7219是一种高集成化的串行输入/输出的共阴极LED显示驱动器。每片可驱动8位7段加小数点的共阴极数码管,可以数片级联,而与微处理器的连接只需3根线。MAX7219内部设有扫描电路,除了更新显示数据时从单片机接收数据外,平时独立工作,极大地节省了MCU有限的运行时间和程序资源。   MAX7219芯片上包括BCD译码器、多位扫描电路、段驱动器、位驱动器和用于存放每个数据位的8×8静态RAM以及数个工作寄存器。通过指令设置这些工作寄存器,可以使MAX7219进入不同的工作状态。 1 管脚说明   图1是MAX7219的管脚分布图。其中:   (1)DIN 为串行数据输入端。当CLK为上升沿时,数据被载入16 b内部移位寄存
[单片机]
MAX7219与51<font color='red'>单片机</font>的驳接
51单片机--LED闪烁、流水灯的简单试验
一、LED闪烁 /***************************************************************** LED闪烁的简单试验 *****************************************************************/ include reg51.h //此文件中定义了51的一些特殊功能寄存器 /*******延时函数**************************************/ // 定义一个演示函数,定时时间大概为一个ms。 void delay(unsigned int i) { unsigned
[单片机]
51<font color='red'>单片机</font>--LED闪烁、流水灯的简单试验
单片机8级七彩流水渐变
#include reg51.h sbit sent=P3^7; bit flag=0; sbit p35=P3^5; sbit p34=P3^4; sbit p31=P3^1; sbit p30=P3^0; sbit p17=P1^7; sbit p16=P1^6; unsigned char bdata p3; sbit r1=p3^5; sbit g1=p3^4; sbit b1=p3^3; sbit r2=p3^2; sbit g2=p3^1; sbit b2=p3^0; sbit p15=P1^5; sbit p14=P1^4; sbit p13=P1^3; sbit p12=P1^2; sbit p11=P1^1; s
[单片机]
51单片机最小系统设计
简介:AT89S51单片机最小系统,就是使单片机正常运行的最低配置:它有一系列模块组成。 1)复位系统: 当引脚9出现2个机器周期以上高电平时,单片机复位,程序从头开始运行. 2)时钟系统:有振荡器电路产生频率等于晶振频率,这时用的是外界晶振。 也可以又外部单独输入,此时XTAL2脚接地,时钟信号由XTAL1输入. 3)电源系统:VCC,和 GND引脚,供电电压4--5.5V. 程序的烧入引脚: flash存储器由串行ISP接口编程,计算机和单片机烧写由专用的烧入软件完成如AVR_fighter for usb asp.
[单片机]
51<font color='red'>单片机</font>最小系统设计
用Arduino最小系统板作AVR单片机的编程器
用Arduino编程具有简单易学的特点,但要配合Arduino控制板使用,使得成本比较高,体积也大,而且除单片机电路以外的大部分电路只在编程时有用,在电子制作上使用后就是多余的了,造成了浪费。能不能不用Arduino控制板,直接想办法用Arduino给单片机编程呢?答案是肯定的,只要做一个Arduino最小系统板,配合ISP下载线USBtinyISP或USBasp 就可以给AVR单片机下载程序了,Arduino最小系统板有一个锁紧座,方便单片机插上和取下,下载好程序的单片机就可以取下装到目标板上去使用了。 Arduino最小系统板电路见下图,适用于对ATmega8、ATmega168、ATmega328等型号的单片机编程
[单片机]
用Arduino最小系统板作AVR<font color='red'>单片机</font>的编程器
基于51单片机的超声波发生器设计方案
  本设计的超声波发生器是利用单片机生成初始信号,然后经过一系列处理电路的作用后生成用来杀灭水蚤的超声波,成本低、效果好,可以在农业上加以采用。在此对3个模块进行设计:   (1)信号发生模块。12 MHz的8051单片机硬件连接及其程序设计。   (2)信号处理模块。驱动电路设计(CD4069非门集成芯片);倍频电路设计(S9014或ECGl08三极管、104普通电容、11 257.9 nH自制电感、1 kΩ电阻);整波电路设计(CD4069非门集成芯片);和频电路设计(CD4081与门集成芯片);选频电路设计(S9014或ECGl08三极管、104普通电容、112.58 nH自制电感、1 kΩ电阻)。   (3)信号检测
[单片机]
基于51<font color='red'>单片机</font>的超声波发生器设计方案
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved