最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

單片機C語言的知識匯總(2)

2022-05-12 10:20 作者:信盈達(dá)  | 我要投稿

C51常量

1、常量數(shù)據(jù)類型說明:

(1)整型常量能表示為十進(jìn)制如 123,0,-89 等。十六進(jìn)制則以 0x 開頭如 0x34,-0x3B 等。長整型就在數(shù)字后面加字母 L,如 104L,034L,0xF340 等。?

(2)浮點型常量可分為 十進(jìn) 制和指數(shù)表示形式。指數(shù)表 示形式為[±]數(shù)字[.數(shù)字]e[±]數(shù)字,[]中的內(nèi)容為可選項,其中內(nèi)容根據(jù)具體情 況可有可無,但其余部分必須有,如125e3,7e9,-3.0e-3。?

(3)字符型常量是單引號內(nèi)的字符,如‘a(chǎn)’,‘d’等,不能顯示的控制字符,能 在該字符前面加一個反斜杠“\”組成專用轉(zhuǎn)義字符。常用轉(zhuǎn)義字符表請看表:

(4)字符串型常量由雙引號內(nèi)的字符組成,如“test”,“OK”等。當(dāng)引號內(nèi)的沒有字 符時,為空字符串。在使用特殊字符時同樣要使用轉(zhuǎn)義字符如雙引號。

在 C 中字符 串常量是做為字符類型數(shù)組來處理的,在存儲字符串時系統(tǒng)會在字符串尾部加上\o 轉(zhuǎn)義字符以作為該字符串的結(jié)束符。字符串常量“A”和字符常量‘A’是不一樣的, 前者在存儲時多占用一個字節(jié)的字間。?

(5)位標(biāo)量,它的值是一個二進(jìn)制。


2、應(yīng)用常量可用在不必改變值的場合,如固定的數(shù)據(jù)表,字庫等。常量的定義方式有幾種,下面來加以說明。 #difine False 0x0;

//用預(yù)定義語句能定義常量 #difine True 0x1;//這里定義 False 為 0,True 為 1?

//在程序中用到 False 編譯時自動用 0 替換,同理 True 替換為 1 unsigned int code a=100;//這一句用 code 把 a 定義在程序存儲器中并賦值 const unsigned int c=100;//用 const 定義 c 為無符號 int 常量并賦值 以上兩句它們的值都保存在程序存儲器中,而程序存儲器在運行中是不允許被修改的,所以如果在這兩句后面用了類似 a=110,a++這樣的賦值語句,編譯時將會出錯。


三、C51變量

1、變量格式[存儲種類] 數(shù)據(jù)類型 [存儲器類型] 變量名表   在定義格式中除了數(shù)據(jù)類型和變量名表是必要的,其它都是可選項。

2、存儲種類存儲種類有四種:自動(auto),外部(extern),靜態(tài)(static)和寄存器(register),缺省類型為自動(auto)。?

(1)static(靜態(tài)局部)變量 在程序整個運行期間都不會釋放內(nèi)存。如果定義局部變量的時候不賦值,則編譯的時候自動賦值為0。而對于自動變量而言,定義的時候不賦值,則是一個不確定的值。其他函數(shù)不能引用。 (2)用extern聲明外部變量 一個程序能由多個源程序文件組成。如果一個程序中需要引用另外一個文件中已經(jīng)定義的外部變量,就需要使用extern來聲明。 例: 一個文件中: int abc; 另外一個文件中: extern abc;


3、數(shù)據(jù)類型

(1)數(shù)據(jù)類型

字節(jié)中最高位字節(jié)表示數(shù)據(jù)的符號,“0”表示正數(shù),“1”表示負(fù)數(shù), 負(fù)數(shù)用補碼表示。


(2)特殊

bit 位標(biāo)量是 c51 編譯器的一種擴(kuò)充數(shù)據(jù)類型,利用它可定義一個位標(biāo)量,但不能定義 位指針,也不能定義位數(shù)組。它的值是一個二進(jìn)制位,不是 0 就是 1,類似一些高級語 言中的 Boolean 類型中的 True 和 False。


sfr 也是一種擴(kuò)充數(shù)據(jù)類型,點用一個內(nèi)存單元,值域為 0~255。利用它能訪問 51 單片機內(nèi)部的所有特殊功能寄存器。


sfr16 占用兩個內(nèi)存單元,值域為 0~65535。sfr16 和 sfr 一樣用于操作特殊功能寄存 器,所不一樣的是它用于操作占兩個字節(jié)的寄存器,如定時器 T0 和 T1。sfr16 T2 = 0xCC; //這里定義8052定時器2,地址為T2L=CCH,T2H=CDH。用sfr16定義16位特殊功能寄存器時,等號后面是它的低位地址,高位地址一定要位于物理低位地址之上。注意的是不能用于定時器0和1的定義。

sbit 同樣是 單片機c語言 中的一種擴(kuò)充數(shù)據(jù)類型,利用它能訪問芯片內(nèi)部的 RAM 中的可尋址位或特殊功能寄存器中的可尋址位。


如先前定義了sfr P1=0x90;//因 P1 端口的寄存器是可位尋址的,所以能定義sbit P1_1=P1^1;//P1_1 為 P1 中的 P1.1 引腳。同樣我們能用 P1.1 的地址去寫,如 sbit P1_1=0x91;這樣在以后的程序語句中就能用 P1_1 來對 P1.1 引腳進(jìn)行讀寫操作了。


(3)重新定義數(shù)據(jù)類型的的語句typedef

typedef 的語法:typedef 已有的數(shù)據(jù)類型 新的數(shù)據(jù)類型名

