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