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

          新聞中心

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

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

          作者: 時(shí)間:2016-11-25 來(lái)源:網(wǎng)絡(luò) 收藏
          C51就是c語(yǔ)言for 51單片機(jī),這里邊還是有很多不同的,在c語(yǔ)言里運(yùn)算量相信都知道那叫一個(gè)簡(jiǎn)單,直接int, float就哦了,當(dāng)然這里也可以直接int, float,但是他們還是有不同的,這里就介紹一下運(yùn)算量中的不同!,相同的我就直接跳過(guò)~(果斷不說(shuō)了,不同的對(duì)于以后c語(yǔ)言開(kāi)發(fā)51單片機(jī)還是相當(dāng)有用的,慢慢的就會(huì)體會(huì)到了~~~~~,尤其是特殊功能寄存器變量、位變量、還有絕對(duì)地址的訪問(wèn)!

          C51的運(yùn)算量(只說(shuō)重點(diǎn)~):

          本文引用地址:http://www.ex-cimer.com/article/201611/321506.htm

          C51中的運(yùn)算量主要是常量和變量。

          1、常量

          常量是指在程序執(zhí)行過(guò)程中不能改變的量。在C51中支持整型常量、浮點(diǎn)型常量、字符型常量和字符串型常量。

          1)整型常量

          2)浮點(diǎn)型常量

          3)字符型常量

          4)字符串型常量

          2、變量

          變量就是在程序運(yùn)行過(guò)程中可以改變的量唄。

          一個(gè)變量有兩部分組成:變量名和變量值。每個(gè)變量都有一個(gè)變量名,在存儲(chǔ)器中占用一定的存儲(chǔ)單元,變量的數(shù)據(jù)類(lèi)型不同,占用的存儲(chǔ)單元數(shù)就不同。在存儲(chǔ)單元中存放的內(nèi)容就是變量值。

          1)數(shù)據(jù)類(lèi)型說(shuō)明符

          在定義變量時(shí)必須通過(guò)數(shù)據(jù)類(lèi)型說(shuō)明符來(lái)指明變量的數(shù)據(jù)類(lèi)型,指明變量在存儲(chǔ)器中占用的字節(jié)數(shù)??梢允够緮?shù)據(jù)類(lèi)型說(shuō)明符,也可以是組合數(shù)據(jù)類(lèi)型說(shuō)明符,還可以是typedef或者#define定義的類(lèi)型別名(這里一定要注意typedef一般用來(lái)定義別名!盡量不要用#define啊~~我就不解釋了,太專(zhuān)業(yè)了~~不過(guò)用宏定義就一定要用#define)

          例如:

          typedef unsigned char uchar; //這個(gè)是有;的

          typedef unsigned int uint;

          或者:

          #define uchar unsigned char //這個(gè)就沒(méi)有; 而且它們兩個(gè)定義相反

          #define uint unsigned int

          2)變量名

          變量名有兩種:普通變量和指針變量。他們的區(qū)別是指針變量名前面帶“*”號(hào)。

          3)存儲(chǔ)種類(lèi)

          存儲(chǔ)種類(lèi)是指變量在程序執(zhí)行過(guò)程中的作用范圍。C51變量的存儲(chǔ)種類(lèi)有4種,分別是:自動(dòng)(auto)、外部(extern)、靜態(tài)(static)和存儲(chǔ)器(register)。

          a、auto

          當(dāng)定義它的函數(shù)體或者復(fù)合語(yǔ)句執(zhí)行時(shí),C51才為該變量分配內(nèi)存空間,結(jié)束時(shí)占用的內(nèi)存空間釋放。自動(dòng)變量一般分配在內(nèi)存的堆??臻g中。定義變量時(shí),如果缺省存儲(chǔ)種類(lèi),則默認(rèn)為此。

          b、extern

          被定以后分配固定的內(nèi)存空間,在程序整個(gè)執(zhí)行時(shí)間內(nèi)都有效,知道程序結(jié)束時(shí)才釋放。

          c、static

          使用static定義的變量成為外部變量,可分為內(nèi)部靜態(tài)變量和外部靜態(tài)變量。在函數(shù)體內(nèi)部定義的靜態(tài)變量為內(nèi)部靜態(tài)變量,它在對(duì)應(yīng)的函數(shù)體內(nèi)有效,一直存在,但在函數(shù)體外不可見(jiàn)。這樣不僅使變量在定義它的函數(shù)體外可以被保護(hù),還可以實(shí)現(xiàn)當(dāng)離開(kāi)函數(shù)體時(shí)值不被改變。外部靜態(tài)變量是在函數(shù)體外定義的靜態(tài)變量,它在程序中一直存在,但在定義的范圍之外是不可見(jiàn)的。如在多文件或者多模塊處理中(這點(diǎn)很重要,以后會(huì)用到很多,尤其是多模塊,寫(xiě)大程序必須具備的),外部靜態(tài)變量只在文件內(nèi)部或者模塊內(nèi)部有效。

          d、register

          它定義的變量存放在CPU內(nèi)部的寄存器中,處理速度快,但是數(shù)目有限。

          4)存儲(chǔ)器類(lèi)型

          存儲(chǔ)器類(lèi)型用來(lái)指明變量所處的單片機(jī)的存儲(chǔ)區(qū)域情況。類(lèi)型如下:

          data:直接尋址的片內(nèi)RAM低128B,訪問(wèn)速度快

          bdata:片內(nèi)RAM的可位尋址區(qū)(20H~2FH),允許字節(jié)和位混合訪問(wèn)

          idata:間接尋址訪問(wèn)的片內(nèi)RAM,允許訪問(wèn)全部片內(nèi)RAM

          pdata:用Ri簡(jiǎn)潔訪問(wèn)的片外RAM低256B

          xdata:用DPTR間接訪問(wèn)的片外RAM,允許訪問(wèn)全部64KB片外RAM

          code:程序存儲(chǔ)器ROM64KB

          注意:定義變量時(shí)可以省略“存儲(chǔ)類(lèi)型”,省略時(shí)C51編譯器將按存儲(chǔ)模式默認(rèn)存儲(chǔ)器類(lèi)型。具體的存儲(chǔ)情況啊~~一會(huì)你就知道了,繼續(xù)往下看~~哈

          例如:

          char data var1; //在片內(nèi)RAM低128B定義用直接尋址方式訪問(wèn)的自足型變量var1

          unsigned char bdata var2; //在片內(nèi)RAM位尋址區(qū)(20H~2FH)單元定義可字節(jié)處理和位處理的無(wú)符號(hào)字符型變量var2

          5)特殊功能寄存器變量

          在51單片機(jī)中有很多特殊功能寄存器(不過(guò)這些有些東西還是不需要我們來(lái)關(guān)心的~~~因?yàn)樵谡{(diào)用#include"reg52.h"的時(shí)候里面都給你整好了),通過(guò)這些特殊功能寄存器可以控制51單片機(jī)的定時(shí)器、計(jì)數(shù)器、串口、I/0及其他功能部件(這里很重要的~~~~~~),沒(méi)一個(gè)特殊功能寄存器再片內(nèi)RAM中都對(duì)應(yīng)一個(gè)字節(jié)單元或者兩個(gè)字節(jié)單元。

          在C51中,允許用戶(hù)對(duì)這些特殊功能寄存器進(jìn)行訪問(wèn),但是訪問(wèn)時(shí)需要通過(guò)sfr或者sfr16類(lèi)型說(shuō)明符進(jìn)行定義,定義是需要指明他們所對(duì)應(yīng)的片內(nèi)RAM單元的地址。(你過(guò)關(guān)不用擔(dān)心,直接調(diào)用#include"reg52.h"就哦了~)

          例如:

          sfr PSW=0xd0;

          sfr SCON=0x98;

          sfr16 DPTR=0x82;

          6)位變量

          在C51中,允許用戶(hù)通過(guò)位類(lèi)型符定義位變量。

          位類(lèi)型符有兩個(gè):bit和sbit。可以定義兩種位變量。

          a、bit型位變量

          在格式中可以加上各種修飾,但是要注意存儲(chǔ)器類(lèi)型只能是bdata、data、idata,只能是片內(nèi)RAM的可位尋址區(qū),嚴(yán)格來(lái)說(shuō)只能是bdata。

          例如:

          bit bdata a1;

          b、sbit型位變量

          sbit位類(lèi)型符用于定義在可位尋址字節(jié)或者特殊功能寄存器中的位,定義時(shí)需要指明其位地址,可以使位直接地址,可以是可位尋址變量帶位號(hào),也可以是特殊功能寄存器名帶位號(hào)。

          例如(這些東西都在#include"reg52.h"中):

          sbit OV=0xd2;

          sbit CY=0xd7;

          unsigned char bdata flag;

          sbit flag_0=flag^0; //字節(jié)地址與位號(hào)之間、特殊功能寄存器與位號(hào)之間一般用“^”作間隔

          sfr P1=x090;

          sbit P1_1=P1^1;

          3、存儲(chǔ)模式(個(gè)人感覺(jué)真的用不到這些東東了,因?yàn)槟阊镜囊窍有】梢該Q個(gè)大的,而且還相當(dāng)?shù)谋阋藒~~~,我以前試過(guò)擴(kuò)展一個(gè)RAM和ROM,擦不成啊~~)

          C51編譯器支持3種存儲(chǔ)模式:SMALL模式、COMPACT模式和LARGE模式。不同的存儲(chǔ)模式對(duì)變量默認(rèn)的存儲(chǔ)器類(lèi)型不一樣。

          1)SMALL模式

          SMALL模式成為小編譯模式,在SMALL模式下,編譯時(shí)函數(shù)參數(shù)以及變量被默認(rèn)在片內(nèi)RAM中,存儲(chǔ)類(lèi)型為data。

          2)COMPACT模式

          COMPACT模式稱(chēng)為緊湊編譯模式,在COMPACT模式下,編譯時(shí)函數(shù)參數(shù)和變量被默認(rèn)在片外RAM的低256B空間,存儲(chǔ)類(lèi)型為pdata。


          上一頁(yè) 1 2 下一頁(yè)

          評(píng)論


          技術(shù)專(zhuān)區(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); })();