www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

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

C51 中的變量定義

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

下面僅對C51在變量定義中注意的問題以及與80C51存儲資源有關的問題作說明,其余遵循C語言的規(guī)定。

1.變量聲明

在變量的聲明中,可以包括存儲類型和signed或unsigned等屬性。如:

(1)char data var1;

定義字符型變量var1,被分配在內部RAM低128B,編譯后,通過直接尋址方式訪問。

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

定義字符數組text[ ],將其分配到程序存儲區(qū),并賦初始值“ENTER PARAMETER”。編譯后,通過MOVC A, @A+DPTR訪問。

(3)unsigned long xdata array[100];

定義無符號長整型數組array[100],將其分配到外RAM中,編譯后,通過MOVX A, @DPTR訪問。

(4)float idata x,y,z;

定義浮點類型變量x,y,z,將其分配到內RAM中,編譯后,通過間接尋址方式訪問。

(5)unsigned int pdata dimension;

定義無符號整型變量dimension,將其分配到外RAM中,編譯后,通過MOVX A, @Ri指令采用分頁的形式訪問。

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

定義無符號字符型數組vector[10][4][4],將其分配到外RAM中,編譯后,通過MOVX A,@DPTR訪問。

(7)char bdata flags;

定義字符型變量flags,將其分配到可位尋址的內部數據存儲器中,可以以字節(jié)方式訪問,也可以以位方式訪問。

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

2.位變量(bit)

與80C51硬件特性操作有關的可以定義成位變量。位變量定位在80C51單片機的片內RAM的位尋址空間。

3.整型變量(int)

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

4.浮點變量(float)

浮點變量的長度為32位,占4個字節(jié),在存儲器中的存放格式如下:


地址

+0

+1

+2

+3

內容

MMMMMMMM

MMMMMMMM

EMMMMMMM

SEEEEEEE


其中: S表示符號位,1表示“正”,0表示“負”。

M表示23尾數,省略了最高位1。

E表示8位指數位。

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

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

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

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

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

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

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

在實際應用中,建議將這些定義放入一個頭文件中,以便使用。KeilC51中的reg51.h便是這樣一個文件,所以,在C程序中會看到“#include”語句。

6.C51中的指針

C51編譯器支持用星號(*)進行指針聲明。可以用指針完成在標準C語言中所有操作。另外,由于80C51單片機及其派生系列所具有的獨特結構,C51編譯器支持兩種不同類型的指針:存儲器指針和通用指針。

(1)通用指針。通用或未定型的指針的聲明和標準C語言中一樣。如:

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

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

long * state; /*長整型指針*/

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

通用指針可以用來訪問所有類型的變量,而不管變量存儲在哪個存儲空間中。因而,許多庫函數都使用通用指針。通過使用通用指針,一個函數可以訪問數據,而不用考慮它存儲在什么存儲器中。

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

(2)存儲器指針。存儲器指針或類型確定的指針在定義時包括一個存儲器類型說明,并且總是指向此說明的特定存儲器空間。例如:

char data * str; /*指向內RAM低128B的字符指針*/

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

正是由于存儲器類型在編譯時已經確定,通用指針中用來表示存儲器類型的字節(jié)就不再需要了。

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

7.C51中的函數

C51中函數的定義和使用與標準C基本相同,但對遞歸調用有所不同,C51編譯器采用一個擴展關鍵字reentrant作為定義函數的選項,需要將一個函數定義為再入函數時,只要在函數名的后面加上關鍵字reentrant即可,其格式如下:

函數類型 函數名(形式參數)[reentrant]

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

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

在數字電路設計和驗證領域,Verilog作為一種廣泛使用的硬件描述語言(HDL),其數據類型系統(tǒng)豐富多樣,為設計者提供了強大的表達能力和靈活性。掌握Verilog的數據類型,對于編寫高效、可維護的硬件描述代碼至關重要。本...

關鍵字: Verilog 數據類型 數字電路

單片機內部有很多的特殊功能寄存器,每個寄存器在單片機內部都分配有唯一的地址,一般我們會根據寄存器功能的不同給寄存器賦予各自的名稱,當我們需要在程序中操作這些特殊功能寄存器時,必須要在程序的最前面將這些名稱加以聲明,聲明的...

關鍵字: C51 數據類型 擴充定義

數據元(Data Element),也稱為數據元素,是用一組屬性描述其定義、標識、表示和允許值的數據單元,在一定語境下,通常用于構建一個語義正確、獨立且無歧義的特定概念語義的信息單元。數據元可以理解為數據的基本單元,將若...

關鍵字: C51 數據類型

▼點擊下方名片,關注公眾號▼歡迎關注【玩轉單片機與嵌入式】公眾號,回復關鍵字獲取更多免費資料?;貜汀炯尤骸?,限時免費進入知識共享群;回復【3D封裝庫】,常用元器件的3D封裝庫;回復【電容】,獲取電容、元器件選型相關的內容...

關鍵字: C51 MDK RealView

Perl是一種弱類型語言,所以變量不需要指定類型,Perl解釋器會根據上下文自動選擇匹配類型。Perl有三個基本的數據類型:標量、數組、哈希。以下是這三種數據類型的說明:序號類型和描述1標量標量是Perl語言中最簡單的一...

關鍵字: 數據類型

在Keil C51軟件中51單片機的中斷服務和外設驅動程序的開發(fā)

關鍵字: keil5 編譯 C51

Intel公司1980年推出了MCS-51系列單片機:集成 8位CPU、4K字節(jié)ROM、128字節(jié)RAM、4個8位并口、1個全雙工串行口、2個16位定時/計數器。尋址范圍64K,并有控制功能較強的布爾處理器。 80C5...

關鍵字: C51 KEIL 編程

c上標3下標5怎么算用計算機,c上標3下標5怎么算

關鍵字: C51 KEIL

▼點擊下方名片,關注公眾號▼大家好,很高興和各位一起分享我的第16篇原創(chuàng)文章,喜歡和支持我的工程師,一定記得給我點贊、收藏、分享。加微信[xyzn3333]與作者溝通交流,免費獲取更多單片機與嵌入式的海量電子資料。很多初...

關鍵字: 51單片機 C51

??匆姵鯇W者要求使用_at_,這是一種謬誤,把C當作ASM看待了。在C中變量的定位是編譯器的事情,初學者只要定義變量和變量的作 用域,編譯器就把一個固定地址給這個變量。

關鍵字: C51 單片機 誤區(qū) 注意事項
關閉