在利用keil进行8051单片机编程的时,常常需要进行绝对地址进行访问.特别是对硬件操作,如DA AD 采样 ,LCD 液晶操作,打印操作.等等.
C51提供了三种访问绝对地址的方法: 
1. 绝对宏: 
    在程序中,用“#include<absacc.h>”即可使用其中定义的宏来访问绝对地址,包括: 
CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD 
具体使用可看一看absacc.h便知

例如:

#include<absacc.h>

#define ADstart  XBYTE[0x8000]        //总线方式访问AD

#define ADL     XBYTE[0x8000]

#define ADH     XBYTE[0x8001]

rval=CBYTE[0x0002];指向程序存贮器的0002h地址 
rval=XWORD [0x0002];指向外RAM的0004h地址

2. _at_关键字 
直接在数据定义后加上_at_ const即可,但是注意: 
(1)绝对变量不能被初使化; 
(2)bit型函数及变量不能用_at_指定。

例如:

idata struct link list _at_ 0x40;指定list结构从40h开始。 
xdata char text[25b] _at_0xE000;指定text数组从0E000H开始 
提示:如果外部绝对变量是I/O端口等可自行变化数据,需要使用volatile关键字进行描述,请参考absacc.h。

3. 连接定位控制 
    此法是利用连接控制指令code xdata pdata \data bdata对“段”地址进行,如要指定某具体变量地址,则很有局限性,不作详细讨论。

附:(c51)

/*-------------------------------------------------------------------------- 
ABSACC.H

Direct access to 8051, extended 8051 and Philips 80C51MX memory areas. 
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc. 
All rights reserved. 
--------------------------------------------------------------------------*/

#ifndef __ABSACC_H__ 
#define __ABSACC_H__

#define CBYTE ((unsigned char volatile code *) 0) 
#define DBYTE ((unsigned char volatile data *) 0) 
#define PBYTE ((unsigned char volatile pdata *) 0) 
#define XBYTE ((unsigned char volatile xdata *) 0)

#define CWORD ((unsigned int volatile code *) 0) 
#define DWORD ((unsigned int volatile data *) 0) 
#define PWORD ((unsigned int volatile pdata *) 0) 
#define XWORD ((unsigned int volatile xdata *) 0)

#ifdef __CX51__ 
#define FVAR(object, addr) (*((object volatile far *) (addr))) 
#define FARRAY(object, base) ((object volatile far *) (base)) 
#define FCVAR(object, addr) (*((object const far *) (addr))) 
#define FCARRAY(object, base) ((object const far *) (base)) 
#else 
#define FVAR(object, addr) (*((object volatile far *) ((addr)+0x10000L))) 
#define FCVAR(object, addr) (*((object const far *) ((addr)+0x810000L))) 
#define FARRAY(object, base) ((object volatile far *) ((base)+0x10000L)) 
#define FCARRAY(object, base) ((object const far *) ((base)+0x810000L)) 
#endif

#endif

附:(c166)

/*-------------------------------------------------------------------------- 
ABSACC.H

Direct access to 166 memory areas for C166/EC++ Version 5. 
Copyright (c) 1992-2004 Keil Elektronik GmbH and Keil Software, Inc. 
All rights reserved. 
--------------------------------------------------------------------------*/

#ifndef __ABSACC_H__ 
#define __ABSACC_H__

#if (__MODEL__ == 0) 
#define MVAR(object, addr) (*((object volatile *) (addr))) 
#define MARRAY(object, base) ((object volatile *) (base)) 
#else 
#define MVAR(object, addr) (*((object volatile far *) (addr))) 
#define MARRAY(object, base) ((object volatile far *) (base))

#define HVAR(object, addr) (*((object volatile huge *) (addr))) 
#define HARRAY(object, base) ((object volatile huge *) (base)) 
#define XVAR(object, addr) (*((object volatile xhuge *) (addr))) 
#define XARRAY(object, base) ((object volatile xhuge *) (base)) 
#endif

#endif

转载自:

http://www.dz863.com/Microprocessors/MCS-8051/keil-C51-CBYTE.htm

参考资料:

1)Cx51 User's Guide: XBYTE

http://www.keil.com/support/man/docs/c51/c51_xbyte.htm

