《單片機原理與接口技術(shù)》-第3章_第1頁
《單片機原理與接口技術(shù)》-第3章_第2頁
《單片機原理與接口技術(shù)》-第3章_第3頁
《單片機原理與接口技術(shù)》-第3章_第4頁
《單片機原理與接口技術(shù)》-第3章_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

3.1數(shù)據(jù)與數(shù)據(jù)類型3.1.1常量和變量常量——在程序運行過程中,其值不能改變的量。變量——在程序運行中,其值可以改變的量;變量主要由兩部分組成:變量名和變量值。位變量——變量的類型是位;位變量的值可以是1或0,與8051硬件特性操作有關(guān)的位變量必須定位在8051CPU片內(nèi)存儲區(qū)(RAM)的可位尋址空間中。字符變量——長度為1個字節(jié),即8位。整型變量——長度為16位,8051將int型變量的MSB存放在低地址字節(jié)。如0x1234的存放方式為:下一頁返回3.1數(shù)據(jù)與數(shù)據(jù)類型

上一頁下一頁返回長整型變量——長度為32位,存放方式同int型。浮點型變量——長度為32位。3.1數(shù)據(jù)與數(shù)據(jù)類型

3.1.2C51數(shù)據(jù)的存儲類型與8051存儲器結(jié)構(gòu)通用寄存器區(qū)(地址為00H~1FH,共32個通用寄存器),可用寄存器名或直接字節(jié)地址尋址??晌粚ぶ穮^(qū)(地址為20H~2FH,共128位)。用戶RAM區(qū)(地址為30H~7FH),只能用字節(jié)地址尋址。C51存儲類型與8051存儲空間的對應關(guān)系如表3.2所示。C51存儲類型及其大小和值域的對應關(guān)系如表3.3表示。上一頁下一頁返回3.1數(shù)據(jù)與數(shù)據(jù)類型

上一頁返回8051特殊功能寄存器(SFR)及其C51定義:8051單片機片內(nèi)有21個SFR,其分布在片內(nèi)RAM區(qū)高128B,地址為80H~0FFH,對SFR操作只有用直接尋址方式。8051單片機中,除了程序計數(shù)器PC和4組通用寄存器組外,其他所有寄存器均稱為SFR,每個SFR和其地址見表3.5,其中有11個寄存器具有位尋址能力。3.28051內(nèi)部資源及其C51定義8051單片機芯片內(nèi)帶有4個8位的并行口,共32根I/O線,每個口主要由四部分組成:端口鎖存器(SFR中的P0~P3)、輸入緩沖器、輸出緩沖器以及引至芯片外的端口引腳,其中P1、P2、P3為準雙向口,P0為雙向三態(tài)口。8051在向外擴展存儲器和接口時,由P2口輸出地址總線的高8位(A15~A8),由P0口輸出地址總線的低8位(A7~A0);同時對P0口采用了總線復用技術(shù),P0口兼作8位雙向數(shù)據(jù)總線D7~D0。一、8051片內(nèi)資源及位變量下一頁返回3.28051內(nèi)部資源及其C51定義8051單片機的內(nèi)部高128B為專用寄存器區(qū),其中51子系列有21個(52子系列有26個)特殊功能寄存器(SFR),它們離散地分布在這個區(qū)中,分別用于CPU并行口、串行口、中斷系統(tǒng)、定時器/計數(shù)器等功能單元及控制和狀態(tài)寄存器。對SFR的操作,只能采用直接尋址方式。為了能直接訪問這些特殊功能寄存器,KeilC51擴充了兩個關(guān)鍵字“sfr”“sfr16”,可以直接對51單片機的特殊寄存器進行定義,這種定義方法與標準C51語言不兼容,只適用于對8051系列單片機C51編程。sfr特殊功能寄存器名=特殊功能寄存器地址常數(shù);sfr16特殊功能寄存器名=特殊功能寄存器地址常數(shù);上一頁下一頁返回3.28051內(nèi)部資源及其C51定義對于8051片內(nèi)I/O口,定義方法如下:sfrP1=0x90;//定義P1口,地址為90H;sfrP2=0xA0;//定義P2口,地址為A0H?sfr后面是一個要定義的名字,要符合標識符的命名規(guī)則,名字最好有一定的含義,等號后面必須是常數(shù),不允許有帶運算符的表達式,而且該常數(shù)必須在特殊功能寄存器的地址范圍之內(nèi)(80H~FFH)。sfr是定義8位的特殊功能寄存器,sfr16用來定義16位特殊功能寄存器,如8052的T2定時器,可以定義為:sfr16T2=0xCC;//這里定義8052定時器2,地址為T2L=CCH,T2H=CDH上一頁下一頁返回3.28051內(nèi)部資源及其C51定義用sfr16定義16位特殊功能寄存器時,等號后面是它的低位地址,高位地址一定要位于物理低位地址之上。需注意的是,sfr16不能用于定時器0和1的定義。對于需要單獨訪問SFR中的位,C51的擴充關(guān)鍵字“sbit”可以訪問位尋址對象?!皊bit”定義某些特殊位,并接受任何符號名,“=”號后將絕對地址賦給變量名。上一頁下一頁返回3.28051內(nèi)部資源及其C51定義二、定義位變量的注意事項通常C51編譯器會將位變量分配在位尋址區(qū)的某一位。定義位變量時應注意以下問題:(1)位變量不能定義成一個指針,如不能定義:bit*POINTER。(2)不能定義位數(shù)組,如不能定義:bitarray[2]。(3)bit與sbit的不同。bit不能指定位變量的絕對地址,當需要指定位變量的絕對地址(范圍必須在0x80~0xFF)時,需要使用sbit來定義。上一頁返回3.3運算符與表達式3.3.1賦值運算利用賦值運算符將一個變量與一個表達式連接起來的式子為賦值表達式,在表達式后面加“;”便構(gòu)成了賦值語句。使用“=”的賦值語句格式如下:變量=表達式;例如:a=0x10;//將常數(shù)十六進制數(shù)10H賦給變量ab=c=2;//同時將2賦值給變量b,cd=e;//將變量e的值賦給變量df=d-e;//將變量d-e的值賦給變量f下一頁返回3.3運算符與表達式

