色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > C51—運算量(重點:特殊功能寄存器變量、位變量

          C51—運算量(重點:特殊功能寄存器變量、位變量

          作者: 時間:2016-11-25 來源:網絡 收藏

          3)LARGE模式

          LARGE模式稱為大編譯模式,在LARGE模式下,編譯時函數參數和變量被默認在片外RAM的64KB空間了,存儲器類型為xdata。

          例如:

          #pragma small //變量的存儲模式為SMALL

          char k1; //存儲類型為data

          int xdata m1; //存儲類型xdata

          #pragma compact //變量的存儲模式為COMPACT

          char k2;

          int xdata m2;

          int func1(int x1,int y1) large //函數的存儲模式為LARGE

          {

          return(x1+y1);

          }

          int func2(int x2,int y2) //編譯的存儲模式隱含為SMALL,沒有指明模式,隱含SMALL

          {

          return(x2-y2);

          }

          4、絕對地址的訪問(這里才是重點中的重點啊~~~)

          在C51中,可以通過變量的形勢訪問51單片機的存儲器,也可以通過絕對地址來訪問存儲器。三種方法:

          1)使用C51運行庫中預定義宏(就是調用#include"absacc.h")

          C51編譯器提供了一組宏定義來對51單片機的code、data、pdata和xdata空間進行絕對尋址!

          規(guī)定只能以無符號數方式訪問,定義了8個宏定義,其函數原型如下:

          #define CBYTE((unsigned char volatile*)0x50000L) //CBYTE以字節(jié)形勢對code區(qū)尋址

          #define DBYTE((unsigned char volatile*)0x40000L)//data區(qū)

          #define PBYTE((unsigned char volatile*)0x30000L) //pdata區(qū)

          #define XBYTE((unsigned char volatile*)0x20000L) //xdata區(qū)

          #define CWORD(unsigned int volatile*)0x50000L) //以字形式對code區(qū)尋址

          #define DWORD(unsigned int volatile*)0x40000L)

          #define PWORD(unsigned int volatile*)0x30000L)

          #define XWORD(unsigned int volstile*)0x20000L)

          例如:

          #include"absacc.h"

          #include"reg52.h"

          typedef unsigned char uchar;

          typedef unsigned intuint;

          void main()

          {

          uchar var1;

          uintvar2;

          var1=XBYTE[0x0005]; //XBYTE[0x0005]訪問片外RAM的0005字節(jié)單元

          var2=XWORD[0x0002];//XWORD[0x0002]訪問片外RAM的0002字單元

          .

          .

          .

          while(1);

          }

          2)通過指針訪問

          采用指針的訪問的方法,可以在C51程序中對任意指定的存儲器單元進行訪問。

          typedef unsigned char uchar;

          typedef unsigned int uint;

          void func()

          {

          uchar data var1;

          uchar pdata *dp1; //定義一個指向pdata區(qū)的指針dp1

          uint xdata *dp2; //定義一個指向xdata區(qū)的指針dp2,為uint型

          uchar data*dp3; //定義一個指向data區(qū)的指針dp3,為char型

          dp1=0x30; //dp1指針賦值,指向pdata區(qū)的30H單元

          dp2=0x1000; //dp2指針賦值(uint型),指向xdata區(qū)的1000H單元

          *dp1=0xff;//將數據0xff送到片外RAM30H單元

          *dp2=0x1234; //將數據0x1234(由于是uint型,你懂得~~~),送到片外RAM1000H單元

          dp3=&var1; //dp3指針指向data區(qū)的var1變量

          *dp3=0x20;//給變量var1賦值0x20

          }

          3)使用C51擴展關鍵字 _at_ (這個用的最多了~~~

          總算完了,我真的要累死了~~~~擦擦擦擦啊

          一般格式:

          [存儲類型] 數據類型說明 變量名 _at_ 地址常量;

          其中,存儲類型為data、bdata、idata、pdata、xdata等C51能識別的數據類型,如果省略,則會按照存儲模式規(guī)定的默認存儲類型確定變量的存儲區(qū)域(這里又用到上邊的了);數據類型為C51支持的數據類型;地址常數用于指定變量的絕對地址,必須位于有效的存儲器空間之內;使用_at_定義的變量必須為全局變量。

          例如:

          typedef unsigned char uchar;

          typedef unsigned int uint;

          data uchar x1 _at_ 0x40; //在data區(qū)中定義字節(jié)變量x1,地址為0x40H,這里是uchar

          xdata uint x2 _at_ 0x2000; //在xdata區(qū)中定義字變量x2,它的地址為0x2000H,這里是uint

          我感覺我真的不想再寫了,累死了~~~擦

          不過完工了,爽啊~~解脫



          上一頁 1 2 下一頁

          關鍵詞: C51運算量特殊功能寄存器變量位變

          評論


          相關推薦

          技術專區(qū)

          關閉