【ch05】單片機C51程序設計基礎_第1頁
【ch05】單片機C51程序設計基礎_第2頁
【ch05】單片機C51程序設計基礎_第3頁
【ch05】單片機C51程序設計基礎_第4頁
【ch05】單片機C51程序設計基礎_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

單片機C51程序設計基礎“浙江省普通高校“十三五”新形態(tài)教材普通高等教育“十三五”規(guī)劃教材電子設計系列規(guī)劃教材單片機原理及應用第五章01C51數(shù)據與運算C51數(shù)據與運算變量與常量是程序中的兩種基本數(shù)據對象,一個對象的類型決定著該對象可取值的集合及可以對該對象施行的運算。變量或常量的類型在聲明時由數(shù)據類型關鍵字來指定。C51的數(shù)據類型C51數(shù)據與運算為了更加有效地利用51單片機的結構,除了C語言中的所有標準數(shù)據類型,C51還加入了以下特殊的數(shù)據類型:bit位變量,值為0或1sbit從字節(jié)中聲明的位變量sfr特殊功能寄存器,8位sfr16特殊功能寄存器,16位C51的數(shù)據類型C51數(shù)據與運算表5.1.1列出了C51所支持的數(shù)據類型。C51的數(shù)據類型C51數(shù)據與運算C51數(shù)據的存儲類型C51中,變量或參數(shù)的存儲類型可以由存儲模式默認指定,也可以用關鍵字直接聲明指定。存儲模式決定了沒有明確指定存儲類型的變量、函數(shù)參數(shù)等的默認存儲區(qū)域,共三種。C51數(shù)據與運算C51數(shù)據的存儲類型(1)Smal1模式:所有默認變量參數(shù)均裝入內部RAM。(2)Compact模式:所有默認變量均位于外部RAM區(qū)的一頁(256字節(jié)),具體哪一頁可由P2口指定(在STARTUP.A51文件中說明,也可用pdata指定)。(3)Large模式:所有默認變量可放在多達64KB的外部RAM區(qū)。C51數(shù)據與運算C51數(shù)據的存儲類型直接使用關鍵字聲明變量數(shù)據的存儲類型時,可用的關鍵字如表5.1.2所示,各個關鍵字分別對應51單片機的某個存儲區(qū)。C51數(shù)據與運算51單片機中,除了程序計數(shù)器(PC)和4組通用存器組,其他所有寄存器均為特殊功能寄存器(SFR),其地址范圍為80H~FPH。特殊功能寄存器可由以下關鍵字說明。(1)sfs聲明字節(jié)尋址的特殊功能存器。8051特殊功能寄存器的C51定義C51數(shù)據與運算(2)sfr16對于一些8051派生系列單片機,該關鍵字可以聲明其內兩個連續(xù)地址的特殊功能寄存器(SFR)。(3)sbit聲明可位尋址的特殊功能寄存器和別的可位尋址目標。8051特殊功能寄存器的C51定義C51數(shù)據與運算8051提供4個并行接口PO~P3,其地址分別是0x80、0x90、0xA0和0xB0。一般而言,單片機的C51開發(fā)軟件中已經提供定義這4個并行接口的通用頭文件供開發(fā)人員使用,如Keil公司的C51開發(fā)軟件就提供REG51.h和REG52.h這兩個頭文件。8051并行接口及位變量的C51定義02C51運算符表達式及其規(guī)則C51運算符表達式及其規(guī)則無論是加、減、乘、除還是數(shù)值比較,都需要用到運算符,運算符包括賦值運算符、算術運算符邏輯運算符、位運算符、位移運算符、關系運算符、自增和自減運算符等。大多數(shù)運算符都是二目運算符,即運算符位于兩個表達式之間。單目運算符的意思是運算符作用于單個表達式。C51運算符表達式及其規(guī)則賦值語句的作用是把某個常量、變量或表達式的值賦給另一個變量。符號為=。這里并不是等于的意思,只是賦值,等于用=表示。注意:賦值語句左邊的變量在程序的其他地方必須要聲明。(復合)賦值運算符C51運算符表達式及其規(guī)則在C51中有兩個單目運算符和5個雙目運算符。算術運算符C51運算符表達式及其規(guī)則這是一類特殊的運算符,自增運算符++和自減運算符-對變量的操作結果是增加1和減小1。上述語句中,運算符在變量前或后對變量本身的影響一樣,都是加1或減1,但是如果把它們作為其他表達式的一部分,兩者就有區(qū)別了。自增和自減運算符C51運算符表達式及其規(guī)則關系運算符是對兩個表達式進行比較,返回一個真/假值。關系運算符C51運算符表達式及其規(guī)則邏輯運算符根據表達式的值來返回真值或假值。其實在C語言中沒有所謂的真值和假值,只是認為非0為真值,0為假值。邏輯運算符C51運算符表達式及其規(guī)則般而言,在計算機中,一字節(jié)占8位,這樣表示的數(shù)值范圍為0~255,即00000000~11111111。位就是里面的0和1。位操作運算符包括位邏輯運算符和位移運算符:位運算符C51運算符表達式及其規(guī)則條件運算符(?:)是C語言中唯一的一個三目運算符,其對第一個表達式做真、假檢測,然后根據結果返回后面兩個表達式中的一個。首先對第一個表達式進行檢驗,如果為真,則返回表達式2的值,如果為假,則返回在運算中,表達式3的值。條件運算符C51運算符表達式及其規(guī)則指針數(shù)據類型是一種存放指向另一個數(shù)據地址的變量類型。指針是C語言中一個十分重要的概也是學習C語言的一個難點。C語言中提供兩個專門用于指針和地址的運算符:指針和地址運算符C51運算符表達式及其規(guī)則表5.2.1是C51運算符的優(yōu)先級和結合性。指針和地址運算符03C51流控制語句C51流控制語句C語言是一種結構化、模塊化的編程語言。模塊是程序的一部分,只有一個出口和一個入口。一個C51程序由若干個模塊組成,每個模塊中包含若干個基本結構,每個基本結構由若干條語句組成。C語言歸納起來有三種基本結構:順序結構、選擇結構和循環(huán)結構。C51程序的基本結構及流程圖C51流控制語句(1)順序結構及其流程圖順序結構中,程序由低地址向高地址順序執(zhí)行代碼。如圖5.31所示程序先執(zhí)行A操作,再執(zhí)行B操作,兩者是順序執(zhí)行的關系。C51程序的基本結構及流程圖C51流控制語句(2)選擇結構及其流程圖。選擇結構通常出現(xiàn)在程序的功能決策、操作判斷等位置,程序首先對一個條件進行測試。選擇結構還有兩種派生結構:串行多分支結構和并行多分支結構。如圖5.3.2所示:C51程序的基本結構及流程圖C51流控制語句(3)循環(huán)結構及其流程圖。不同于順序結構和選擇結構的單次操作特點,循環(huán)結構可以使分支流程重復執(zhí)行。循環(huán)結構又有while型和dowhile型兩類。如圖5.3.3,5.3.4所示:C51程序的基本結構及流程圖C51流控制語句c語言中的選擇語句有三種:if語句、switch/case語句和條件表達式。(1)if語句if語句作為C語言的一個基本判定語句。(2)條件表達式。條件表達式是使用?:三目操作符的一種決策代碼書寫方法:表達式1?表達式2:表達式3選擇語句C51流控制語句(3)switch/case語句。switch/case語句常用于處理并行多分支選擇問題,其將一個變量或表達式的值作為判斷條件,將此變量的值域范圍分成幾段,每一段對應一種選擇或操作,當判斷值處在某個段中時,程序就會選擇執(zhí)行該段相應的操作。選擇語句C51流控制語句C51提供三種基本的循環(huán)語句:for語句、while語句和do-while語句。(1)for循環(huán)語句,其一般格式為:for(<初始化>;<條件表達式>;<增量>)[語句;}//循環(huán)體循環(huán)語句C51流控制語句(2)while循環(huán)語句,其一般格式為:while(條件){語句;}//循環(huán)體(3)do-while循環(huán)語句,其一般格式為:{

