|
單片機(jī)C51語(yǔ)言基礎(chǔ)
1.變量
C51支持的變量通常有如下類型:
bit定位在CPU片內(nèi)數(shù)據(jù)存儲(chǔ)區(qū)(RAM)的可位尋址空間中,char(unsigned char 8位):兩者直接支持機(jī)器指令。
int(8051系列CPU將整形變量的msb存放在低地址字節(jié))、long int、float
2.變量的存儲(chǔ)
8051系列單片機(jī)將程序存儲(chǔ)器(ROM)和數(shù)據(jù)存儲(chǔ)器(RAM)分開(kāi)。
3.8051片內(nèi)資源及位變量
①特殊功能寄存器
sfr,sfr16(直接尋址)
sfr P1=0x90;//定義P1口,地址90H
sfr P2=0xA0;//定義P2口,地址A0H
sfr16 T2=0xcc;這里定義8052定時(shí)器2,地址為T2L=CCH,T2H=CDH
(用sfr16定義16位特殊功能寄存器時(shí),等號(hào)后面是它的低位地址,高位地址一定要衛(wèi)浴物理低位地址之上)
sbit可以訪問(wèn)位尋址對(duì)象,可單獨(dú)訪問(wèn)SFR中的位。
㈠sbit 位變量名=位地址
sbit P1_1=0x91;sbit位地址同sfr一樣,位于80H~FFH間
㈡sbit 位變量名=特殊功能寄存器名位位置
sfr P3=0xB0;
sbit P3_1=P3^1;(將P3_1定義為P3口的P3.1引腳)
㈢sbit 位變量名=字節(jié)地址^位位置
sbit P3_1=0xB0^1;
②位尋址區(qū)及位變量定義
C51提供一個(gè)bdata的存儲(chǔ)器類型,用于訪問(wèn)單片機(jī)的可位尋址區(qū)的數(shù)據(jù)。
(bdata:可位尋址內(nèi)部數(shù)據(jù)寄存器(16B),允許位與字節(jié)混合訪問(wèn))
unsigned char bdata age;//在位尋址區(qū)定義unsigned char,int bdata score[i];//在可位尋址區(qū)定義數(shù)組score【 i】
sbit flag=age^1;//用關(guān)鍵字sbit定義位變量來(lái)獨(dú)立訪問(wèn)可尋址位對(duì)象其中的一位。
C51提供關(guān)鍵字“bit”實(shí)現(xiàn)位變量的定義及訪問(wèn)bit flag;//將flag定義為位變量
注意事項(xiàng):1.位變量不能定義成一個(gè)指針
2.不能定義位數(shù)組
3.bit與sbit的不同(bit不能指定位變量的絕對(duì)地址,當(dāng)需要指定位變量的絕對(duì)地址時(shí),需要使用sbit來(lái)定義)
例2 sbit flag=P1^0;
sbit定義要求基址對(duì)象的存儲(chǔ)類型為bdata,否則只有絕對(duì)的特殊位定義(sbit)是合法的。位置(^操作符)后的最大值依賴于指定的訪問(wèn)對(duì)象型,對(duì)于char,uchar而言是0-7,對(duì)于int、uint而言是0~15。
typedef(通常定義變量的數(shù)據(jù)類型時(shí)都是使用標(biāo)準(zhǔn)的關(guān)鍵字,方便別人閱讀程序。使用typedef可以方便程序的移植和簡(jiǎn)化較長(zhǎng)的數(shù)據(jù)類型定義)
注:typedef不能直接用來(lái)定義變量,它只是對(duì)已有的數(shù)據(jù)類型作一個(gè)名字上的置換,并不是產(chǎn)生一個(gè)新的數(shù)據(jù)類型
C51支持的主要編譯模式:
SMALL:函數(shù)參數(shù)及局部變量放大片內(nèi)RAM,另外所有對(duì)象包括棧都優(yōu)先放置于片內(nèi)RAM,片內(nèi)用滿再向片外RAM放置。
COMPACT:參數(shù)及局部變量放在片外RAM,通過(guò)R0,R1間接尋址,棧位于8051片內(nèi)RAM。
LARGE:參數(shù)及局部變量直接放入片外RAM,使用數(shù)據(jù)指針DPTR間接尋址。
例:定義一個(gè)可位尋址變量flag,該變量位于23H單元,用sbit指令定義該變量的八個(gè)位,變量名為flag0……flag7。運(yùn)用以上知識(shí)就不難寫出來(lái)了。呵呵。
|
|