<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > C51—運(yùn)算量(重點(diǎn):特殊功能寄存器變量、位變量

          C51—運(yùn)算量(重點(diǎn):特殊功能寄存器變量、位變量

          作者: 時(shí)間:2016-11-25 來源:網(wǎng)絡(luò) 收藏

          3)LARGE模式

          LARGE模式稱為大編譯模式,在LARGE模式下,編譯時(shí)函數(shù)參數(shù)和變量被默認(rèn)在片外RAM的64KB空間了,存儲(chǔ)器類型為xdata。

          例如:

          #pragma small //變量的存儲(chǔ)模式為SMALL

          char k1; //存儲(chǔ)類型為data

          int xdata m1; //存儲(chǔ)類型xdata

          #pragma compact //變量的存儲(chǔ)模式為COMPACT

          char k2;

          int xdata m2;

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

          {

          return(x1+y1);

          }

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

          {

          return(x2-y2);

          }

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

          在C51中,可以通過變量的形勢(shì)訪問51單片機(jī)的存儲(chǔ)器,也可以通過絕對(duì)地址來訪問存儲(chǔ)器。三種方法:

          1)使用C51運(yùn)行庫中預(yù)定義宏(就是調(diào)用#include"absacc.h")

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

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

          #define CBYTE((unsigned char volatile*)0x50000L) //CBYTE以字節(jié)形勢(shì)對(duì)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) //以字形式對(duì)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程序中對(duì)任意指定的存儲(chǔ)器單元進(jìn)行訪問。

          typedef unsigned char uchar;

          typedef unsigned int uint;

          void func()

          {

          uchar data var1;

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

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

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

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

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

          *dp1=0xff;//將數(shù)據(jù)0xff送到片外RAM30H單元

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

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

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

          }

          3)使用C51擴(kuò)展關(guān)鍵字 _at_ (這個(gè)用的最多了~~~

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

          一般格式:

          [存儲(chǔ)類型] 數(shù)據(jù)類型說明 變量名 _at_ 地址常量;

          其中,存儲(chǔ)類型為data、bdata、idata、pdata、xdata等C51能識(shí)別的數(shù)據(jù)類型,如果省略,則會(huì)按照存儲(chǔ)模式規(guī)定的默認(rèn)存儲(chǔ)類型確定變量的存儲(chǔ)區(qū)域(這里又用到上邊的了);數(shù)據(jù)類型為C51支持的數(shù)據(jù)類型;地址常數(shù)用于指定變量的絕對(duì)地址,必須位于有效的存儲(chǔ)器空間之內(nèi);使用_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 下一頁

          關(guān)鍵詞: C51運(yùn)算量特殊功能寄存器變量位變

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();