在51系列中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,建议少用。但也有他的优点,具体用法属于中级问题,这里不提。
单片机C语言unsigned char code table[]
程序可以简单的分为code(程序)区,和data (数据)区,code区在运行的时候是不可以更改的,data区放全局变量和临时变量,是要不断的改变的,cpu从code区读取指令,对data区的数据进行运算处理,因此code区存储在什么介质上并不重要,象以前的计算机程序存储在卡片上,code区也可以放在rom里面,也可以放在ram里面,也可以放在flash里面(但是运行速度要慢很多,主要读flash比读ram要费时间),因此一般的做法是要将程序放到flash里面,然后load到 ram里面运行的;DATA区就没有什么选择了,肯定要放在RAM里面,放到rom里面改动不了。
bdata如何使用它呢?
若程序需要8个或者更多的bit变量,如果你想一次性给8个变量赋值的话就不方便了,(举个例子说说它的方便之处,想更深入的了解请在应用中自己琢磨)又不可以定义bit数组,只有一个方法
sbit MODE_7 = MODE^7;
sbit MODE_6 = MODE^6;
sbit MODE_5 = MODE^5;
sbit MODE_4 = MODE^4;
sbit MODE_3 = MODE^3;
sbit MODE_2 = MODE^2;
sbit MODE_1 = MODE^1;
sbit MODE_0 = MODE^0;
8个bit变量MODE_n 就定义好了
这是定义语句,Keilc 的特殊数据类型。记住一定要是sbit
不能 bit MODE_0 = MODE^0;
赋值语句要是这么些C语言就视为异或运算
转载于:http://blog.sina.com.cn/s/blog_4daf4df90100i5ej.html
如有转载请说明,转载出为上方链接即可(非本页链接)。
reposted by pillar peng - 2015.2.26 - 13:30
--------------------------------------------分割线----------------------------------------------------------------------------------
modified by pillar peng -2015.2.28 - 10:57
这里有更加详细的说明,不过是英文版,但是有图解而且单词也不难,一般的应该都可以看懂。
这里贴出原来的链接:
| |||
Home > LX51 Introduction > Memory Classes > NXP 51MX Devices |
NXP 51MX Devices
The NXP 51MX architecture provides a universal memory map that includes all memory classes in a single, contiguous 16MB address space.
BIT, DATA, IDATA, and EDATA
The BIT, DATA, and IDATA memory classes comprise the on-chip memory of the 51MX architecture. They are contained in the EDATA memory class.
CODE, ECODE, EDATA, XDATA, and HDATA
The NXP 51MX address space is comprised of 8 MBytes of program memory (theECODE memory class) and 8 MBytes of data memory (the HDATA memory class).
The ECODE memory class contains the CODE memory class (which is still limited to 64 KBytes) and up to 64 code banks that may be used for code banking applications.
The HDATA memory class includes XDATA (which is still limited to 64 KBytes), EDATA(which is limited to 64 KBytes), and up to 8 MBytes of far variables.