51单片机C语言学习笔记4:keil C51绝对地址访问的更多相关文章

  1. 51单片机C语言学习笔记6:51单片机C语言头文件及其使用

    很多初学单片机者往往对C51的头文件感到很神秘,而为什么要那样写,甚至有的初学者喜欢问,P1口的P为什么要大写,不大写行不行呢?其实这个是在头文件中用sfr定义的,现在定义好了的是这样的 sfr P1 ...

  2. 51单片机C语言学习笔记3: 存储器结构

    MCS-51单片机在物理结构上有四个存储空间: 1.片内程序存储器2.片外程序存储器3.片内数据存储器4.片外数据存储器 但在逻辑上,即从用户的角度上,8051单片机有三个存储空间: 1.片内外统一编 ...

  3. 51单片机C语言学习笔记5:include的区别

    #include <iostream.h>#include "myfile_h" #include 是预处理器标识符.<>表示是标准的工程.标准的头文件.查 ...

  4. 51单片机C语言学习笔记7:关于.c文件和.h文件

    1)h文件作用 1 方便开发:包含一些文件需要的共同的常量,结构,类型定义,函数,变量申明: 2 提供接口:对一个软件包来说可以提供一个给外界的接口(例如: stdio.h). 2)h文件里应该有什么 ...

  5. 51单片机C语言学习笔记8:单片机C51编程规范

    1.单片机C51编程规范- 前言  为了提高源程序的质量和可维护性,从而最终提高软件产品生产力,特编写此规范. 2.单片机C51编程规范-范围 本标准规定了程序设计人员进行程序设计时必须遵循的规范.本 ...

  6. keil C51绝对地址访问

    在利用keil进行8051单片机编程的时,常常需要进行绝对地址进行访问.特别是对硬件操作,如DA AD 采样 ,LCD 液晶操作,打印操作.等等.C51提供了三种访问绝对地址的方法: 1. 绝对宏 在 ...

  7. HTML语言学习笔记(会更新)

    # HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...

  8. 2017-04-21周C语言学习笔记

    C语言学习笔记:... --------------------------------- C语言学习笔记:学习程度的高低取决于.自学能力的高低.有的时候生活就是这样的.聪明的人有时候需要.用笨的方法 ...

  9. 2017-05-4-C语言学习笔记

    C语言学习笔记... ------------------------------------ Hello C语言:什么是程序:程序是指:完成某件事的既定方式和过程.计算机中的程序是指:为了让计算机执 ...

随机推荐

  1. UVa 10617 Again Palindromes / 记忆化搜索

    删除若干个字母后 剩下的是回文串 求有多少个 记忆化搜索 dp[i][j]表示i j 之间有多少个 其实递推也可以的 long long #include <stdio.h> #inclu ...

  2. CTime,Systemtime的比较还有转换成日期格式。

    vc为我们提供了两种日期型的变量. 一种是CTime.他的缺点就是年份只支持到2038年,以后的日期就不支持啦,如果你的项目有20-30年的寿命,你就选择使用SYSTEMTIME.这个时间函数来进行比 ...

  3. SKEffectNode类

    继承自 SKNode:UIResponder:NSObject 符合 NSCoding(SKNode)NSCopying(SKNode)NSObject(NSObject) 框架  /System/L ...

  4. android获得屏幕高度和宽度

    获取屏幕的宽度与高度有以下几种方法: .WindowManager wm = (WindowManager) getContext()                     .getSystemSe ...

  5. ApiDemos--&gt;Views-lists-slow adapter学习

    今天来依照apidemos提供的方法来实现slow loading的效果. 简单说下实现方法: 实现ListView.OnScrollListener ,监听到手势滑动的情况,当处于滚动状态时,将新显 ...

  6. 使用CSS为内容设定特定的鼠标样式(cursor)介绍

    相信大家都知道我们的鼠标在网页中不同的元素中有不同的显示(例如 a 元素就显示为“箭头指针”),但是其实我们还可以自定义这些有趣的东西哦!今天“畅想资源”就来教大家如何使用CSS为内容设定特定的鼠标样 ...

  7. OD: DEP & Ret2Libc

    Data Execution Prevention,数据执行保护,专门用来弥补计算机对数据和代码混淆这一天然缺陷. DEP 的原理是将数据所在的内存页(默认的堆.各种堆栈页.内存池页)标记为不可执行, ...

  8. Android学习手记(2) Activity生命周期

    1. 单个Activity的生命周期 当只有一个Activity的时候, 首先执行onCreate->onStart->onResume. 这时, 窗口便显示在屏幕上了. 然后我们按返回键 ...

  9. 使用URL读取网络图片资源

    URL(Uniform Resource Locator) 对象代表统一资源定位器. 代码如下: public class MainActivity extends ActionBarActivity ...

  10. 用MS自带的VS构建joint语句

    在其中一个表上,右键,选择"New Query",弹出"Add Table"对话框,将待joint的两个表Add,并选择相应字段,则会自动构建joint语句,其 ...