新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機頭文件的作用

        單片機頭文件的作用

        作者: 時間:2016-11-29 來源:網絡 收藏
        剛剛在看52單片機和GPS通信程序的時候,看到了一個函數,absacc.h,貌似從來沒有遇到過,百度了一下,結合自己的理解,整理如下:

        http://blog.sina.com.cn/s/blog_4f8cdc9e0100g1qp.html《51單片機keilC中頭文件absacc.h作用》

        本文引用地址:http://www.104case.com/article/201611/323349.htm

        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



        關鍵詞: 單片機頭文

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 鲁山县| 桐柏县| 金沙县| 延庆县| 达尔| 蓝山县| 当雄县| 宝山区| 禄丰县| 江城| 怀宁县| 平利县| 阿合奇县| 临漳县| 临夏市| 大姚县| 梅州市| 镇平县| 崇仁县| 赤峰市| 清徐县| 大方县| 潜江市| 卓资县| 拉孜县| 栾川县| 循化| 尼勒克县| 綦江县| 太仓市| 渭南市| 克什克腾旗| 新绛县| 桂林市| 女性| 涡阳县| 项城市| 措美县| 文化| 金湖县| 潢川县|