當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]C51 中的變量定義 C51可支持圖5-1所列的數(shù)據(jù)類(lèi)型,但80C51單片機(jī)的CPU是一個(gè)8位微控制器。用8位字節(jié)(如:char和unsigned char)的操作比用整數(shù)或長(zhǎng)整數(shù)類(lèi)型的操作更有效。對(duì)于C這樣的高級(jí)語(yǔ)言,不管使用什么樣的數(shù)據(jù)

C51 中的變量定義

C51可支持圖5-1所列的數(shù)據(jù)類(lèi)型,但80C51單片機(jī)的CPU是一個(gè)8位微控制器。用8位字節(jié)(如:char和unsigned char)的操作比用整數(shù)或長(zhǎng)整數(shù)類(lèi)型的操作更有效。對(duì)于C這樣的高級(jí)語(yǔ)言,不管使用什么樣的數(shù)據(jù)類(lèi)型,表面上看起來(lái)很簡(jiǎn)單,然而,實(shí)際上C51編譯器要用一系列機(jī)器指令對(duì)其進(jìn)行復(fù)雜的數(shù)據(jù)類(lèi)型處理。特別是使用浮點(diǎn)變量時(shí),將明顯地增加程序長(zhǎng)度和運(yùn)算時(shí)間。除非程序必須保證運(yùn)行精度,在編寫(xiě)C程序時(shí),盡量避免使用大量的不必要的變量類(lèi)型。否則會(huì)增加所調(diào)用的函數(shù)的數(shù)量,使程序過(guò)于龐大,運(yùn)行速度降低,甚至在代碼區(qū)中無(wú)法安裝。

下面僅對(duì)C51在變量定義中注意的問(wèn)題以及與80C51存儲(chǔ)資源有關(guān)的問(wèn)題作說(shuō)明,其余遵循C語(yǔ)言的規(guī)定。

1.變量聲明

在變量的聲明中,可以包括存儲(chǔ)類(lèi)型和signed或unsigned等屬性。如:

(1)char data var1;

定義字符型變量var1,被分配在內(nèi)部RAM低128B,編譯后,通過(guò)直接尋址方式訪(fǎng)問(wèn)。

(2)char code text[ ] = “ENTER PARAMETER”;

定義字符數(shù)組text[ ],將其分配到程序存儲(chǔ)區(qū),并賦初始值“ENTER PARAMETER”。編譯后,通過(guò)MOVC A, @A+DPTR訪(fǎng)問(wèn)。

(3)unsigned long xdata array[100];

定義無(wú)符號(hào)長(zhǎng)整型數(shù)組array[100],將其分配到外RAM中,編譯后,通過(guò)MOVX A, @DPTR訪(fǎng)問(wèn)。

(4)float idata x,y,z;

定義浮點(diǎn)類(lèi)型變量x,y,z,將其分配到內(nèi)RAM中,編譯后,通過(guò)間接尋址方式訪(fǎng)問(wèn)。

(5)unsigned int pdata dimension;

定義無(wú)符號(hào)整型變量dimension,將其分配到外RAM中,編譯后,通過(guò)MOVX A, @Ri指令采用分頁(yè)的形式訪(fǎng)問(wèn)。

(6)unsigned char xdata vector[10][4][4];

定義無(wú)符號(hào)字符型數(shù)組vector[10][4][4],將其分配到外RAM中,編譯后,通過(guò)MOVX A,@DPTR訪(fǎng)問(wèn)。

(7)char bdata flags;

定義字符型變量flags,將其分配到可位尋址的內(nèi)部數(shù)據(jù)存儲(chǔ)器中,可以以字節(jié)方式訪(fǎng)問(wèn),也可以以位方式訪(fǎng)問(wèn)。

如果在變量的定義中,沒(méi)有包括存儲(chǔ)器類(lèi)型,編譯器將自動(dòng)選用默認(rèn)或暗示的存儲(chǔ)器類(lèi)型。暗示的存儲(chǔ)器類(lèi)型適用于所有的全局變量和靜態(tài)變量,還有不能分配在寄存器中的函數(shù)參數(shù)和局部變量。默認(rèn)的存儲(chǔ)器類(lèi)型由編譯器的參數(shù)SMALL、COMPACT及LARGE決定,這些參數(shù)定義了編譯時(shí)使用的存儲(chǔ)模式。

2.位變量(bit)

與80C51硬件特性操作有關(guān)的可以定義成位變量。位變量定位在80C51單片機(jī)的片內(nèi)RAM的位尋址空間。

3.整型變量(int)

整形變量的長(zhǎng)度為16位,占2個(gè)字節(jié),在存儲(chǔ)器中的存放格式為高位在低地址字節(jié),低位在高地址字節(jié)。

4.浮點(diǎn)變量(float)

浮點(diǎn)變量的長(zhǎng)度為32位,占4個(gè)字節(jié),在存儲(chǔ)器中的存放格式如下:


地址

+0

+1

+2

+3

內(nèi)容

MMMMMMMM

MMMMMMMM

EMMMMMMM

SEEEEEEE


其中: S表示符號(hào)位,1表示“正”,0表示“負(fù)”。

M表示23尾數(shù),省略了最高位1。

E表示8位指數(shù)位。

5.特殊功能寄存器(sfr、sfr16、sbit)

