原创 C51编程中对单片机绝对地址访问的两种方法

2009-8-16 00:16 1153 4 4 分类: MCU/ 嵌入式

发布: 2009-4-04 19:47 |  作者: hnrain |   来源: hei51 |  查看: 36次



S-@\'ui.H iL\1v0在进行8051单片机应用系统程序设计时,编程都往往少不了要直接操作系统的各个存储器地址空间。C51程序经过编译之后产生的目标代码具有浮动地址,其绝对地址必须经过BL51连接定位后才能确定。为了能够在C51程序中直接对任意指定的存储器地址进行操作,可以采用扩展关键字“at”、指针、预定义以及连接定位控制命令。电子园51单片机学习网+a'o+EP I!K,W!kA8G

电子园51单片机学习网z(qvO;I9a]0j

在这些方法中,本人认为最简单而有效的方法是用“ _at_ ”关键字来对指定变量存储器空间绝对地址来指定。一般格式如下:电子园51单片机学习网:q vjXuH0n!r
[存储器类型] 数据类型 标识符 _at_ 地址常数电子园51单片机学习网0vxkfAp

电子园51单片机学习网[oE;pDd2?+p_

其中:

AJ:[X;W:RRv.d0 电子园51单片机学习网0{vI;n]Y/Uq/ZF4d:r

存储器类型 为idata、data、xdata等C51能够识别的所有类型,最好不要省略。

,T VdAZsAR$uW/X0

!T^ ZL:r N)n.O0数据类型 可以用int、long、float等基本类型,当然也可以用数组、结构等复杂数据类型 ,本人认为一般用unsigned int 就可以解决很多问题了。

3~3a,zhJ0 电子园51单片机学习网Lm&tAG

标识符 就是要定义的变量名,编程者自己决定电子园51单片机学习网qSum KBr j

电子园51单片机学习网I }8`9jc;h

地址常数 就是要直接操作的存储器的绝对地址,必须位于有效的存储器空间之内。

Jdt"pO$|0 电子园51单片机学习网sJ%u}`a

注意:不能对变量进行初始化,只能是全局变量,一般不要轻易用,免得出错。电子园51单片机学习网E?\'~!N+Iy a


5ot+Qj`*F8n0举例:

%L\r-q"R_`\0

X| bJ b9AT5P*o2R:j0xdata unsigned int addr1 _at_ 0x8300;电子园51单片机学习网 ]6o~ [ XXwAl

电子园51单片机学习网'X(h Nn o5y

另有一种方法就是要用到一个头文件absacc.h,也不是很难,举个例说明一下就会明白:电子园51单片机学习网f~;o(a Ai!G

电子园51单片机学习网-@%q m;{tk7Za

#include 电子园51单片机学习网6ETj6~c


"R0](yO8ux?P"]-u0XBYTE[0x8300]=0; /*向外部存储器(XDATA)地址0x8300写0电子园51单片机学习网(xq$^ }7J5I

电子园51单片机学习网Vy-tz_1Gh

本人强烈建议用at,这样可能会更好些,还有一点就是不能乱用,因为有些存储器空间不能随便占用,C51编译器已经做其它的用了,而且有些空间单片机本身就做了很重要的作用,如果乱用,很容易出错.

5BJ ]7Wl9D"T0
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
4
关闭 站长推荐上一条 /3 下一条