C51中的data和idata和code有什么区别

先来个总结:code用的是ROM空间,data类用的是RAM空间

 

下面是总结的资料:

51单片机有以下几个内存模块组成

ROM或者FLASH就不说了。

RAM有

---内部RAM 的 低 128字节(00-7F)

---内部RAM的 高 128字节(80-FF)---[80C51没有这段空间]

---特殊功能寄存去(SFR)(80-FF)

---外部RAM 64K(0000-FFFF)

data表示的是内部RAM的128字节,可以直接寻址,速度比较快

idata表示内部RAM128字节,只能是间接寻址,速度比data里的数据要慢

此外,还有pdata是 外部 RAM中的256个,也就是外部RAM中的00-FF,只能MOVX间接寻址,但是,因为可以用R0做为指针,所以,速度与idata是一样的。

xdata是外部RAM的全部,也可以包括前256个,也就是说,外部RAM前256个,可以用pdata和xdata定义,都行,只能是MOVX和DPTR联合寻址,速度最慢。

 

 

 

典型的51单片机内部RAM是256B,8根地址线(8位),这256B共分为高128位和低128位,用户使用的区域是低128位(即00H~7FH),通过程序计数器PC寻址。

51单片机的外部RAM可扩展到64KB,16根地址线(16位),使用DPTR作为外部RAM的寻址指针。

程序存储器:也就是ROM,是存放用户程序(如汇编程序或C程序)的地方,典型的51单片机内部ROM为4KB,若是使用外部ROM可以扩展到64KB。

数据存储器:是存放用户程序运行过程中的中间结果或者运算结果,也就是内部RAM或外部RAM。

MOV: 单片机内部RAM的数据传送指令

MOVX: 单片机外部RAM的数据传送指令

 

 

定义数组时在前面加上“code”和“data
数组前不加“code”或“data”,则默认将数组存放在程序存储器中;
code 指定数据是存储在代码区,数据是在编程的时候跟代码一起写入代码存储器,运行过程中不能改变;
xdata 指定数据是存储在外部数据存储器了;
data 指定数据存储在内部低128字节数据存储器里,如果变量不指定存储位置,默认就是data型,这部分存储器寻址速度最快;
idata 指定数据存储在内部低256字节数据存储器里,但51只有128字节内部RAM,52才有256字节;
pdata 指定数据存储在外部低256字节数据存储器里,这时候寻址用8位寄存器R0和R1,而不用16位的DPTR,寻址速度比xdata快。

你可能感兴趣的:(C51中的data和idata和code有什么区别)