在利用keil进行8051单片机编程的时,常常需要进行绝对地址进行访问.特别是对硬件操作,如DA AD 采样 ,LCD 液晶操作,打印操作.等等.
C51提供了三种访问绝对地址的方法:
1. 绝对宏:
在程序中,用“#include<absacc.h>”即可使用其中定义的宏来访问绝对地址,包括:
CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD
具体使用可看一看absacc.h便知
例如:
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
分享到:
相关推荐
单片机空间分配看*.M51文件,...要将某变量定位在一绝对位置且要赋初值,此时用 _at_ 不能完成,则如下操作: 在工程中建立一个新的文件,如InitVars.c,在其中对要处理的变量赋初值(假设是code变 量): char code m
Keil C51 高级编程包括绝对地址访问、Keil C51 与汇编的接口、Keil C51 软件包中的通用文件等。绝对地址访问是指在 Keil C51 中访问绝对地址的方法。Keil C51 与汇编的接口是指 Keil C51 中如何与汇编语言进行接口的...
**4.1 绝对地址访问** - **4.1.1 绝对宏** - **4.1.2 _at_ 关键字** - **4.1.3 连接定位控制** **4.2 Keil C51 与汇编的接口** - **4.2.1 模块内接口** - **4.2.2 模块间接口** **4.3 Keil C51 软件包中的通用...
Keil C51 程序中绝对地址的定位、访问等问题 Keil C51 是一款功能强大且广泛应用的微控制器开发环境,绝对地址是 Keil C51 中一个非常重要的概念。绝对地址是一种将变量或函数定位到特定的存储器地址的机制,在实际...
- **绝对地址 include 文件 absacc.h**:提供了访问绝对地址的方法。 - **动态内存分配函数**:位于 stdlib.h 中。 - **缓冲区处理函数**:位于 string.h 中。 - **输入输出流函数**:位于 stdio.h 中。 **第三节 ...
### Keil C51 绝对地址访问方法详解 #### 一、引言 Keil C51 是一种专门用于编写针对8051微控制器系列的C语言编译器。由于8051微控制器具有不同的存储空间,如内部RAM、外部RAM以及程序存储器等,因此,在某些情况...
在 Keil C51 的高级编程中,我们可以使用绝对地址访问来访问内存中的变量和函数,Keil C51 也提供了许多有用的绝对宏和绝对关键字,例如 __at_ 和 __far 等。Keil C51 还提供了许多有用的接口函数,例如模块内接口和...
Keil C51 提供了多种方法来访问绝对地址: - **绝对宏**:如 `_ABS` 宏。 - **_at_ 关键字**:用于在代码中指定变量的绝对地址。 ##### 2. Keil C51 与汇编的接口 Keil C51 支持与汇编语言的混合编程: - **模块内...
- **绝对地址include文件**:如`absacc.h`用于访问特定地址的数据。 - **动态内存分配函数**:位于`stdlib.h`中。 - **缓冲区处理函数**:位于`string.h`中。 - **输入输出流函数**:位于`stdio.h`中。 #### 库函数...
Keil C51的高级编程知识涉及绝对地址访问、C语言与汇编的接口、通用文件的处理、段名协定和程序优化等方面。这些高级特性允许开发者编写更接近硬件的代码,实现性能优化,或与其他语言编写的代码进行接口交互。 ...
绝对地址访问通过宏和_at_关键字实现,便于直接操作硬件寄存器。C51与汇编的接口允许混合编程,模块内接口和模块间接口提供了灵活性。通用文件如动态内存分配函数、启动文件STARTUP.A51以及标准输入输出文件,为...
第四章涉及Keil C51的高级编程技巧,如绝对地址访问(通过绝对宏和_at_关键字实现)、与汇编语言的接口(模块内和模块间的交互)、通用文件的使用(如动态内存分配、启动文件STARTUP.A51、标准输入输出文件和其他...
Keil C51高级编程涉及到绝对地址访问,这可以通过绝对宏或_at_关键字实现。C51与汇编的接口允许混合编程,模块内和模块间的接口处理使得C和汇编代码能够无缝结合。Keil C51软件包中的通用文件如STARTUP.A51启动文件...
安装Keil C51之后,还需访问SONiX官网下载适用于8051 MCU的驱动程序。在SONiX官网上,用户可找到与所选MCU型号配套的SN-Link固件和驱动程序。下载完成后,需要先更新SN-Link固件,然后安装Keil C51对应的SN-Link驱动...
本文档将对 Keil C51 库函数进行详细介绍,包括本征库函数、非本征库函数、绝对地址 include 文件、动态内存分配函数、缓冲区处理函数、输入输出流函数等。 本征库函数 Keil C51 库函数提供了 9 个本征库函数,...
第四章涉及Keil C51的高级编程技巧,包括绝对地址访问、与汇编语言的接口、软件包中的通用文件以及段名协定与程序优化等。这一部分的内容对于提升代码的执行效率和稳定性有直接帮助,特别是对于追求性能极致的嵌入式...
### Keil C51中文教程知识点详述 #### 一、引言与目的 - **书籍定位**:《Keil C51中文教程...总之,《Keil C51中文教程》是一本不可多得的好书,对于希望深入学习和掌握8051单片机开发技术的读者来说,绝对值得一读。