打印
[经验分享]

data、idata、xdata、pdata的区别

[复制链接]
870|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
claretttt|  楼主 | 2025-3-23 18:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

单片机中data、idata、xdata、pdata的区别

data: 固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小。

idata: 固定指前面0x00-0xff的256个RAM,其中前128和data的128完全相同,只是因为访问的方式不同。idata是用类似C中的指针方式访问的。汇编中的语句为:mox ACC,@Rx.(不重要的补充:c中idata做指针式的访问效果很好) xdata: 外部扩展RAM,一般指外部0x0000-0xffff空间,用DPTR访问。 pdata: 外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,用movx ACC,@Rx读写。这个比较特殊,而且C51好象有对此BUG, 建议少用。但也有他的优点,具体用法属于中级问题,这里不提。

startup.a51的作用,和汇编一样,在C中定义的那些变量和数组的初始化就在startup.a51中进行,如果你在定义全局变量时带有数值,如unsigned char data xxx="100";,那startup.a51中就会有相关的赋值。如果没有=100,startup.a51就会把他清0。(startup.a51==变量的初始化)。 这些初始化完毕后,还会设置SP指针。对非变量区域,如堆栈区,将不会有赋值或清零动作。

有人喜欢改startup.a51,为了满足自己一些想当然的爱好,这是不必要的,有可能错误的。比如掉电保护的时候想保存一些变量, 但改startup.a51来实现是很笨的方法,实际只要利用非变量区域的特性,定义一个指针变量指向堆栈低部:0xff处就可实现。为什么还要去改? 可以这么说:任何时候都可以不需要改startup.a51,如果你明白它的特性。

bit是在内部数据存储空间中 20H .. 2FH 区域中一个位的地址,这在DATA的20H以后以字节形式出现,可互相参照。另外加上8051 可寻址 的SFR,但刚刚试过,只是00H--7FH起作用,也就是说当数据有变化时颜色变红,以后的从80H到--FFH就不是位寻址区了,是位寻址的特殊寄存器,如涉及到了可位寻址的那11个当然会有反应。

复位后,程序计数器PC的内容为0000H,内部RAM各单元的值不确定。各功能寄存器的复位值如下:堆栈指针SP的复位值为07H,累加器ACC、寄存器B的复位值为00H,数据指针DPTR的复位值为0000H,而p0、p1、p2、p3四个口的复位值为0FFH。其他SFR如PSW、TCON、TMOD、TL0、TH0、TL1、TH1的复位值也为00H。

wave中是低128字节和高128字节(0-7FH),低128字节是片内RAM区,高128字节(80-FFH)是SFR(特殊功能寄存器)bit则是位于低128字节的20H .. 2FH 区域,即data的20H .. 2FH 区域。

使用特权

评论回复
沙发
hudi008| | 2025-4-4 11:19 | 只看该作者
data        ​内部 RAM 直接区        0x00 ~ 0x7F(128字节)        直接寻址(如 var)        最小且快        最快(CPU 直接访问)
idata        ​内部 RAM 间接区        0x80 ~ 0xFF(128字节)        间接寻址(如 @R0)        同 data        较快(需寄存器间接)
xdata        ​外部 RAM        扩展至 64KB(0x0000~0xFFFF)        DPTR 寄存器寻址        最大但慢        较慢(需总线访问)
pdata        ​外部 RAM 分页区        单页 256 字节(需分页)        间接寻址 + 分页        每页 256B        较慢(分页开销)

使用特权

评论回复
板凳
wilhelmina2| | 2025-4-4 16:18 | 只看该作者
data(内部直接区)​
存储在单片机内部的 RAM 中(如 8051 的 128 字节内部 RAM)。
​直接寻址:CPU 可直接通过地址访问(如 mov A, 30H)。
​速度最快,但容量最小(通常仅 128 字节)。

使用特权

评论回复
地板
nomomy| | 2025-4-5 22:20 | 只看该作者
idata:
定义:在编程中,idata指内部RAM的高128字节,只能通过寄存器间接寻址。
用途:用于存储额外的变量和数据,适合不需要频繁访问的场景。
与data的区别:虽然与data同属内部RAM,但访问方式(间接寻址)和速度(稍慢)不同。

使用特权

评论回复
5
pixhw| | 2025-4-9 23:53 | 只看该作者
data支持直接寻址,idata和pdata支持间接寻址,xdata通常用DPTR访问。

使用特权

评论回复
6
minzisc| | 2025-4-10 00:07 | 只看该作者
data:
直接寻址,可直接用地址访问(如 MOV A, 20H)。
idata:
间接寻址,需通过寄存器(如 R0, R1)访问(如 MOV A, @R0)。
xdata:
间接寻址,需通过 DPTR(数据指针)访问(如 MOVX A, @DPTR)。
pdata:
分页间接寻址,通过 R0 或 R1 访问低256字节(如 MOVX A, @R0)。

使用特权

评论回复
7
earlmax| | 2025-4-10 00:21 | 只看该作者
data:最快但容量最小,适用于小变量。
idata:容量较data大,速度稍慢,适用于较大变量。
xdata:容量最大,速度较慢,适用于大量数据。

使用特权

评论回复
8
jonas222| | 2025-4-10 00:35 | 只看该作者
data、idata、xdata和pdata在计算机存储中扮演着不同的角色,它们分别代表不同的存储区域或数据类型

使用特权

评论回复
9
cashrwood| | 2025-4-10 00:47 | 只看该作者
当需要访问外部数据存储器,但又不需要使用整个 64KB 空间时,pdata 可用于存储临时数据

使用特权

评论回复
10
jimmhu| | 2025-4-10 01:01 | 只看该作者
data:由于其存储在单片机内部数据存储器的低 128 字节,且可直接寻址,所以访问速度是最快的。这是因为它直接连接到单片机的内部总线,能迅速地对存储单元进行读写操作。
idata:虽然也是在内部数据存储器,但采用间接寻址方式,所以访问速度稍慢于 data。间接寻址需要额外的步骤来确定存储单元的地址,从而增加了访问时间。
xdata:访问速度最慢。因为它位于外部数据存储器,需要通过外部总线来进行数据传输,这就涉及到更多的硬件操作和信号传输时间,会产生一定的延时。
pdata:访问速度比 xdata 快。由于它只访问外部数据存储器的一个分页区域,使用的地址线较少,减少了寻址和数据传输的复杂度。

使用特权

评论回复
11
chenci2013| | 2025-4-10 15:04 | 只看该作者
xdata范围: 外部扩展RAM,一般指外部0x0000-0xFFFF空间。

使用特权

评论回复
12
rosemoore| | 2025-4-10 17:42 | 只看该作者
data最快,idata稍慢,xdata最慢,pdata在特定情况下可能与idata相同。

使用特权

评论回复
13
albertaabbot| | 2025-4-10 22:25 | 只看该作者
优先使用 data‌:对速度要求高的关键变量。
‌idata 补充 data‌:当低128字节不足时,利用高128字节(需硬件支持)。
‌xdata 存放大数据:如日志、图像等,但需注意速度瓶颈。
‌pdata 分页优化:需频繁切换外部数据块时,可减少DPTR操作开销。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

66

主题

1507

帖子

0

粉丝