最近用51单片机做个小项目,编写程序时,出现如下错误
MAIN.C(284): error C249: 'PDATA': SEGMENT TOO LARGE
MAIN.C(284): error C249: 'DATA': SEGMENT TOO LARGE
当时还不知道怎么回事,后来才发现51单片机的ram比较小,只有128b,所以要省着使用
当你定义数组不用更改时,就用uchar code XX[10]=
根据你数据的用处,你可以有以下几种选择:
data:直接寻址的片内RAM区低128B(00H~7FH)
bdata:片内RAM的可位寻址区(20H~2FH),允许字节和位混合访问
idata:单片机间接访问的片内RAM区,允许访问全部片内RAM
pdata:Ri间接访问的片外RAM的低256B(00H~FFH)
xdata:用DPTR间接访问的片外RAM,允许访问全部64KB片外RAM(0000H~FFFFH)
code:单片机的64KB程序存储区ROM
关键字:51学习 bdata idata pdata xdata
引用地址:
51学习笔记之关键词data、bdata、idata、pdata、xdata、code的含义
推荐阅读最新更新时间:2026-03-24 10:32
51学习笔记之关键词data、bdata、idata、pdata、xdata、code的含义
最近用51单片机做个小项目,编写程序时,出现如下错误 MAIN.C(284): error C249: 'PDATA': SEGMENT TOO LARGE MAIN.C(284): error C249: 'DATA': SEGMENT TOO LARGE 当时还不知道怎么回事,后来才发现51单片机的ram比较小,只有128b,所以要省着使用 当你定义数组不用更改时,就用uchar code XX = 根据你数据的用处,你可以有以下几种选择: data:直接寻址的片内RAM区低128B(00H~7FH) bdata:片内RAM的可位寻址区(20H~2FH),允许字节和位混合访问 idata:单片
[单片机]
C51 中data, idata, xdata, pdata, code的作用
从数据存储类型来说,8051系列有片内、片外程序存储器,片内、片外数据存储器。片内程序存储器还分为直接寻址区和间接寻址区。 data:将数据存储在0x00 - 0x7f的128B的RAM空间,可以用acc直接读写,速度最快,生成的代码也最少。 idata:将数据存储在0x00 - 0xff的256B的RAM空间,与data的区别在于访问方式不同,idata数据需要通过间接方式访问。 xdata:将数据存储在外部0x0000 - 0xffff RAM空间,用DPTR访问。 pdata:将数据存储在外部扩展RAM的低256字节空间。 code:将数据存储在ROM区域。 bdata:C51自定义语句,非标准
[单片机]
Keil C51对C语言的关键词扩展之三: bdata
使用bdata定义的变量即可字寻址,也可比特位寻址。 Keil C51编译器把使用bdata定义的变量放置在8051内部RAM可位寻址区。 bdata定义的变量必须为全局变量,不能在任一函数内部定义bdata类型的变量。 bdata关键词使用方法: int bdata x1; /* 定义可位寻址的整型变量*/ char bdata bary ; /* 定义可位寻址的数组*/ 此时,x1,bary均可按比特位寻址。使用sbit关键词定义可操作其任一比特位的变量。 sbit mybit0 = x1 ^ 0; /* x1的比特0*/ sbit mybit15 = x1 ^ 15; /* x1的比
[单片机]
单片机内存寻址XDATA/PDATA回答
本人遇到的问题和解决方法 1、pdata 空间不够用溢出 直接换成xdata pdata 就是最后的一点空间很容易溢出至于用pdata 有什么好处暂时没有找到相关的正面解释。 关于51单片机内存问题,一直是个疑惑大家的问题,因为51单片机是个很另类的单片机。 下面我给网上取到一部分讲解一下: 51单片机之所以另类,是因为,他寻址内存的空间,不是靠总线,是用指令的方式。 51单片机有以下几个内存模块组成: 1】ROM或者Flash,叫程序存储区,你写的程序是存在这里面的,上电后从这里面执行。 程序存储区也分为片内和片外,一般来说,现在的51很多已经做到了64K,所以很少有外扩 片外Flash或者片外的Rom了,Flash
[单片机]
关于C51内的code,idata,xdata
从数据存储类型来说,8051系列有片内、片外程序存储器,片内、片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code、data、xdata、idata以及根据51系列特点而设定的pdata类型,使用不同的存储器,将使程序执行效率不同,在编写C51程序时,最好指定变量的存储类型,这样将有利于提高程序执行效率(此问题将在后面专门讲述)。与ANSI-C稍有不同,它只分SAMLL、COMPACT、LARGE模式,各种不同的模式对应不同的实际硬件系统,也将有不同的编译结果。 在51系列中data,idata,xdata,pdata的区别 data:固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的
[单片机]
keil中 code、data、idata的区别
存储器类型 本C51编译器支持8051及其派生类型的结构能够访问8051的所有存储器空间具有下表列出的存储器类型的变量都可以被分配到某个特定的存储器空间。 存储器类型 描述 code 程序空间64 Kbytes ;通过MOVC @A+DPTR 访问 data 直接访问的内部数据存储器;访问速度最快128 bytes idata 间接访问的内部数据存储器 ;可以访问所有的内部存储器空间 256 bytes bdata 可位寻址的内部数据存储器;可以字节方式也可以位方式访问16bytes xdata 外部数据存储器64 Kbytes ;通过MOVX @D
[单片机]
Keil C51 xdata基址偏址寻址试验
本人最近用KEIL C51来做一个程序,要用到外部数据存贮器,也要寻址外部别的芯片,因为要用到对外部数据的连续读写,因此对xdata做了一点详细研究。 一、 第一种方式是定义外部对址常量,程序如下: #define XRAM 0x0000 #define CYDRAM 0x1000 #define EPM244H 0x4000 #define EPM244L 0x5000 void readdata(unint add) { volatile unchar xdata *xramadd; xramadd=CYDRAM+add; //just produce the CS signal
[单片机]
KEIL编译错误之xdata空间的代码
在用TFT和DS18B20做一个温度检测系统,利用Keil C51编程时,发现程序逻辑上没有错误,但在连接时却出现了错误,如下: *** ERROR L107: ADDRESS SPACE OVERFLOW SPACE: DATA SEGMENT: ?DT?MAIN LENGTH: 0004H *** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT SYMBOL: T SEGMENT: ?DT?MAIN *** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT SYMBOL: TEMPL
[单片机]