賦值語句的意義就是先計算出“=”右邊的表達式的值,然后將得到的值賦給左邊的變量。而且右邊的表達式可以是一個賦值表達式。3.3.2算術(shù)運算符及算術(shù)表達式C51中的算術(shù)運算符有如下幾個,其中只有取正值和取負值運算符是單目運算符,其他則都是雙目運算符,如表3.6所示。用算術(shù)運算符和括號將運算對象連接起來的式子稱為算術(shù)表達式。運算對象包括常量、變量、函數(shù)、數(shù)組、結(jié)構(gòu)體等。算術(shù)表達式的形式:表達式1算術(shù)運算符表達式2例如:a+b,(x+4)/(y-b),y-sin(x)/2。上一頁下一頁返回3.3運算符與表達式

3.3.3算術(shù)運算的優(yōu)先級與結(jié)合性算術(shù)運算符的優(yōu)先級規(guī)定為:先乘除模,后加減,括號最優(yōu)先。乘、除、模運算符的優(yōu)先級相同,并高于加減運算符。括號中的內(nèi)容優(yōu)先級最高。a+b*c;//乘號的優(yōu)先級高于加號,故先運算b*c,所得的結(jié)果再與a相加(a+b)*(c-d)-6;/*括號的優(yōu)先級最高,乘號次之,減號優(yōu)先級最低?故先運算(a+b)和(c-d),然后將二者的結(jié)果相乘,最后再與6相減*/算術(shù)運算的結(jié)合性規(guī)定為自左至右方向,稱為“左結(jié)合性”。即當一個運算對象兩邊的算術(shù)運算符優(yōu)先級相同時,運算對象先與左面的運算符結(jié)合。上一頁下一頁返回3.3運算符與表達式

a+b-c;//b兩邊是"+""-"運算符,其優(yōu)先級相同,按左結(jié)合性優(yōu)先執(zhí)行a+b再減c3.3.4數(shù)據(jù)類型轉(zhuǎn)換運算當運算符兩側(cè)的數(shù)據(jù)類型不同時必須通過數(shù)據(jù)類型轉(zhuǎn)換將數(shù)據(jù)轉(zhuǎn)換成同種類型。轉(zhuǎn)換的方式有兩種:自動類型轉(zhuǎn)換和強制類型轉(zhuǎn)換。自動類型轉(zhuǎn)換由C51編譯器編譯時自動進行。強制類型轉(zhuǎn)換需要使用強制類型轉(zhuǎn)換運算符,其格式為:(類型名)(表達式);上一頁下一頁返回3.3運算符與表達式

