絕對地址的訪問方法

C51提供了3種訪問絕對地址的方法,分別問:絕對宏、關鍵字“_at_”、連接定位控制。

   1.絕對宏

     使用絕對宏時,需要添加投文件“absacc.h”,在該文件中定義的絕對宏有CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD。

    CBYTE:對程序存儲區(code)的字節地址進行訪問。

    例如:i=CBYTE[0X000F];表示i指向程序存儲區的地址爲0x000F的存儲單元,地址範圍爲0X0000~0XFFFF。

    XBYTE:對擴展RAM區的字節地址進行訪問。

    例如:i=XBYTE[0X000F];表示i指向擴展RAM區的地址爲0x000F的存儲單元,地址範圍爲0X0000~0XFFFF。

    PBYTE:對擴展RAM區的字節地址進行訪問。

    例如:i=PBYTE[0X000F];表示i指向擴展RAM區的地址爲0x000F的存儲單元,地址範圍僅爲一頁(256字節)。

    DBYTE:對內部RAM區的字節地址進行訪問。

    例如:i=PBYTE[0X000F];表示i指向內部RAM區的地址爲0x000F的存儲單元。

   以WORD表示的是爲字操做,其餘的跟以上相同。

    2.關鍵字“_at_”

    使用關鍵字“_at_”不能對絕對變量進行初始化,位變量及函數不能用該關鍵字進行指定。使用方法爲直接在定義的數據後邊加上_at_,在加上要指向的絕對地址即可。

    例如:unsigned char data i_at_0x0F;表示i指向內部RAM區域地址爲0x0f的單元;

               unsigned char xdata i_at_0x0F;表示i指向擴展RAM區域地址爲0x0f的單元;

               unsigned char xdata i[10] _at_0x0F;表示數組的起始地址爲擴展RAM區的0x0f單元。

    3.鏈接定位控制

    此法是利用連接控制指令 code xdata pdata \data bdata 對“段”地址進行。如要指定某具體變量地址,則在C模塊中聲明這些變量,並且使用BL51連接器/定位器的定位指令來指定絕對地址。

    例如:要定義一個數組,需要把它定位到xdata區的地址2000h。首先在C模塊中聲明這個數組:

    unsigned char xdata i[100];

    Cx51編譯器爲該C模塊生成一個目標文件,並且包含了一放在xdata存儲區的變量段。因爲它在這個模塊中只有一個變量,那麼i[100];是這個段中僅有的變量,這個段名字爲?XD?模塊名“比如該模塊名爲mokuai.c,則這個段名字爲?XD?ALMCTRL。BL51連接器/定位器允許使用定位指令指定任意一個段的基地址。則可以通過以下指令指定變量的位置:BL51 … mokuai.obj XDATA(?XD?mokuai(2000h))。

    此方法有一定的侷限性,使用相對較少

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章