刚刚在看52单片机和GPS通讯程序的时分,看到了一个函数,absacc.h,形似从来没有遇到过,百度了一下,结合自己的了解,收拾如下:
http://blog.sina.com.cn/s/blog_4f8cdc9e0100g1qp.html《51单片机keilC中头文件absacc.h效果》
http://apps.hi.baidu.com/share/detail/716779《absacc.h库介绍》
http://blog.sina.com.cn/s/blog_5f0187c50100e0nt.html《#include的效果(转)》
就看这几个根本够了,应该能理解这个文件是什么了:
在程序中,用“#include”即可运用其间界说的宏来访问肯定地址,包含:
CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD
例如:
rval=CBYTE[0x0002];指向程序存贮器的0002h地址
rval=XWORD [0x0002];指向外RAM的0004h地址 //WORD是一个字,两个字节,故为0004h
#define COM8255 XBYTE[0X060FF] //后边若呈现COM8255,则单片机端口P0和P2联合输出0X060FF肯定物理地址(地址指向82C55指令寄存器)
#define PA8255 XBYTE[0X000FF] //后边若呈现PA8255,则单片机端口P0和P2联合输出0X000FF肯定物理地址(地址指向82C55的A组端口寄存器)
#define PB8255 XBYTE[0X020FF] //后边若呈现PB8255,则单片机端口P0和P2联合输出0X020FF肯定物理地址(地址指向82C55的B组端口寄存器)
#define PC8255 XBYTE[0X040FF] //后边若呈现PC8255,则单片机端口P0和P2联合输出0X040FF肯定物理地址(地址指向82C55的C组端口寄存器)
同理,在GPS与单片机的通讯中,以下的宏界说就好了解了:
#define gps_LG0 XBYTE[0x0]
#define gps_LG1 XBYTE[0x1000]
#define gps_LG2 XBYTE[0x2000]
#define gps_LG3 XBYTE[0x3000]
#define gps_LAT0 XBYTE[0x4000]
#define gps_LAT1 XBYTE[0x5000]
#define gps_LAT2 XBYTE[0x6000]
#define gps_LAT3 XBYTE[0x7000]
#define UTC0 XBYTE[0xc000]
#define UTC1 XBYTE[0xd000]
#define UTC2 XBYTE[0xe000]
#define UTC3 XBYTE[0xf000]
#define SNum XBYTE[0xa000]
无非便是使用XBYTE来使得界说的宏指向一个实践的物理地址。
在keil中,能够直接看到关于这个文件的界说:
/*————————————————————————–
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