語句塊;//循環(huán)體}while(條件)循環(huán)語句C51流控制語句(4)循環(huán)語句中的break。break語句通常用在循環(huán)語句和switch語句中。(5)循環(huán)語句中的continue。continue語句的作用是跳過循環(huán)體中剩余語句而強行執(zhí)行下一次循環(huán)。循環(huán)語句04C51構造數(shù)據類型C51構造數(shù)據類型數(shù)組是一組具有固定數(shù)目和相同類型成分分量的有序集合,顧名思義就是一組同類型的數(shù)。數(shù)組有一維、二維、三維和多維之分,C51中常用的有一維數(shù)組和字符數(shù)組。1)數(shù)組的聲明聲明數(shù)組的語法為在數(shù)組名后加上用方括號括起來的維數(shù)說明。數(shù)組C51構造數(shù)據類型2)用下標訪問數(shù)組元素Intbuffer[10];3)數(shù)組的初始化變量可以在定義的時候初始化,數(shù)組也可以,如下示例:intarray[5]={1,2,3,4,5];4)字符數(shù)組整數(shù)和浮點數(shù)類型的數(shù)組很好理解,在一維數(shù)組中,還有一類字符型數(shù)組。數(shù)組C51構造數(shù)據類型規(guī)范地使用指針,可以使程序簡單明了,因此不但要學會如何正確地使用指針,而且要學會在各種情況下正確地使用指針變量。1)指針的基本概念及指針變量的定義所謂變量的指針,實際上是指變量的地址。變量的地址雖然在形式上類似于整數(shù),但在概念上不同于整數(shù)類型,它屬于一種新的數(shù)據類型,即指針類型。指針C51構造數(shù)據類型2)指向數(shù)組元素的指針指針和數(shù)組有著密切的關系,任何能由數(shù)組下標完成的操作都可用指針來實現(xiàn),但程序中使用指針可使代碼更緊湊、靈活。3)地址運算指針允許的運算方式有:(1)指針在一定條件下可進行比較,這里所說的一定條件,是指兩個指針指向同一個對象才有意義。指針C51構造數(shù)據類型(2)指針和整數(shù)可進行加、減運算。(3)兩個指針變量在一定條件下可進行減法運算。設p和g指向同一數(shù)組,則p-g的絕對值表示p所指對象與q所指對象之間的元素個數(shù)。其相減的結果遵守對象類型的字節(jié)長度進行縮小的規(guī)則。指針C51構造數(shù)據類型結構是由基本數(shù)據類型構成,并用一個標識符來命名的各種變量組合。結構中可以使用不同的數(shù)據類型。1)結構說明和結構變量的定義在C語言中,結構體也是一種數(shù)據類型,可以使用結構變量。像其他類型的變量一樣,在使用結構變量時也要先對其定義。結構體C51構造數(shù)據類型2)結構變量的使用結構是一個新的數(shù)據類型,因此結構變量也可以像其他類型的變量一樣賦值、運算,不同的是結構變量以成員作為基本變量。3)結構指針結構指針是指向結構的指針,其由一個加在結構變量名前的*操作符來定義。結構體C51構造數(shù)據類型共用體又稱聯(lián)合(union),是C語言的構造類型數(shù)據結構之一。其與數(shù)組、結構等一樣,也是種比較復雜的構造數(shù)據類型。1)共用體說明和共用體變量定義共用體說明和共用體變量定義與結構十分相似。共用體C51構造數(shù)據類型2)結構和共用體的區(qū)別1.結構和共用體都是由多個不同的數(shù)據類型成員組成的,但在任何同一時刻,共用體中只存放一個被選中的成員,而結構的所有成員都存在。2.對共用體的不同成員賦值,將會對其他成員重寫,原來成員的值就不存在了,而對結構的不同成員賦值,則互不影響。共用體C51構造數(shù)據類型枚舉是一個被命名的整型常數(shù)集合,枚舉在日常生活中很常見。例如,表示星期的SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,F(xiàn)RIDAY,SATURDAY,就是一個枚舉。枚舉C51構造數(shù)據類型注意:1.枚舉中每個成員(標識符)結束符是逗號,而不是分號,最后一個成員可省略逗號。2.初始化時可以賦負數(shù),以后的標識符仍依次加1。3.26枚舉變量只能取枚舉說明結構中的某個標識符常量。枚舉05函數(shù)函數(shù)在高級語言中,函數(shù)與“子程序”“過程”用來描述同樣的事情,都含有以同樣方法重復完成某件事情的意思。C51中使用“函數(shù)”這個術語,主程序可以根據需要來調用函數(shù),當函數(shù)執(zhí)行完畢時發(fā)出return指令,而主程序則繼續(xù)執(zhí)行函數(shù)調用后面的指令。同一個函數(shù)可以在不同的地方被調用,并且函數(shù)可以重復使用。函數(shù)函數(shù)有3種形式:無參數(shù)函數(shù)、有參數(shù)函數(shù)和空函數(shù)。下面簡單介紹這3種函數(shù)的定義方法。1)無參數(shù)函數(shù)的定義無參數(shù)函數(shù)的定義形式為:函數(shù)的定義函數(shù)2)有參數(shù)函數(shù)的定義有參數(shù)函數(shù)的定義形式為:3)空函數(shù)的定義空函數(shù)的定義形式為:函數(shù)的定義函數(shù)1)函數(shù)調用的一般形式函數(shù)調用的一般形式為:函數(shù)名(實際參數(shù)列表)。2)函數(shù)調用的方式主調用函數(shù)對被調用函數(shù)的調用可以有以下3種方式:(1)函數(shù)調用語句。(2)函數(shù)結果作為表達式的一個運算對象。(3)函數(shù)參數(shù)。函數(shù)的調用函數(shù)3)對被調用函數(shù)的說明在一個函數(shù)中調用另一個函數(shù)必須具有以下條件:(1)被調用函數(shù)必須已經存在(庫函數(shù)或用戶自定義函數(shù));(2)如果程序中使用了庫函數(shù),或使用了不在同一文件中的自定義函數(shù),則應該在程序的開頭處使用#include包含語句,將所調用函數(shù)的信息包括到程序中來。函數(shù)的調用函數(shù)C語言中,函數(shù)的定義都是相互獨立的,所以在定義函數(shù)時,一個函數(shù)的內部不能包含另一個函數(shù)。盡管C語言中函數(shù)不能嵌套定義,但允許嵌套調用函數(shù)和遞歸調用函數(shù)。1)函數(shù)的嵌套調用所謂函數(shù)的嵌套調用,即在調用一個函數(shù)的過程中,允許調用另外一個函數(shù)。2)函數(shù)的遞歸調用所謂函數(shù)的遞歸調用,即在調用一個函數(shù)的過程中,又直接或間接地調用該函數(shù)本身。函數(shù)的嵌套調用與遞歸調用函數(shù)1)中斷服務函數(shù)的定義中斷服務函數(shù)的定義形式為:2)修飾符interruptinterrupt是C51中非常重要的一個修飾符,這是因為中斷函數(shù)必須通過它進行修飾。中斷服務函數(shù)函數(shù)1)中斷服務函數(shù)的定義中斷服務函數(shù)的定義形式為:2)修飾符interruptinterrupt是C51中非常重要的一個修飾符,這是因為中斷函數(shù)必須通過它進行修飾。3)修飾符usingusing用于指定本函數(shù)內部使用的工作寄存器組,其后寄存器組號的取值為0~3,表示本函數(shù)使用的工作寄存器組號。中斷服務函數(shù)函數(shù)在本章第4節(jié)介紹了指針的概念,知道指針變量可以指向變量、字符串和數(shù)組。除此之外,指針變量還可以指向函數(shù),即可以用函數(shù)的指針變量來調用函數(shù)。個函數(shù)在編譯時,C編譯器會給它分配一個入口地址,該地址稱為函數(shù)的指針。可以用一個指針變量指向函數(shù),然后通過該指針變量調用此函數(shù)。指向函數(shù)的指針變量函數(shù)局部變量和全局變量在討論函數(shù)的形參變量時曾經提到,形參變量只在被調用期間才分配內存單元,調用結束立即釋放。從這一點可以看出,形參變量只有在函數(shù)內才是有效的,離開該函數(shù)就不能再使用了。這種變量有效性的范圍稱為變量的作用域。不僅對于形參變量,C語言中所有的量都有自己的作用域。變量說明的方式不同,其作用域也不同。C語言中的變量,按作用域范用可分為兩種,即局部變量和全局變量。函數(shù)局部變量和全局變量1)局部變量局部變量也稱為內部變量。局部變量是用來在函數(shù)內做定義說明的。2)全局變量全局變量也稱為外部變量,其是在函數(shù)外部定義的變量。它不屬于哪一個函數(shù),而屬于一個源程序文件,其作用域是整個源程序。在函數(shù)中使用全局變量時一般應做全局變量說明。06C51的庫函數(shù)C51的庫函數(shù)輸入/輸出流函數(shù)庫STDIOH輸入輸出流函數(shù)(見表5.6.1)聲明包含在STDIOH頭文件中這類函數(shù)通過8051系列單片機的串口或用戶定義的IO口讀寫數(shù)據。C51的庫函數(shù)字符串函數(shù)的原型(見表5.62)都在STRINGH頭文件中。字符串函數(shù)庫STRINGHC51的庫函數(shù)字符串函數(shù)庫STRINGHC51的庫函數(shù)(1)標準函數(shù)庫(STDLIB.H)頭文件中包含類型轉換和存儲器分配函數(shù)的原型和定義,如下所示:標準函數(shù)庫STDLIB.H及其他頭文件C51的庫函數(shù)(2)數(shù)學函數(shù)庫(MATH.H)頭文件中包含所有浮點運算函數(shù)的定義和原型,其他數(shù)學運算函數(shù)也包含在該文件中,所有的數(shù)學運算函數(shù)如下:標準函數(shù)庫STDLIB.H及其他頭文件C51的庫函數(shù)(3)絕對地址訪問(ABSACC.H)頭文件中含的宏定義允許用戶直接訪8051單片機的不同存儲區(qū),所有的宏定義如下:(4)內部函數(shù)庫(INTRINS.H)包含諸如_nop_一的單片機內部操作函數(shù):標準函數(shù)庫STDLIB.H及其他頭文件C51的庫函數(shù)(5)訪問SFR和SFR_bit的地址頭文件(REGxxx.H)。C51函數(shù)庫提供了一些頭文件REGxxx.H在8051系列單片機中,這些頭文件用來定義一些指向特殊功能寄存器常量。這些頭文件列表如下:標準函數(shù)庫STDLIB.H及其他頭文件07C51塊化程序設計C51塊化程序設計1)程序的組成一個程序可分為兩大部分,即數(shù)據說明部分和數(shù)據操作部分。2)常用名詞(1)

溫馨提示

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

評論

0/150

提交評論