樣寫:typedef int integer; integer a,b;

typedef 不能直接用來定義變量,它只是對已有的數(shù)據(jù)類型作一個名字上的置換,并不是產(chǎn)生一個新的數(shù)據(jù)類型。


4、存儲器類型

指定該變量在單片機c語言硬件系統(tǒng)中所使用的存儲區(qū)域,并在編譯時準(zhǔn)確的定位。

注意的是在AT89c51芯片中RAM只有低128位,位于80H到FFH的高128位則在52芯片中才有用,并和特殊寄存器地址重疊。如果省略存儲器類型,系統(tǒng)則會按編譯模式SMALL,COMPACT或LARGE所規(guī)定的默認(rèn)存儲器類型去指定變量的存儲區(qū)域。無論什么存儲模式都能聲明變量在任何的8051存儲區(qū)范圍,然而把最常用的命令如循環(huán)計數(shù)器和隊列索引放在內(nèi)部數(shù)據(jù)區(qū)能顯著的提高系統(tǒng)性能。還有要指出的就是變量的存儲種類與存儲器類型是完全無關(guān)的。


(1)特殊寄存器(SFR)的地址

AT89C51特殊功能寄存器列表(適用于同一架構(gòu)的芯片)

帶*號的特殊功能寄存器都是可以位尋址的寄存器


(2)數(shù)據(jù)存儲模式

①Small模式:所有缺省變量參數(shù)均裝入內(nèi)部RAM,優(yōu)點是訪問速度快,缺點是空間有限,只適用于小程序。

②Compact模式:所有缺省變量均位于外部RAM區(qū)的一頁(256Bytes),具體哪一頁可由P2口指定,在STARTUP.A51文件中說明,也可用pdata指定,優(yōu)點是空間較Small為寬裕速度較Small慢,較large要快,是一種中間狀態(tài)。

③large模式:所有缺省變量可放在多達(dá)64KB的外部RAM區(qū),優(yōu)點是空間大,可存變量多,缺點是速度較慢。


5、Keil c51指針變量

單片機c語言支持一般指針(Generic Pointer)和存儲器指針(Memory_Specific Pointer)。

(1)一般指針

一般指針的聲明和使用均與標(biāo)準(zhǔn)C相同,不過同時還能說明指針的存儲類型,例如:char * xdata ptr;ptr為一個指向char數(shù)據(jù)的指針,而ptr本身放于外部RAM區(qū)。一般指針本身用3個字節(jié)存放,分別為存儲器類型,高位偏移,低位偏移量。

(2)存儲器指針

基于存儲器的指針說明時即指定了存貯類型,例如:char data * str;str指向data區(qū)中char型數(shù)據(jù);這種指針存放時,只需一個字節(jié)或2個字節(jié)就夠了,因為只需存放偏移量。

(3)指針轉(zhuǎn)換

當(dāng)基于存儲器的指針作為一個實參傳遞給需要一般指針的函數(shù)時,指針自動轉(zhuǎn)化。如果不說明外部函數(shù)原形,基于存儲器的指針自動轉(zhuǎn)化為一般指針,導(dǎo)致錯誤,因而請用“#include”說明所有函數(shù)原形。


6、單片機c語言中變量的空間分配幾個方法

(1)data區(qū)空間小,所以只有頻繁用到或?qū)\算速度要求很高的變量才放到data區(qū)內(nèi),比如for循環(huán)中的計數(shù)值。

data區(qū)內(nèi)最好放局部變量。局部變量空間在退出該函數(shù)是就釋放,當(dāng)然靜態(tài)局部變量除外,其內(nèi)存使用方式與全局變量相同;

(2)確保你的程序中沒有未調(diào)用的函數(shù)。在Keil

C里遇到未調(diào)用函數(shù),編譯器就將其認(rèn)為可能是中斷函數(shù)。函數(shù)里用的局部變量的空間是不釋放,也就是同全局變量一樣處理。

(3)程序中遇到的邏輯標(biāo)志變量能定義到bdata中,能大大降低內(nèi)存占用空間。

(4)其他不頻繁用到和對運算速度要求不高的變量都放到xdata區(qū)。如果想節(jié)省data空間就必須用large模式,將未定義內(nèi)存位置的變量全放到xdata區(qū)。當(dāng)然最好對所有變量都要指定內(nèi)存類型。

(5)當(dāng)使用到指針時,要指定指針指向的內(nèi)存類型。未定義指向內(nèi)存類型的通用指針占用3個字節(jié);而指定指向data區(qū)的指針只占1個字節(jié);指定指向xdata區(qū)的指針占2個字節(jié)。如指針p是指向data區(qū),則應(yīng)定義為:char

data *p;。還可指定指針本身的存放內(nèi)存類型,如:char data *xdata p;



來源:文章來源于網(wǎng)絡(luò),版權(quán)歸原作者所有,如有侵權(quán),請聯(lián)系刪除。

單片機C語言的知識匯總(2)的評論 (共 條)

分享到微博請遵守國家法律
中江县| 法库县| 察雅县| 梁山县| 宜昌市| 东山县| 绩溪县| 沛县| 清原| 贞丰县| 巴东县| 太湖县| 元江| 水富县| 桂阳县| 赣州市| 永清县| 尖扎县| 贵港市| 奉贤区| 巴南区| 讷河市| 都匀市| 依安县| 西充县| 陈巴尔虎旗| 商洛市| 昌邑市| 莎车县| 丰城市| 宝鸡市| 乾安县| 云浮市| 呼图壁县| 滕州市| 子洲县| 沁水县| 沂水县| 南岸区| 都昌县| 宝丰县|