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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)的高級(jí)語(yǔ)言編程FranklinC51簡(jiǎn)介

          單片機(jī)的高級(jí)語(yǔ)言編程FranklinC51簡(jiǎn)介

          作者: 時(shí)間:2016-11-28 來源:網(wǎng)絡(luò) 收藏
          一、變量的定義原則:
          其一、總是使用盡可能最小的數(shù)據(jù)類型;
          對(duì)8位機(jī),顯然對(duì)“char”類型的對(duì)象的操作比對(duì)“int”或“long”類型的對(duì)象方便得多。C51編譯器直接支持所有字符操作。例如:兩個(gè)“char”類型對(duì)象相乘與“MUL AB”8051指令相符合。如果用“int”型完成同樣運(yùn)算,則需要調(diào)用庫(kù)函數(shù)。
          其二、只要有可能,使用“unsigned”數(shù)據(jù)類型。
          8051系列單片機(jī)不直接支持有符號(hào)數(shù)的運(yùn)算,為此,編譯器必須產(chǎn)生與之相關(guān)的更多的代碼以解決問題。若使用無符號(hào)數(shù)據(jù)類型,產(chǎn)生的代碼要少得多。
          在頭文件reg51.h中有8051所有SFR及可位尋址位的定義,如:
          #include //源文件開始寫
          //………….
          P1=0x10; //在編程中可使用
          TMOD=0x1;
          TR0=1;
          EA=1;
          減少變量占有的空間的方式:
          # 利用#define 定義只讀的常量
          # 使用位域
          # 使用聯(lián)合
          1、存儲(chǔ)空間中的對(duì)象定位
          8051單片機(jī)的存儲(chǔ)器是哈佛結(jié)構(gòu),即程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器分開,并有各自的尋址機(jī)構(gòu)和方式。因?yàn)镕ranklin C51是面向8051系列單片機(jī)及硬件控制系統(tǒng)的開發(fā)工具。它定義的任何數(shù)據(jù)類型必須以一定的數(shù)據(jù)方式定位在8051 的某一存儲(chǔ)區(qū)中。該編譯器將變量、常量定義成不同的存儲(chǔ)類型,把它們定位在不同的存儲(chǔ)區(qū)中。類型和區(qū)域的對(duì)照如下:
          code :程序存儲(chǔ)區(qū)(64KB),由MOVC A, @A+DPTR訪問
          xdata: 外部數(shù)據(jù)存儲(chǔ)區(qū) (64KB), 由MOVX A, @DPTR訪問
          pdata: 分頁(yè)(256B)外部數(shù)據(jù)存儲(chǔ)區(qū), 由MOVX A,@Ri訪問
          data: 直接尋址內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)(128B), 訪問變量速度快
          bdata: 可位尋址的內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū), 允許位與字節(jié)混合訪問(16B).
          idata: 間接尋址內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)(128B)
          例:
          #include
          #define uchar unsigned char
          #define uint unsigned int
          bit flag;布爾值
          code uchar table[]={1,2,3,"help",oxff};
          idata uint temp;
          data char vra; /char data var ; 等價(jià),盡量用后一種
          static unsigned long xdata array[100]; 靜態(tài)變量
          extern float idata x,y,z; 外部變量
          uint pdata dimension;
          uchar xdata vector[10][4];
          char bdata flags;
          sbit flag_0=flags^0;
          sbit p_1=p1^1;
          定義時(shí)如果省略存儲(chǔ)類型,存儲(chǔ)模式將自動(dòng)決定變量的默認(rèn)類型如下:
          一般指針”SMALL:參數(shù)和局部變量放入可直接尋址的內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)(默認(rèn)data)
          COMPACT:參數(shù)和局部變量放入分頁(yè)外部數(shù)據(jù)存儲(chǔ)區(qū)(默認(rèn)pdata)
          LARGE:參數(shù)和局部變量放入外部數(shù)據(jù)存儲(chǔ)區(qū)(默認(rèn)xdata)
          在C語(yǔ)言中變量和函數(shù)的存儲(chǔ)屬性關(guān)系到它們的可見性和生存期(即作用域和時(shí)限)。存儲(chǔ)屬性分三類:auto自動(dòng) extern外部 static靜態(tài)。
          Franklin C51支持“基于存儲(chǔ)器的指針”和“一般指針”。
          基于存儲(chǔ)器的指針:由C源程序中的存儲(chǔ)類型決定它的存儲(chǔ)單元數(shù)。用這種指針可高效訪問對(duì)象,且只要1~2個(gè)字節(jié)。
          一般指針:需要3個(gè)字節(jié)(2個(gè)字節(jié)偏移,1個(gè)字節(jié)存儲(chǔ)類型)。
          各類指針變量:
          float
          p 3字節(jié)長(zhǎng) 指向8051存儲(chǔ)區(qū)中的“float”
          char data
          dp 1字節(jié) ------ “data”存儲(chǔ)區(qū)中的“char”
          int idata
          ip 1字節(jié) ------ “idata” 存儲(chǔ)區(qū)中的“int”
          long pdata
          pp 1字節(jié) ------
          char xdata
          xp 2字節(jié) ------
          int code
          cp 2字節(jié) -------
          2、 動(dòng)態(tài)和靜態(tài)變量
          動(dòng)態(tài)變量:自動(dòng)變量
          靜態(tài)變量:外部變量(extern),靜態(tài)變量(static)
          3、全局和局部變量
          靜態(tài)局部變量
          自動(dòng)變量(說明符auto可缺省)
          靜態(tài)全局變量
          外部變量
          例:
          char xdata
          px;指針自身在默認(rèn)區(qū)(取決于存儲(chǔ)模式)
          char xdata
          data pdx ;指針明確位于內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)(data)
          data char xdata
          pdx ;同上


          評(píng)論


          技術(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); })();