什么是绝对地址
绝对地址是指存储控制部件能够识别的主存单元编号(或字节地址),也就是主存单元的实际地址。
在定义上,存储器的绝对地址是指在通信、计算机和数据处理系统中的一个地址方案。这个地址直接鉴别一个存储单元而不使用相关媒体,例如,一个基站地址或相关地址。
绝对地址即为互联网上的独立地址,在任何网站通过这个地址可以直接到达目标网页。包含主域名和目录地址。网络中的绝对地址是指带有网站域名的网页地址。含有绝对地址的网页能够被搜索引擎更好的收录。
绝对地址的访问
片内RAM的使用、片外RAM及I/O口的使用又称为绝对地址访问。C51提供了两种比较常用的访问绝对地址的方法。
1.绝对宏
C51语言编译器提供了一组宏定义来对51单片机的code、data、pdata和xdata空间进行绝对寻址。在程序中,用“#include<absacc.h>”即可使用其中声明的宏来访问绝对地址,包括CBYTE、CWORD、DBYTE、DWORD、XBYTE、XWORD、PBYTE、PWORD,具体使用方法参考absacc.h头文件。其中:
CBYTE——以字节形式对code区寻址;
CWORD——以字形式对code区寻址;
DBYTE——以字节形式对data区寻址;
DWORD——以字形式对data区寻址;
XBYTE——以字节形式对xdata区寻址;
XWORD——以字形式对xdata区寻址;
PBYTE——以字节形式对pdata区寻址;
PWORD——以字形式对pdata区寻址。
例如:
#include<absacc.h>
rval=CBYTE //指向程序存储器0002H地址
rval=XBYTE //指向外部RAM的0002H地址
2._at_关键字
可以使用关键字_at_对指定的存储器空间的绝对地址进行访问,格式如下:
数据类型标识符 变量名 _at_地址常数
例如:
struct idata list _at_ 0x40;//指定list结构从内部RAM的40H开始
char xdata text _at_ OxE000;//指定text数组从外部RAM的E000H单元开始
【例】将片外RAM6000H开始的连续10个单元清0。
程序如下:
#include<absacc.h>
unsignedcharxdatabuffer _at_ 0x6000;
voidmain(void)
{unsignedcharindex;
for(index=0;index<i0;index++)
{ buffer=0;}
}
如果是将片内RAM60H开始的连续10个单元清0,则可以编程如下:
#include<absacc.h>
unsigned char data buffer _at_ 0x60;
voidmain(void)
{unsignedcharindex;
for(index=0;index<:i0;index++)
{buffer=0;}
}
绝对地址和相对地址的区别
绝对地址:互联网上的独立地址,在任何网站通过这个地址可以直接到达目标网页。包含主域名和目录地址。
相对地址:相对于网站的地址,当域名改变时,相对地址的“绝对地址”也发生变化。
相对地址是指相对于当前网页的地址。假如有一个如下图所示的文件系统结构(圆圈表示文件夹,矩形表示文件):
假设文件3.htm为当前网页,那么文件1.htm的相对地址为:../A/1.htm。其中“../”表示上一级目录。
假设文件4.htm为当前网页,那么文件2.htm的相对地址为:../../A/2.htm,而文件6.htm的地址则是:../6.htm,文件5.htm的相对地址则是:5.htm。
假设文件6.htm为当前网页,那么文件4.htm的相对地址为:D/4.htm。
总之,相对地址是指从当前网页所在的文件夹开始的网页地址。
在制作网站时,大多数情况下使用的是相对地址。这样,将整个网站复制到任何位置,都不需要重新调整地址。