




已閱讀5頁,還剩73頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
.,單片機C51語言基礎及C51程序設計,.,主要內容:,C51語言概述C51的標識符與關鍵字C51的變量及數(shù)據(jù)類型C51的運算符及表達式C51的程序結構C51開發(fā)環(huán)境C51編程實例,.,一、C51語言概述,單片機C51語言是ANSIC的擴展。C51語言除了具有C語言的優(yōu)點外,同時具有匯編語言的硬件操作能力。運行于單片機平臺,支持的微處理器種類繁多,可移植性好。對于兼容的8051系列單片機,只要將一個硬件型號下的程序稍加修改,甚至不加改變,就可移植到另一個不同型號的單片機中運行。具有高級語言的特點,盡量減少底層硬件寄存器的操作。單片機C51語言提供了完備的數(shù)據(jù)類型、運算符及函數(shù)供使用。C51語言代碼執(zhí)行的效率方面十分接近匯編語言,且比匯編語言的程序易于理解,便于代碼共享。,.,二、C51的標識符與關鍵字,標識符即特定的字符或字符串,用來給變量、函數(shù)、符號常量、自定義類型等命名。用標識符給C語言程序中各種對象命名時,要用字母、下劃線和數(shù)字組成的字符序列,并要求首字符是字母或下劃線,不能是數(shù)字。字母的大小寫是有區(qū)別的。通常下劃線開頭的標識符是編譯系統(tǒng)專用的,因此在編寫C語言源程序時一般不使用以下劃線開頭的標識符,而將下劃線用作分段符。C51編譯器規(guī)定標識符最長可達255個字符,但只有前32個字符在編譯時有效,因此標識符的長度一般不要超過32個字符。關鍵字是一種已被系統(tǒng)使用過的具有特定含義的標識符。用戶不得再用關鍵字給變量等命名。C語言關鍵字較少,ANSIC標準一共規(guī)定了32個關鍵字,見表,.,ANSIC語言的關鍵字,.,.,KeilC51編譯器除了有ANSIC標準的32個關鍵字外,還根據(jù)51單片機的特點擴展了相應的關鍵字。在KeilC51開發(fā)環(huán)境的文本編輯器中編寫C程序,系統(tǒng)可以把保留字以不同的顏色顯示,缺省顏色為藍色。下表為KeilC51編譯器擴展的關鍵字。,.,1.C51的變量,在程序執(zhí)行過程中,數(shù)值可以發(fā)生改變的量稱為變量。,變量名與存儲單元地址相對應,變量值與存儲單元的內容相對應。,例如,三、C51的變量及數(shù)據(jù)類型,.,【存儲類別】數(shù)據(jù)類型【存儲器類型】變量名,(標準C),(標準C),*括號項可以缺?。ǖ栌腥笔≈担?C51變量定義的四要素:,(C51特有),(標準C+C51),.,【存儲類別】數(shù)據(jù)類型【存儲器類型】變量名,共有四個說明符:1、auto(自動型)變量的作用范圍在定義它的函數(shù)體或語句塊內。執(zhí)行結束后,變量所占內存即被釋放。2、extern(外部型)在一個源文件中被定義為外部型的變量,在其它源文件中需要通過extern說明方可使用。3、static(靜態(tài)型)利用static可使變量定義所在的函數(shù)或語句塊執(zhí)行結束后,其分配的內存單元繼續(xù)保留。4、register(寄存器型)將變量對應的儲存單元指定為通用寄存器,以提高程序運行速度。,缺省存儲種類為auto(自動)型變量,.,數(shù)據(jù)的不同格式叫做數(shù)據(jù)類型,*有符號數(shù)類型可以忽略signed標識符,標準C語言的數(shù)據(jù)類型,【存儲類別】數(shù)據(jù)類型【存儲器類型】變量名,.,C51擴充數(shù)據(jù)類型:bit、sfr或sfr16、sbit,bit型,關鍵詞bit用于定義一個位變量,語法規(guī)則:,bitbit_name=0或1;,例如:bitdoor=0;/定義一個叫door的位變量且初值為0,標準C的變量定義舉例:inta=5;/定義一個初值為5的整形變量a語法規(guī)則:intint_name=常數(shù);,注意:上述變量的物理地址是由編譯器分配的,.,sfr或sfr16型,關鍵詞sfr或sfr16用于定義SFR字節(jié)地址變量,語法規(guī)則:sfr或sfr16sfr_name=字節(jié)地址常數(shù);,51MCU中有21個SFR,如何定義與這些單元相關的變量?,.,例如,sfrP0=0 x80;/定義P0口地址80HsfrPCON=0 x87;/定義PCON地址87Hsfr16DPTR=0 x82;/定義DPTR的低端地址82H,注意:SFR字節(jié)地址變量的物理地址是由MCU資源決定的,.,sbit型,部分SFR具有位地址,如何定義與這些位地址相關的變量?,絕對位地址,相對位地址,字節(jié)地址,兩種位地址表達形式:絕對位地址、相對位地址,.,1)將SFR的絕對位地址定義為位變量名sbitbit_name=位地址常數(shù);例如,sbitCY=0 xD7;,3)將SFR的相對位位置定義位變量名sbitbit_name=sfr_name位位置;例如,sbitCY=PSW7;,2)將SFR的相對位地址定義為位變量名sbitbit_name=sfr字節(jié)地址位位置;例如,sbitCY=0 xD07;,關鍵詞sbit用于定義SFR位地址變量,三種定義形式:,.,C51編譯器在頭文件“REG51.H”中定義了全部sfr/sfr16和sbit變量。,用一條預處理命令#include把這個頭文件包含到C51程序中,無需重新定義即可直接使用它們的名稱。,.,應用舉例:,.,【存儲類別】數(shù)據(jù)類型【存儲器類型】變量名,51單片機的三個邏輯存儲空間:,片內數(shù)據(jù)存儲器,片外數(shù)據(jù)存儲器和程序存儲器。,.,建立C51存儲類型與存儲空間的對應關系,.,C51的存儲類型與存儲空間對應關系表,編譯模式,.,三種編譯模式分別對應于三種缺省存儲類型:,【存儲類別】數(shù)據(jù)類型【存儲器類型】變量名,C51編譯器可根據(jù)當前采取的編譯模式自動認定默認的存儲類型約定:若無特殊聲明,一般均為“SMALL編譯模式”,.,變量名可以由字母、數(shù)字和下劃線三種字符組成,且第一個字符必須為字母或下劃線,變量名長度隨編譯系統(tǒng)而定。,變量名具有字母大小寫的敏感性,如SUM和sum代表不同的變量。,【存儲類別】數(shù)據(jù)類型【存儲器類型】變量名,變量名不得使用標準C語言和C51語言的關鍵字。,.,unsignedchardatasystem_status=0;,/定義system_status為無符號字符型自動變量,該變量位于data區(qū)中且初值為0。,變量定義舉例,變量名為system_status,位于片內RAM區(qū),無符號字符型,自動型,初值為零,.,unsignedcharbdatastatus_byte;,unsignedintcodeunit_id2=0 x1234,0 x89ab;,staticcharm,n;,/定義status_byte為無符號字符型自動變量,該變量位于bdata區(qū),/定義unit_id2為無符號整型自動變量,該變量位于code區(qū)中,是長度為2的數(shù)組,且初值為0 x1234和0 x89ab。,/定義m和n為2個位于data區(qū)中的有符號字符型靜態(tài)變量。,.,2.C51的指針,定義了一個指向由“數(shù)據(jù)類型”說明的變量的指針變量;被指向變量和指針變量位于C編譯器默認的內存區(qū)域中。,標準C語言指針的一般定義形式為:數(shù)據(jù)類型*指針變量名;,例如:inta=A;int*p1=,表示:p1是一個指向int型變量的指針變量p1的值是int型變量a的地址a和p1兩個變量都位于C編譯器默認的內存區(qū)域中,.,在C51里定義指針,需要額外說明兩個問題:1)指針變量自身位于哪個存儲區(qū)域?2)被指向變量位于哪個存儲區(qū)中?,C51指針的一般定義形式:數(shù)據(jù)類型【存儲類型1】*【存儲類型2】指針變量名;,數(shù)據(jù)類型被指向變量的數(shù)據(jù)類型,不能缺省存儲類型1被指向變量所在的存儲區(qū)類型,缺省時根據(jù)該變量的定義語句確定存儲類型2指針變量所在的存儲區(qū)類型,缺省時根據(jù)C51編譯模式的默認值確定指針變量名按C51變量名的規(guī)則選取,.,例1charxdataa=A;char*ptr=,舉例說明C51指針定義的用法(SMALL編譯模式下),【解】ptr是一個指向char型變量的指針變量;它本身位于SMALL編譯模式默認的data存儲區(qū)里;它的值是位于xdata存儲區(qū)里的char型變量a的地址;“存儲類型1”缺省時,靠被指向變量的定義確定存儲類型。,數(shù)據(jù)類型【存儲類型1】*【存儲類型2】指針變量名;,.,例2charxdataa=A;char*ptr=,【解】Ptr先指向位于xdata存儲區(qū)的char型變量a,后指向位于idata存儲區(qū)的char型變量b;“存儲類型1”缺省時,ptr指針具有一定隨意性。,數(shù)據(jù)類型【存儲類型1】*【存儲類型2】指針變量名;,.,例3charxdataa=A;charxdata*ptr=,【解】a是位于xdata存儲區(qū)里的char型變量;ptr是固定指向xdata存儲區(qū)中char型變量的指針變量;“存儲類型1”存在時,ptr指針具有固定指向性。,數(shù)據(jù)類型【存儲類型1】*【存儲類型2】指針變量名;,.,例4charxdataa=A;charxdata*idataptr=,【解】ptr是固定指向xdata存儲區(qū)的char型變量的指針變量;它自身存放在idata存儲區(qū)中;“存儲類型2”存在時,ptr指針具有明確的存儲區(qū)域。,數(shù)據(jù)類型【存儲類型1】*【存儲類型2】指針變量名;,.,四、C51的運算符及表達式,1算術運算符和算術表達式(1)、基本算術運算符加法運算符,或正值符號;減法運算符,或負值符號;乘法運算符;除法運算符;%模(求余)運算符;例11%3=2,結果是11除以3所得余數(shù)為2。在上述運算符中,加、減和乘法符合一般的算術運算規(guī)則。除法運算時,如果是兩個整數(shù)相除,其結果為整數(shù);如果是兩個浮點數(shù)相除,其結果為浮點數(shù)。而對于取余運算,則要求兩個運算對象均為整型數(shù)據(jù)。,.,C語言規(guī)定了算術運算符的優(yōu)先級和結合性。優(yōu)先級-指當運算對象兩側都有運算符時,執(zhí)行運算的先后次序。按運算符優(yōu)先級別的高低順序執(zhí)行運算。結合性-指當一個運算對象兩側的運算符優(yōu)先級別相同時的運算順序。算術運算符中取負運算的優(yōu)先級最高,其次是乘法、除法和取余,加法和減法的優(yōu)先級最低。也可以根據(jù)需要,在算術表達式采用括號來改變優(yōu)先級的順序。如:a+b/c;該表達式中,除號優(yōu)先級高于加號,故先運算b/c所得結果,之后再與a相加。(a+b)*(c-d)-e;該表達式中,括號優(yōu)先級最高,其次是“*”,最后是減號。故先運算(a+b)和(c-d),然后再將二者結果相乘,最后與e相減。,.,(2)、自增減運算符自增減運算符的作用是使變量值自動加1或減1。+自增運算符;-自減運算符;+和-運算符只能用于變量,不能用于常量和表達式。如+(a+1)是錯誤的。如:+i、-i在使用i之前,先使i值加(減)1。i+、i-在使用i之后,再使i值加(減)1。粗略的看,+i和i+的作用都相當于i=i+1,但+i和i+的不同之處在于+i先執(zhí)行i=i+1,再使用i的值;而i+則是先使用i的值,再執(zhí)行i=i+1。如:若i值原來為5.則j=+i;j的值為6,i的值也為6;j=i+;j的值為5,i的值為6;,.,(3)、類型轉換運算符兩側的數(shù)據(jù)類型不同時,要轉換成同種類型。轉換的方法有兩種,一是自動轉換,是編譯系統(tǒng)在編譯時自動進行的類型轉換,順序是:bitcharintlongfloat,signedunsigned。二是強制類型轉換,是通過類型轉換運算來實現(xiàn)的。其一般形式:(類型說明符)(表達式)功能:把表達式的運算結果強制轉換成類型說明符所表示的類型。如:(double)a將a強制轉換成double類型(int)(x+y)將x+y值強制轉換成int類型(float)(5%3)將模運算5%3的值強制轉換成float類型。,.,2關系運算符、關系表達式及優(yōu)先級(1)、C51提供六種關系運算符小于;=小于等于;大于;=大于等于=測試等于;=!=測試不等于;(2)、關系運算符的優(yōu)先級1)、=的優(yōu)先級相同,兩種=、=相同;前4種優(yōu)先級高于后兩種。2)關系運算符的優(yōu)先級低于算術運算符。3)關系運算符的優(yōu)先級高于賦值運算符。如:ca+b等效于c(a+b);ab!=c等效于(ab)!=ca=bc等效于a=(bc)(3)、關系運算符的結合性為左結合如:a=4,b=3,c=1,則f=abc,則ab的值為1,1c的值為0,故f=0。(4)、關系表達式用關系運算符和將兩個表達式(可以是算術表達式、關系表達式、邏輯表達式、字符表達式)連接起來的式子。(5)、關系表達式的結果真和假。C51中用0表示假,1表示真。,.,3邏輯運算符和邏輯表達式及優(yōu)先級(1)、C51提供3種邏輯運算符!邏輯“非”(NOT)unsignedcharCNT2;voidTimer()interrupt1using2if(+CNT1=1000)/CNT1計數(shù)到1000CNT2+;/CNT2開始計數(shù)CNT1=0;/CNT1清零,.,在編寫中斷函數(shù)時,應特別注意以下幾點:(1)中斷函數(shù)為無參函數(shù),即不能在中斷函數(shù)中定義任何變量,否則將導致編譯錯誤。(2)中斷函數(shù)沒有返回值,即應將中斷函數(shù)定義為void類型。(3)中斷函數(shù)不能直接被調用,否則將導致編譯錯誤。(4)中斷函數(shù)使用浮點運算時要保存浮點寄存器的狀態(tài)。(5)如果在中斷函數(shù)中調用了其他函數(shù),則被調用函數(shù)所使用的寄存器組必須與中斷函數(shù)相同。(6)由于中斷的產(chǎn)生不可預測,中斷函數(shù)對其他函數(shù)的調用可能形成遞歸調用,必要時可將被中斷函數(shù)調用的其他函數(shù)定義成再入函數(shù)。,.,重入函數(shù):,在主函數(shù)和中斷函數(shù)中都可調用的函數(shù)容易產(chǎn)生問題。51系列單片機一般使用寄存器傳遞函數(shù)參數(shù),局部變量一般存放在片內RAM中。由于片內RAM的容量很小(只有128B),函數(shù)再入時會破壞或覆蓋上次調用的數(shù)據(jù)。為此,C51語言提供了關鍵字reentrant,用于將相應的函數(shù)指定為可重入函數(shù)。所謂重入函數(shù),是指可以在函數(shù)體內間接調用其自身的函數(shù)。,.,重入函數(shù)可以被遞歸調用和多重調用,而不用擔心變量被覆蓋,因為每次函數(shù)調用中的局部變量都會被單獨保存起來。,重入函數(shù)的定義格式:函數(shù)類型函數(shù)名(形參列表)reentrant局部變量說明可執(zhí)行語句,.,標準庫函數(shù):,根據(jù)51系列單片機本身的特點,C51語言編譯系統(tǒng)在C語言的基礎上又擴展了以下幾種庫函數(shù):(1)C51S.LIB:Small模式,無浮點運算。(2)C51FPS.LIB:Small模式,有浮點運算。(3)C51C.LIB:Compact模式,無浮點運算。(4)C51FPC.LIB:Compact模式,有浮點運算。(5)C51L.LIB:Large模式,無浮點運算。(6)C51FPL.LIB:Large模式,有浮點運算。,所謂標準庫函數(shù),是指由編譯系統(tǒng)提供的、用戶可以直接調用的函數(shù)。在程序設計中,多使用庫函數(shù)使程序代碼簡單,結構清晰,易于調試和維護。,.,每個庫函數(shù)都在相應的頭文件中給出了函數(shù)原型聲明。在使用庫函數(shù)時,必須在源程序的開頭處用#include命令將有關的頭文件包含進來,例如:#include#includevoidmain(),值得注意的是,C51語言中的某些庫函數(shù)的參數(shù)和調用格式與標準C語言有所不同,如isdigit()函數(shù)的返回值類型是bit而不是int。,.,在C51語言中,調用標準庫函數(shù)的方式有以下兩種:(1)作為表達式的一部分。例如,求y=|x|+3可以通過調用abs()函數(shù)來實現(xiàn):y=abs(x)+3;(2)作為獨立的語句完成某種操作。例如:printf(*n);可以在標準輸出設備上輸出一行5個連續(xù)的“*”號。,KeilC51提供了相當豐富的標準庫函數(shù),并把它們分門別類地歸屬到不同的頭文件中,標準庫函數(shù)的原型、功能描述、返回值、重入屬性以及應用舉例在KeilC51集成開發(fā)環(huán)境提供的幫助文檔中均可以查到。,.,以數(shù)學類庫函數(shù)abs()為例,查閱標準庫函數(shù)的方法,(1)在KeilC51集成開發(fā)環(huán)境下,單擊工程管理器中的Books標簽,即可看到KeilC51提供的幫助文檔,如圖3.15所示。,KeilC51的幫助文檔,.,(2)在下圖所示的界面中,雙擊C51庫函數(shù)(C51LibraryFunctions)選項,打開C51庫函數(shù)幫助窗口,如圖所示。,KeilC51的庫函數(shù),.,(3)在圖的左側窗口找到abs并單擊,則在圖的右側窗口中可以看到有關庫函數(shù)abs()的介紹內容,包括該函數(shù)所屬的頭文件、函數(shù)原型、功能描述、再入屬性以及應用舉例等,如圖所示。,庫函數(shù)abs()的幫助文檔,.,1.Keil的編譯環(huán)境Vision3,Keil是德國KeilSoftware公司的51單片機開發(fā)軟件包,包括C編譯器、匯編編譯器、連接器、庫管理及仿真調試器,通過一個windows下的集成開發(fā)環(huán)境uVisoin3組合起來。,六、開發(fā)環(huán)境,.,Vision3的軟件界面包括四大組成部分,即菜單工具欄,工程管理窗口,文件窗口和輸出窗口。,.,Vision3中共有11個下拉菜單。工具欄的位置和數(shù)量可以通過設置選定和移動。,.,工程管理窗口用于管理工程文件目錄,它由五個子窗口組成,可以通過子窗口下方的標簽進行切換,它們分別是:文件窗口,寄存器窗口,幫助窗口,函數(shù)窗口,模版窗口。,工程管理窗口:,.,輸出窗口:輸出窗口用于編譯過程中的信息交互作用,由三個子窗口組成,可以通過子窗口下方的標簽進行切換,它們分別是:編譯窗口,命令窗口,搜尋窗口。,.,信息窗口:觀察窗口(Watch&CallStackWindows)輸出窗口(OutputWindows)存儲器窗口(MemoryWindow)反匯編窗口(DissamblyWindow)串行窗口(SerialWindow),.,輸入源程序建立工程對工程進行詳細設置將源程序變?yōu)槟繕舜a
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 商協(xié)會辦公室管理制度
- 租車怎么寫合同協(xié)議書模板
- 房地產(chǎn)開發(fā)拆遷安置合同示范文本集
- 智能車庫門定制設計與施工一體化服務合同
- 培訓機構成績比較協(xié)議
- 出海貨物運輸安全監(jiān)管合同
- 地質測繪數(shù)據(jù)保密與安全協(xié)議
- 廠房租賃居間服務與物業(yè)管理協(xié)議
- 鋼鐵行業(yè)定制化運輸合同標準范本
- 桉樹撫育施肥與林業(yè)生態(tài)補償機制承包協(xié)議
- 網(wǎng)絡安全基礎知識試題及答案
- 裝修公司合同保密協(xié)議書
- 2025-2030中國公路建設行業(yè)發(fā)展分析及發(fā)展前景與趨勢預測研究報告
- 2025購銷茶葉合同范本
- 戶外場地安全課件
- 研究我國平臺企業(yè)在社會責任履行及其治理機制的現(xiàn)狀與問題
- 特殊作業(yè)監(jiān)護人培訓指南
- 叉車使用安全協(xié)議書
- ai訓練師面試題及答案
- 2024-2025學年人教版數(shù)學五年級下學期期末試卷(含答案)
- 安全管理:承包商安全管理制度(模板)
評論
0/150
提交評論