在利用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. java二进制文件复制

    package com.starain.io; import java.io.BufferedInputStream;import java.io.BufferedOutputStream;impor ...

  2. (1.1.9)UVA 10930 A-Sequence(模拟)

    /* * UVA_10930_1.cpp * * Created on: 2013年10月7日 * Author: Administrator */ #include <iostream> ...

  3. 【建模】UML类关系分析

    一.UML类关系分析 1.关联(asociation) 一般是一方拥有另一方对象的指针.箭头的方向是访问方向. 2.聚合(Aggregation)和组合(Composition) 聚合和关联一般不做区 ...

  4. Android 自定义CheckBox样式

    1.首先在drawable文件夹中添加drawable文件checkbox_style.xml. <selector xmlns:android="http://schemas.and ...

  5. HDU 5266 pog loves szh III (线段树+在线LCA转RMQ)

    题目地址:HDU 5266 这题用转RMQ求LCA的方法来做的很easy,仅仅须要找到l-r区间内的dfs序最大的和最小的就能够.那么用线段树或者RMQ维护一下区间最值就能够了.然后就是找dfs序最大 ...

  6. SHELL网络爬虫实例剖析--转载

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://nolinux.blog.51cto.com/4824967/1552472 前天 ...

  7. Environment Configuration Files

    Environment Configuration Files When a user logs in, an environment is created for that user automat ...

  8. 触摸事件 Touch MotionEvent ACTION

    MotionEvent简介 当用户触摸屏幕时,将创建一个MontionEvent对象,MotionEvent包含了关于发生触摸的位置.时间信息,以及触摸事件的其他细节. 获取MontionEvent对 ...

  9. WebBrowser控件使用相关

    修改WebBrowser控件的内核解决方案 http://www.cnblogs.com/sung/p/3391264.html C#中的WebBrowser控件的使用 http://www.cnbl ...

  10. 定义Foo() 函数,弹出对话框提示当前选中的是第几个单选框

    function foo(){ var ele = document.getElementsByName("radioElement"); for(var i = 0;i<e ...