例如:(double)xx//將xx強制轉(zhuǎn)換成double類型(int)(a+b)//將a+b的值強制轉(zhuǎn)換成int類型使用強制轉(zhuǎn)換類型運算符后,運算結(jié)果被強制轉(zhuǎn)換成規(guī)定的類型。例如:unsignedcharx,y;unsignedcharz;z=(unsignedchar)(x*y);上一頁下一頁返回3.3運算符與表達式

3.3.5關(guān)系運算與邏輯運算關(guān)系運算符,如表3.7所示。關(guān)系運算符同樣有著優(yōu)先級別。前四個具有相同的優(yōu)先級,后兩個也具有相同的優(yōu)先級,但是前四個的優(yōu)先級要高于后兩個。關(guān)系運算符的結(jié)合性為左結(jié)合。關(guān)系表達式就是用關(guān)系運算符把兩個表達式連接起來。關(guān)系表達式通常用來判別某個條件是否滿足。要注意的是用關(guān)系運算符的運算結(jié)果只有0和1兩種,也就是邏輯的真與假,當指定的條件滿足時結(jié)果為1,不滿足時結(jié)果為0。上一頁下一頁返回3.3運算符與表達式

關(guān)系表達式結(jié)構(gòu)如下:表達式1關(guān)系運算符表達式2例如:a>b;//若a大于b,則表達式的值為1(真)b+c<a;//若a=3,b=4,c=5,則表達式的值為0(假)(a>b)==c;//若a=3,b=2,c=1,則表達式的值為1(真)?因為a>b時值為1,等于c值c==5>a>b;//若a=3,b=2,c=1,則表達式的值為0(假)關(guān)系運算符反映兩個表達式之間的大小等于關(guān)系,邏輯運算符則用于求條件式的邏輯值,用邏輯運算符將關(guān)系表達式或邏輯量連接起來就是邏輯表達式了。上一頁下一頁返回3.3運算符與表達式

邏輯表達式的一般形式為:邏輯與:條件式1&&條件式2;邏輯或:條件式1||條件式2;邏輯非:!條件式。邏輯表達式的結(jié)合性為自左向右。邏輯表達式的值應該是一個邏輯值“真”或“假”,以0代表假,以1代表真。邏輯表達式:用邏輯運算符將關(guān)系表達式或邏輯量連接起來的式子稱為邏輯表達式。邏輯表達式的運算結(jié)果不是0就是1,不可能是其他值。上一頁下一頁返回3.3運算符與表達式

C51邏輯運算符與算術(shù)運算符、關(guān)系運算符、賦值運算符之間優(yōu)先級的次序:?。ǚ牵▋?yōu)先級最高)、算術(shù)運算符、關(guān)系運算符、&&和||、賦值運算符(優(yōu)先級最低)。3.3.6位運算C51語言直接面對8051單片機,對于8051單片機強大靈活的位處理能力也提供了位操作指令。C51中共有6種位運算符,如表3.9所示。位運算符的作用是按位對變量進行運算,但是并不改變參與運算的變量的值。如果要求按位改變變量的值,則要利用相應的賦值運算。應當注意的是位運算符不能對浮點型數(shù)據(jù)進行操作。上一頁下一頁返回3.3運算符與表達式

位運算一般的表達形式如下:變量1位運算符變量2位運算符也有優(yōu)先級。從高到低依次是:“|”(按位或)→“^”(按位異或)→“&”(按位與)→“>>”(右移)→“<<”(左移)→“~”(按位取反)?!拔蝗》础边\算符“~”來對一個二進制數(shù)按位進行取反,即0變1,1變0。位左移運算符“<<”和位右移運算符“>>”用來將一個數(shù)的各二進制位全部左移或右移若干位,移位后,空白位補0,而溢出的位舍棄。移位運算并不能改變原變量本身。上一頁下一頁返回3.3運算符與表達式

3.3.7自增減運算及復合運算1.自增減運算C51提供自增運算“++”和自減運算“??”,使變量值自動加1或減1。自增運算和自減運算只能用于變量表達式而不能用于常量表達式。應當注意的是,“++”和“??”的結(jié)合方向是“自右向左”。2.復合運算復合賦值運算符就是在賦值運算符“=”的前面加上其他運算符。以下是C51語言中的復合賦值運算符:+=加法賦值>>=右移位賦值上一頁下一頁返回3.3運算符與表達式

?=減法賦值&=邏輯與賦值*=乘法賦值|=邏

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論