80C51單片機(jī)提供128B的SFR尋址區(qū),這個(gè)區(qū)域可位尋址、字節(jié)尋址或字尋址,用以控制定時(shí)器、計(jì)數(shù)器、串口、I/O及其他部件,分別由以下幾種關(guān)鍵字說(shuō)明:

(1)sfr:字節(jié)尋址。比如sfr P0=0x80;表示P0口地址為80H,“=”后為80H~FFH之間的常數(shù)。

(2)sfr16:字尋址。如sfr16 T2=0xCCCD;指定Timer2口地址T2L=CCH,T2H=CDH。

(3)sbit:位尋址。如sbit EA=0xAF位為EA,即中斷允許。還可以有如下的定義方法:

例如:sbit OV=PSW^2; /*定義OV為PSW的第2位,當(dāng)然需要先有PSW定義*/

sbit OV=0XD0^2; /*同上*/

在實(shí)際應(yīng)用中,建議將這些定義放入一個(gè)頭文件中,以便使用。KeilC51中的reg51.h便是這樣一個(gè)文件,所以,在C程序中會(huì)看到“#include”語(yǔ)句。

6.C51中的指針

C51編譯器支持用星號(hào)(*)進(jìn)行指針聲明??梢杂弥羔樛瓿稍跇?biāo)準(zhǔn)C語(yǔ)言中所有操作。另外,由于80C51單片機(jī)及其派生系列所具有的獨(dú)特結(jié)構(gòu),C51編譯器支持兩種不同類(lèi)型的指針:存儲(chǔ)器指針和通用指針。

(1)通用指針。通用或未定型的指針的聲明和標(biāo)準(zhǔn)C語(yǔ)言中一樣。如:

char * s; /*字符指針*/

int * numptr; /*整型指針*/

long * state; /*長(zhǎng)整型指針*/

通用指針總是需要三個(gè)字節(jié)來(lái)存儲(chǔ):第一個(gè)字節(jié)表示存儲(chǔ)器類(lèi)型,第二個(gè)字節(jié)是指針的高字節(jié),第三個(gè)字節(jié)是指針的低字節(jié)。

通用指針可以用來(lái)訪(fǎng)問(wèn)所有類(lèi)型的變量,而不管變量存儲(chǔ)在哪個(gè)存儲(chǔ)空間中。因而,許多庫(kù)函數(shù)都使用通用指針。通過(guò)使用通用指針,一個(gè)函數(shù)可以訪(fǎng)問(wèn)數(shù)據(jù),而不用考慮它存儲(chǔ)在什么存儲(chǔ)器中。

通用指針很方便,但是也很慢。在所指向目標(biāo)的存儲(chǔ)空間不明確的情況下,它們用得最多。

(2)存儲(chǔ)器指針。存儲(chǔ)器指針或類(lèi)型確定的指針在定義時(shí)包括一個(gè)存儲(chǔ)器類(lèi)型說(shuō)明,并且總是指向此說(shuō)明的特定存儲(chǔ)器空間。例如:

char data * str; /*指向內(nèi)RAM低128B的字符指針*/

int xdata * numtab; /*指向程序存儲(chǔ)區(qū)的長(zhǎng)整形指針*/

正是由于存儲(chǔ)器類(lèi)型在編譯時(shí)已經(jīng)確定,通用指針中用來(lái)表示存儲(chǔ)器類(lèi)型的字節(jié)就不再需要了。

指向idata、data、bdata和pdata的存儲(chǔ)器指針用一個(gè)字節(jié)保存,指向code和xdata的存儲(chǔ)器指針用兩個(gè)字節(jié)保存。使用存儲(chǔ)器指針比通用指針效率要高,速度要快。當(dāng)然,存儲(chǔ)器指針的使用不是很方便。在所指向目標(biāo)的存儲(chǔ)空間明確并不會(huì)變化的情況下,它們用得最多。

7.C51中的函數(shù)

C51中函數(shù)的定義和使用與標(biāo)準(zhǔn)C基本相同,但對(duì)遞歸調(diào)用有所不同,C51編譯器采用一個(gè)擴(kuò)展關(guān)鍵字reentrant作為定義函數(shù)的選項(xiàng),需要將一個(gè)函數(shù)定義為再入函數(shù)時(shí),只要在函數(shù)名的后面加上關(guān)鍵字reentrant即可,其格式如下:

函數(shù)類(lèi)型 函數(shù)名(形式參數(shù))[reentrant]

再入函數(shù)可被遞歸調(diào)用,無(wú)論合適,包括中斷服務(wù)函數(shù)在內(nèi)的任何函數(shù)都可調(diào)用再入函數(shù)。與非再入函數(shù)的參數(shù)傳遞和局部變量的存儲(chǔ)分配方法不同,C51編譯器為再入函數(shù)生成一個(gè)模擬棧,通過(guò)這個(gè)模擬棧來(lái)完成參數(shù)傳遞和存放局部變量。模擬棧所在的存儲(chǔ)空間根據(jù)再入函數(shù)存儲(chǔ)器模式的不同,可以是data、pdata或xdata存儲(chǔ)空間。當(dāng)程序中包含有多種存儲(chǔ)器模式的再入函數(shù)時(shí),C51編譯器為每種模式單獨(dú)建立一個(gè)模擬棧并獨(dú)立管理各自的指針。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀(guān)點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶(hù)希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱(chēng),數(shù)字世界的話(huà)語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱(chēng)"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