2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩135頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第3章 C51語(yǔ)言編程基礎(chǔ),1,內(nèi)容概要,目前單片機(jī)應(yīng)用設(shè)計(jì)與開(kāi)發(fā),多使用C51語(yǔ)言來(lái)編程。C51語(yǔ)言是在標(biāo)準(zhǔn)C的基礎(chǔ)上,根據(jù)單片機(jī)存儲(chǔ)器硬件結(jié)構(gòu)及內(nèi)部資源,擴(kuò)展相應(yīng)的數(shù)據(jù)類型和變量,而在語(yǔ)法規(guī)定、程序結(jié)構(gòu)與設(shè)計(jì)方法上,都與標(biāo)準(zhǔn)C相同。本章介紹C51語(yǔ)言的基礎(chǔ)知識(shí)、對(duì)C51集成開(kāi)發(fā)環(huán)境Keil µVision3以及單片機(jī)虛擬仿真平臺(tái)Proteus也作以介紹。,2,在單片機(jī)應(yīng)用開(kāi)發(fā)中,軟件編程占有非常重要的地位。要求編程

2、人員在短時(shí)間內(nèi)編寫出執(zhí)行效率高、運(yùn)行可靠的程序代碼。同時(shí),由于實(shí)際系統(tǒng)的日趨復(fù)雜,對(duì)程序的可讀性、升級(jí)與維護(hù)以及模塊化的要求越來(lái)越高,以方便多個(gè)工程師協(xié)同開(kāi)發(fā)。C51語(yǔ)言是近年來(lái)在國(guó)內(nèi)外的51單片機(jī)開(kāi)發(fā)中,普遍使用的一種程序設(shè)計(jì)語(yǔ)言。C51能直接對(duì)單片機(jī)硬件進(jìn)行操作,既有高級(jí)語(yǔ)言的特點(diǎn),又有匯編語(yǔ)言的特點(diǎn),因此在單片機(jī)應(yīng)用的程序設(shè)計(jì)中,得到非常廣泛的使用。,3.1 編程語(yǔ)言Keil C51簡(jiǎn)介 Keil C51(簡(jiǎn)稱C51),是在

3、標(biāo)準(zhǔn)C語(yǔ)言的基礎(chǔ)上發(fā)展的。3.1.1 Keil C51簡(jiǎn)介Keil C51語(yǔ)言是在標(biāo)準(zhǔn)C的基礎(chǔ)上針對(duì)51單片機(jī)的硬件特點(diǎn)進(jìn)行的擴(kuò)展,并向51單片機(jī)上移植,經(jīng)多年努力,C51語(yǔ)言已成為公認(rèn)的高效、簡(jiǎn)潔的51單片機(jī)的實(shí)用高級(jí)編程語(yǔ)言。 與匯編語(yǔ)言相比,用C51語(yǔ)言進(jìn)行軟件開(kāi)發(fā),有如下優(yōu)點(diǎn):(1)可讀性好。C51語(yǔ)言程序比匯編語(yǔ)言程序的可讀性好,因而編程效率高,程序便于修改、維護(hù)以及程序升級(jí)。,4,(2)模塊化開(kāi)發(fā)與資源共享。C51

4、開(kāi)發(fā)的模塊可直接被其他項(xiàng)目所用,能很好地利用已有的標(biāo)準(zhǔn)C程序資源與豐富的庫(kù)函數(shù),減少重復(fù)勞動(dòng),也有利于多個(gè)工程師的協(xié)同開(kāi)發(fā)。(3)可移植性好。為某型單片機(jī)開(kāi)發(fā)的C51程序,只需將與硬件相關(guān)之處和編譯鏈接的參數(shù)進(jìn)行適當(dāng)修改,就可方便地移植到其它型號(hào)的單片機(jī)上。例如,為51單片機(jī)編寫的程序通過(guò)改寫頭文件以及少量的程序行,就可以方便地移植到PIC單片機(jī)上。(4)生成的代碼效率高。代碼效率比直接使用匯編語(yǔ)言低20%左右,如使用優(yōu)化編譯選項(xiàng),

5、最高可達(dá)90%左右,效果會(huì)更好。,5,3.1.2 C51與標(biāo)準(zhǔn)C的比較C51標(biāo)準(zhǔn)C語(yǔ)言有許多相同的地方,但也有自身特點(diǎn)。不同的嵌入式C語(yǔ)言編譯系統(tǒng)與標(biāo)準(zhǔn)C語(yǔ)言的不同,主要是由于它們所針對(duì)的硬件系統(tǒng)不同。對(duì)于51單片機(jī),目前廣泛使用的是Keil C51語(yǔ)言,簡(jiǎn)稱C51語(yǔ)言。C51的基本語(yǔ)法與標(biāo)準(zhǔn)C相同,C51在標(biāo)準(zhǔn)C的基礎(chǔ)上進(jìn)行了適合于51系列單片機(jī)硬件的擴(kuò)展。深入理解Keil C51對(duì)標(biāo)準(zhǔn)C的擴(kuò)展部分以及不同之處,是掌握C51語(yǔ)言

6、的關(guān)鍵之一。C51與標(biāo)準(zhǔn)C的主要區(qū)別如下:,6,(1)庫(kù)函數(shù)的不同。標(biāo)準(zhǔn)C中的部分庫(kù)函數(shù)不適合于嵌入式控制器系統(tǒng),被排除在Keil C51之外,如字符屏幕和圖形函數(shù)。有些庫(kù)函數(shù)可繼續(xù)使用,但這些庫(kù)函數(shù)都必須針對(duì)51單片機(jī)的硬件特點(diǎn)做出相應(yīng)的開(kāi)發(fā)。例如庫(kù)函數(shù)printf和scanf,在標(biāo)準(zhǔn)C中,這兩個(gè)函數(shù)通常用于屏幕打印和接收字符,而在Keil C51中,主要用于串行口數(shù)據(jù)的收發(fā)。(2)數(shù)據(jù)類型有一定的區(qū)別。在C51中增加了幾種針對(duì)5

7、1單片機(jī)特有的數(shù)據(jù)類型,在標(biāo)準(zhǔn)C的基礎(chǔ)上又?jǐn)U展了4種類型。例如,51單片機(jī)包含位操作空間和豐富的位操作指令,因此,C51語(yǔ)言與標(biāo)準(zhǔn)C相比就要增加位類型。,7,(3)C51的變量存儲(chǔ)模式與標(biāo)準(zhǔn)C中的變量存儲(chǔ)模式數(shù)據(jù)不一樣。標(biāo)準(zhǔn)C是為通用計(jì)算機(jī)設(shè)計(jì)的,計(jì)算機(jī)中只有一個(gè)程序和數(shù)據(jù)統(tǒng)一尋址的內(nèi)存空間,而C51中變量的存儲(chǔ)模式與51單片機(jī)的存儲(chǔ)器緊密相關(guān)。(4)數(shù)據(jù)存儲(chǔ)類型的不同。51單片機(jī)存儲(chǔ)區(qū)可分為內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)、外部數(shù)據(jù)存儲(chǔ)區(qū)以及程序存儲(chǔ)

8、區(qū)。內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)可分為3個(gè)不同的C51存儲(chǔ)類型:data、idata和bdata。外部數(shù)據(jù)存儲(chǔ)區(qū)分為2個(gè)不同的C51存儲(chǔ)類型:xdata和pdata。程序存儲(chǔ)區(qū)只能讀不能寫,在51單片機(jī)內(nèi)部或外部。C51提供了code存儲(chǔ)類型來(lái)訪問(wèn)程序存儲(chǔ)區(qū)。,8,(5)標(biāo)準(zhǔn)C語(yǔ)言沒(méi)有處理單片機(jī)中斷的定義。C51中有專門的中斷函數(shù)。(6)C51語(yǔ)言與標(biāo)準(zhǔn)C語(yǔ)言的輸入/輸出處理不一樣。C51語(yǔ)言中的輸入/輸出是通過(guò)51單片機(jī)的串行口來(lái)完成的,輸入/輸

9、出指令執(zhí)行前必須對(duì)串行口進(jìn)行初始化。(7)頭文件的不同。C51語(yǔ)言與標(biāo)準(zhǔn)C頭文件的差異是C51頭文件必須把51單片機(jī)內(nèi)部的外設(shè)硬件資源如定時(shí)器、中斷、I/O等所相應(yīng)的功能寄存器的寫入頭文件內(nèi)。(8)程序結(jié)構(gòu)的差異。由于51單片機(jī)硬件資源有限,它的編譯系統(tǒng)不允許太多的程序嵌套。其次,標(biāo)準(zhǔn)C所具備的遞歸特性不被C51語(yǔ)言支持。,9,但是從數(shù)據(jù)運(yùn)算操作、程序控制語(yǔ)句以及函數(shù)的使用上來(lái)說(shuō),Keil C51與標(biāo)準(zhǔn)C幾乎沒(méi)有什么明顯的差別。如

10、果程序設(shè)計(jì)者具備了有關(guān)標(biāo)準(zhǔn)C的編程基礎(chǔ),只要注意Keil C51與標(biāo)準(zhǔn)C的不同之處,并熟悉51單片機(jī)的硬件結(jié)構(gòu),就能夠較快地掌握C51的編程。 3.2 Keil C51的開(kāi)發(fā)工具Keil C51是德國(guó)Keil software公司開(kāi)發(fā)的用于51單片機(jī)的C51語(yǔ)言開(kāi)發(fā)軟件,在兼容標(biāo)準(zhǔn)C的基礎(chǔ)上,又增加了很多與51單片機(jī)硬件相關(guān)的編譯特性,使得在51系列單片機(jī)上開(kāi)發(fā)應(yīng)用程序更為方便和快捷,生成的程序代碼運(yùn)行速度快,所需的存儲(chǔ)器空間小,

11、完全可以和匯編語(yǔ)言相媲美。,10,它支持眾多的8051架構(gòu)的芯片,同時(shí)集編輯、編譯、仿真等功能于一體,具有強(qiáng)大的軟件調(diào)試功能,是眾多的單片機(jī)應(yīng)用開(kāi)發(fā)軟件中的最優(yōu)秀軟件之一。3.2.1 集成開(kāi)發(fā)環(huán)境Keil µVision3簡(jiǎn)介 Keil C51已集成到一個(gè)功能強(qiáng)大的集成開(kāi)發(fā)環(huán)境(IDE—Intergrated Development Eviroment)µVision3中,用于51單片機(jī)的Windows下的集成

12、開(kāi)發(fā)環(huán)境,提供對(duì)8051內(nèi)核的各種型號(hào)的支持,為51單片機(jī)軟件開(kāi)發(fā)提供全新的C語(yǔ)言開(kāi)發(fā)環(huán)境。該開(kāi)發(fā)環(huán)境下集成了文件編輯處理、編譯鏈接、項(xiàng)目(Project)管理、窗口、工具引用和仿真軟件模擬器以及Monitor51硬件目標(biāo)調(diào)試器等多種功能,所有功能均,11,可在Keil µVision3的開(kāi)發(fā)環(huán)境中極為簡(jiǎn)便地進(jìn)行操作。Keil µVision3完全兼容先前的Keil µVision2版本。Keil公司目前

13、已經(jīng)推出了v7.0以上版本的C51編譯器,較新的版本為Keil C51 v8.08a。經(jīng)常用到Keil C51和Keil µVision3兩個(gè)術(shù)語(yǔ)。Keil C51一般簡(jiǎn)寫為C51,指的是51單片機(jī)編程所用的C51語(yǔ)言;而Keil µVision3,可簡(jiǎn)寫為µVision3,指的是用于51單片機(jī)的C51程序編寫、調(diào)試的集成開(kāi)發(fā)環(huán)境。µVision3內(nèi)部集成了源程序編輯器,并允許用戶在編輯源文件

14、時(shí)就可設(shè)置程序調(diào)試斷點(diǎn),便于在程序調(diào)試過(guò)程中快速,檢查和修改程序。此外,µVision3還支持軟件模擬仿真(Simulator)和用戶目標(biāo)板調(diào)試(Monitor51)兩種工作方式。在軟件模擬仿真方式下不需要任何51單片機(jī)及其外圍硬件即可完成用戶程序仿真調(diào)試。在用戶目標(biāo)板調(diào)試方式下,利用硬件目標(biāo)板中的監(jiān)控程序可以直接調(diào)試目標(biāo)硬件系統(tǒng),使用戶節(jié)省購(gòu)買硬件仿真器的費(fèi)用。C51程序的程序開(kāi)發(fā)是在Keil µVision3

15、開(kāi)發(fā)環(huán)境下進(jìn)行的。開(kāi)發(fā)者可購(gòu)買Keil µVision3軟件,也可到Keil software公司的主頁(yè)免費(fèi)下載Eval(評(píng)估)版本。該版本同正式版本一樣,但有一定的限制,最終生成的代碼不能超過(guò)2KB,但用,13,于學(xué)習(xí)已足夠。開(kāi)發(fā)者還可到Keil公司網(wǎng)站申請(qǐng)免費(fèi)的軟件試用光盤。Keil µVision3內(nèi)集成了功能強(qiáng)大源程序編輯器和調(diào)試器。編輯器允許用戶在編輯源文件時(shí)就可設(shè)置程序調(diào)試斷點(diǎn),便于在程序調(diào)試過(guò)程中快速

16、檢查和修改程序,可像一般文本編輯器一樣對(duì)源代碼進(jìn)行編輯。用戶啟動(dòng)µVision3調(diào)試器之后,斷點(diǎn)即被激活。斷點(diǎn)可被設(shè)置為條件表達(dá)式、變量或存儲(chǔ)器訪問(wèn),斷點(diǎn)被觸發(fā)后,調(diào)試器的命令或調(diào)試功能即可執(zhí)行,因此可在編輯器內(nèi)調(diào)試程序,快速地檢查和修改程序。還可在編輯器中選中變量和存儲(chǔ)器來(lái)觀察其值。并可以在雙層窗口中顯示,還可對(duì)其進(jìn)行適當(dāng),14,的調(diào)整。此外,µVision3調(diào)試器具有符號(hào)調(diào)試特性以及歷史跟蹤,代碼覆蓋,復(fù)雜斷點(diǎn)

17、等功能。Keil µVision環(huán)境下還有串口調(diào)試器軟件comdebug.exe,用于在電腦端能夠看到單片機(jī)發(fā)出的數(shù)據(jù),串口調(diào)試器軟件無(wú)需安裝,可直接運(yùn)行這個(gè)軟件。若讀者需要最新版,可到有關(guān)搜索網(wǎng)站輸入關(guān)鍵詞“串口調(diào)試器”,找到一個(gè)合適的下載網(wǎng)站,可即下載“串口調(diào)試器”的最新版本。當(dāng)然,使用Windows自帶的“超級(jí)終端”也是不錯(cuò)的選擇。,15,3.2.2 Keil µVision3軟件的安裝、啟動(dòng)和運(yùn)行1.

18、軟件安裝集成開(kāi)發(fā)環(huán)境安裝,同大多數(shù)軟件安裝一樣,根據(jù)提示進(jìn)行。安裝完畢后,可在桌面上看到Keil µVision3的快捷圖標(biāo)。2. 軟件啟動(dòng)點(diǎn)擊桌面上的Keil µVision3軟件的快捷圖標(biāo),即可啟動(dòng)該軟件,幾秒種后,出現(xiàn)編輯界面。3. 軟件的運(yùn)行Keil µVision3把用戶的每一個(gè)應(yīng)用程序設(shè)計(jì)都當(dāng)作一個(gè)項(xiàng)目,,16,用項(xiàng)目管理方法可把一個(gè)應(yīng)用程序設(shè)計(jì)中所用到的、互相關(guān)聯(lián)的程序鏈接在同一項(xiàng)目

19、中。打開(kāi)一個(gè)項(xiàng)目時(shí),所需要的關(guān)聯(lián)程序也都進(jìn)入了調(diào)試窗口,方便用戶對(duì)項(xiàng)目中各程序的編寫、調(diào)試和存儲(chǔ)。用戶也可能開(kāi)發(fā)了多個(gè)項(xiàng)目,每個(gè)項(xiàng)目用到了相同或不同的程序文件和庫(kù)文件,采用項(xiàng)目管理,就很容易區(qū)分不同項(xiàng)目中所用到的程序文件和庫(kù)文件,非常容易管理。因此,在編寫一個(gè)新的應(yīng)用程序前,一定先要建立項(xiàng)目。下面首先介紹如何建立一個(gè)新的項(xiàng)目。在編輯界面下,首先要建立一個(gè)點(diǎn)擊“Project”菜單,選擇下拉式菜單中的“New Project”,彈出文

20、件對(duì)話窗口,選擇要,17,保存的路徑,在“文件名”中輸入一個(gè)程序項(xiàng)目名稱,保存后的文件擴(kuò)展名為“.uv2”,這是Keil µVision3項(xiàng)目文件的擴(kuò)展名,以后可直接點(diǎn)擊此文件就可打開(kāi)先前做的項(xiàng)目。點(diǎn)擊“保存”后,這是會(huì)彈出一個(gè)對(duì)話框,要求選擇單片機(jī)的型號(hào),用戶可根據(jù)所使用的單片機(jī)來(lái)選擇。Keil µVision3支持幾乎所有的51內(nèi)核單片機(jī)。 然后編寫第一個(gè)程序。點(diǎn)擊“File”菜單,單擊“New” 。這時(shí),用

21、戶可輸入代碼。輸入完畢,單擊菜單上的“File”,在下拉菜單中單擊“Save As”,在“文件名”欄的編輯框中,鍵入文件名,同時(shí),必須鍵入正確的擴(kuò)展名(.C或.ASM),然后,單擊“保存”按鈕。,18,上述工作完成后,還有有關(guān)項(xiàng)目的設(shè)置,程序的編譯,鏈接,調(diào)試。這些內(nèi)容,可按照Keil µVision3開(kāi)發(fā)環(huán)境的幫助功能。3.3 C51語(yǔ)言程序設(shè)計(jì)基礎(chǔ)在標(biāo)準(zhǔn)C的基礎(chǔ)上了解掌握C51的數(shù)據(jù)類型和存儲(chǔ)類型、基本運(yùn)算與流程控制

22、語(yǔ)句、C51語(yǔ)言構(gòu)造數(shù)據(jù)類型、C51函數(shù)以及C51程序設(shè)計(jì)的其它問(wèn)題,為C51程序設(shè)計(jì)打下基礎(chǔ)。3.3.1 C51語(yǔ)言中的數(shù)據(jù)類型與存儲(chǔ)類型1. 數(shù)據(jù)類型數(shù)據(jù)是單片機(jī)操作的對(duì)象,是具有一定格式的數(shù)字或數(shù)值,,19,數(shù)據(jù)的不同格式就稱為數(shù)據(jù)類型。 Keil C51支持的基本數(shù)據(jù)類型如表3-1所示。針對(duì)AT89S51單片機(jī)的硬件特點(diǎn),C51在標(biāo)準(zhǔn)C的基礎(chǔ)上,擴(kuò)展了4種數(shù)據(jù)類型(表3-1中最后4行)。注意:擴(kuò)展的4種數(shù)據(jù)類型,不能使

23、用指針對(duì)它們存取。,20,2. C51的擴(kuò)展數(shù)據(jù)類型對(duì)擴(kuò)展的4種數(shù)據(jù)類型說(shuō)明。(1)位變量bitbit的值可以是1(true), 也可以是0(false)。(2)特殊功能寄存器sfr特殊功能寄存器分布在片內(nèi)數(shù)據(jù)存儲(chǔ)區(qū)的地址單元80H~FFH之間,“sfr” 數(shù)據(jù)類型占用一個(gè)內(nèi)存單元。利用它可以訪問(wèn)AT89S51單片機(jī)內(nèi)部的所有特殊功能寄存器。例如:sfr P1=0x90這一語(yǔ)句定義了P1端口在片內(nèi)的寄存器,在程序后續(xù)的語(yǔ)句中可

24、以用“P1=0xff”使P1的所有引腳輸出為高電平之類的語(yǔ)句來(lái)操作特殊功能寄存器。,22,(3)特殊功能寄存器sfr16“sfr16”數(shù)據(jù)類型占兩個(gè)內(nèi)存單元。它用于操作占兩個(gè)字節(jié)的特殊功能寄存器。例如: “sfr16 DPTR=0x82”語(yǔ)句定義了片內(nèi)16位數(shù)據(jù)指針寄存器DPTR,其低8位字節(jié)地址為82H,高8位字節(jié)地址為83H。(4)特殊功能位 sbitsbit—片內(nèi)特殊功能寄存器的可尋址位。例如: sfr PSW=0

25、xd0;/*定義PSW寄存器地址為0xd0*/sbit PSW^2 = 0xd2;/*定義OV位為PSW.2*/符號(hào)“^”前是特殊功能寄存器的名字,“^”的后面數(shù)字是特殊功能寄存器可尋址位在寄存器中的位置,取值必須是0~7。,23,注意,不要把bit與sbit混淆。bit是定義普通的位變量,值只能是二進(jìn)制的0或1。而sbit定義的是特殊功能寄存器的可尋址位,它的值是可進(jìn)行位尋址的特殊功能寄存器的某位的絕對(duì)地址,例如,PSW

26、寄存器OV位的絕對(duì)地址0xd2。 3. 數(shù)據(jù)存儲(chǔ)類型在討論C51的數(shù)據(jù)類型時(shí),必須同時(shí)提及它的存儲(chǔ)類型,以及它與51單片機(jī)存儲(chǔ)器結(jié)構(gòu)的關(guān)系,因?yàn)镃51定義的任何數(shù)據(jù)類型必須以一定的方式定位在51單片機(jī)的某一存儲(chǔ)區(qū)中,否則沒(méi)有任何實(shí)際意義。51單片機(jī)有片內(nèi)、外數(shù)據(jù)存儲(chǔ)區(qū),還有程序存儲(chǔ)區(qū)。51單片機(jī)片內(nèi)的數(shù)據(jù)存儲(chǔ)區(qū)是可讀寫的,51單片機(jī)的衍生系列最多可,24,有256個(gè)字節(jié)的內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū),其中低128字節(jié)可直接尋址,高128字節(jié)(8

27、0H~FFH)只能間接尋址,從20H開(kāi)始的16字節(jié)可位尋址。內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)可分為3個(gè)不同的數(shù)據(jù)存儲(chǔ)類型:data、idata和bdata。訪問(wèn)片外數(shù)據(jù)存儲(chǔ)區(qū)比訪問(wèn)片內(nèi)數(shù)據(jù)存儲(chǔ)區(qū)慢,因?yàn)槠鈹?shù)據(jù)存儲(chǔ)區(qū)是通過(guò)數(shù)據(jù)指針加載地址來(lái)間接尋址訪問(wèn)的。C51提供兩種不同數(shù)據(jù)存儲(chǔ)類型xdata和pdata來(lái)訪問(wèn)片外數(shù)據(jù)存儲(chǔ)區(qū)。程序存儲(chǔ)區(qū)只能讀不能寫,可能在51單片機(jī)內(nèi)部或者外部,或者外部和內(nèi)部都有,由51單片機(jī)的硬件決定,C51提供了code存儲(chǔ)類

28、型來(lái)訪問(wèn)程序存儲(chǔ)區(qū)。,25,C51存儲(chǔ)類型與AT89S51單片機(jī)實(shí)際的存儲(chǔ)空間的對(duì)應(yīng)關(guān)系如表3-2所示。,26,下面對(duì)表3-2中的各種存儲(chǔ)區(qū)作以說(shuō)明。(1)DATA區(qū)。尋址是最快的,應(yīng)該把經(jīng)常使用的變量放在DATA區(qū),但是DATA區(qū)的存儲(chǔ)空間是有限的,DATA區(qū)除了包含程序變量外,還包含了堆棧和寄存器組。DATA區(qū)聲明中的存儲(chǔ)類型標(biāo)識(shí)符為data,通常指片內(nèi)RAM的128字節(jié)的內(nèi)部數(shù)據(jù)存儲(chǔ)的變量,可直接尋址。聲明舉例如下:uns

29、igned char data system_status=0;unsigned int data unit_id[8];char data inp_string[20];,標(biāo)準(zhǔn)變量和用戶自聲明變量都可存儲(chǔ)在DATA區(qū)中,只要不超過(guò)DATA區(qū)的范圍即可。由于C51使用默認(rèn)的寄存器組來(lái)傳遞參數(shù),這樣DATA區(qū)至少失去了8字節(jié)的空間。另外,當(dāng)內(nèi)部堆棧溢出的時(shí)候,程序會(huì)莫名其妙地復(fù)位。這是因?yàn)?1單片機(jī)沒(méi)有報(bào)錯(cuò)的機(jī)制,堆棧的溢出只能以

30、這種方式表示,因此要留有較大的堆??臻g來(lái)防止堆棧溢出。(2)BDATA區(qū)。是DATA中的位尋址區(qū),在這個(gè)區(qū)中聲明變量就可進(jìn)行位尋址。BDATA區(qū)聲明中的存儲(chǔ)類型標(biāo)識(shí)符為bdata,指的是內(nèi)部RAM可位尋址的16字節(jié)存儲(chǔ)區(qū)(字節(jié)地址為20H~2FH)中的128個(gè)位。下面是在BDATA區(qū)中聲明的位變量和使用位變量的例子:,28,unsigned char bdata status_byte;unsigned int bdata st

31、atus_word;sbit stat_flag= status_byte^4;if(status_word^15){ …… }stat_flag=1;C51編譯器不允許在BDATA區(qū)中聲明float和double型變量。(3)IDATA區(qū)。IDATA區(qū)使用寄存器作為指針來(lái)進(jìn)行間接尋址,常用來(lái)存放使用比較頻繁的變量。與外部存儲(chǔ)器尋址相比,它的指令執(zhí)行周期和代碼長(zhǎng)度相對(duì)較短。IDATA區(qū)聲明中的存儲(chǔ)類型標(biāo)識(shí)符為ida

32、ta,指的是片內(nèi)RAM的256字節(jié)的存儲(chǔ)區(qū),只能間接尋址,速度比直接尋址慢。聲明舉例如下:,29,unsigned char idata system_status=0;unsigned int idata unit_id[8];char idata inp_string[16];float idata out_value; (4)PDATA區(qū)和XDATA區(qū)。PDATA區(qū)和XDATA區(qū)位于片外存儲(chǔ)區(qū),PDATA區(qū)和XDA

33、TA區(qū)聲明中的存儲(chǔ)類型標(biāo)識(shí)符分別為pdata和xdata。PDATA區(qū)只有256字節(jié),僅指定256字節(jié)的外部數(shù)據(jù)存儲(chǔ)區(qū)。但XDATA區(qū)最多可達(dá)64KB,對(duì)應(yīng)的xdata存儲(chǔ)類型標(biāo)識(shí)符可以指定外部數(shù)據(jù)區(qū)64KB內(nèi)的任何地址。對(duì)PDATA區(qū)的尋址要比對(duì)XDATA區(qū)尋址快,因?yàn)閷?duì)PDATA區(qū),尋址,只需要裝入8位地址,而對(duì)XDATA區(qū)尋址要裝入16位地址,所以要盡量把外部數(shù)據(jù)存儲(chǔ)在PDATA區(qū)中。對(duì)PDATA區(qū)和XDATA區(qū)的聲明舉例如

34、下:unsigned char xdata system_status=0;unsigned int pdata unit_id[8];char xdata inp_string[16];float pdata out_value;由于外部數(shù)據(jù)存儲(chǔ)器與外部I/O口是統(tǒng)一編址的,外部數(shù)據(jù)存儲(chǔ)器地址段中除了包含存儲(chǔ)器地址外,還包含外部I/O口的地址。對(duì)外部數(shù)據(jù)存儲(chǔ)器及外部I/O口的尋址將在后面的絕對(duì)地址尋址中詳細(xì)介紹。,3

35、1,(5)程序存儲(chǔ)區(qū)CODE。程序存儲(chǔ)區(qū)CODE聲明的標(biāo)識(shí)符為code,儲(chǔ)存的數(shù)據(jù)是不可改變的。在C51編譯器中可以用存儲(chǔ)區(qū)類型標(biāo)識(shí)符code來(lái)訪問(wèn)程序存儲(chǔ)區(qū)。聲明舉例如下:unsigned char code a[ ] ={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};以上介紹了C51的數(shù)據(jù)存儲(chǔ)類型,C51的數(shù)據(jù)存儲(chǔ)類型及其大小和值域如表3-3所示。,32,33,單片機(jī)訪問(wèn)片內(nèi)RA

36、M比訪問(wèn)片外RAM相對(duì)快一些,所以應(yīng)當(dāng)盡量把頻繁使用的變量置于片內(nèi)RAM。即采用data、bdata或idata存儲(chǔ)類型,而將容量較大的或使用不太頻繁的那些變量置于片外RAM,即采用pdata或xdata存儲(chǔ)類型。常量只能采用code存儲(chǔ)類型。變量存儲(chǔ)類型定義舉例:(1)char data a1;/*字符變量a1被定義為data型,分配在片內(nèi)RAM低128字節(jié)中*/(2)float idata x,y;/*浮點(diǎn)型變量x和y被

37、定義為idata型,定位在片內(nèi)RAM中,只能用間接尋址方式尋址*/,34,(3)bit bdata p;/*位變量p被定義為bdata型,定位在片內(nèi)RAM中的位尋址區(qū)*/(4)unsigned int pdata var1;/*無(wú)符號(hào)整型變量var1被定義為pdata型,定位在片外RAM中,相當(dāng)于使用@Ri間接尋址*/(5)unsigned char xdata a[2] [4];/*無(wú)符號(hào)字符型二維數(shù)組變量a[2][4]被

38、定義為xdata存儲(chǔ)類型,定位在片外RAM中,占據(jù)2?4=8個(gè)字節(jié),相當(dāng)于使用@DPTR間接尋址*/,35,4.?dāng)?shù)據(jù)存儲(chǔ)模式如在變量定義時(shí)略去存儲(chǔ)類型標(biāo)識(shí)符,編譯器會(huì)自動(dòng)默認(rèn)存儲(chǔ)類型。默認(rèn)的存儲(chǔ)類型進(jìn)一步由SMALL、COMPACT和LARGE存儲(chǔ)模式指令限制。例如,若聲明char var1,則在使用SMALL存儲(chǔ)模式下,var1被定位在data存儲(chǔ)區(qū),在使用COMPACT模式下,var1被定位在idata存儲(chǔ)區(qū);在LARGE模式下,

39、var1被定位在xdata存儲(chǔ)區(qū)中。 在固定的存儲(chǔ)器地址上進(jìn)行變量的傳遞,是C51標(biāo)準(zhǔn)特征之一。在SMALL模式下,參數(shù)傳遞是在片內(nèi)數(shù)據(jù)存儲(chǔ)區(qū)中完成的。LARGE和COMPACT模式允許參數(shù)在外部存儲(chǔ)器中傳遞。C51也支持混合模式。例如,在LARGE模式下,生成的程序,36,可以將一些函數(shù)放入SMALL模式中,從而加快執(zhí)行速度。下面對(duì)存儲(chǔ)模式作進(jìn)一步的說(shuō)明。(1)SMALL模式。本模式,所有變量都默認(rèn)位于51單片機(jī)內(nèi)部的數(shù)據(jù)存儲(chǔ)器,

40、這與使用data指定存儲(chǔ)器類型的方式一樣。本模式,變量訪問(wèn)的效率高,但所有數(shù)據(jù)對(duì)象和堆棧必須使用內(nèi)部RAM。(2)COMPACT模式。本模式,所有變量都默認(rèn)在外部數(shù)據(jù)存儲(chǔ)器的1頁(yè)內(nèi),這與使用pdata指定存儲(chǔ)器類型是一樣的。該存儲(chǔ)器類型適用于變量不超過(guò)256字節(jié)的情況,此限制是由尋址方式?jīng)Q定,相當(dāng)用數(shù)據(jù)指針@Ri進(jìn)行尋址。與SMALL模式相比,該存儲(chǔ)模式的效率比較低,對(duì)變量訪問(wèn)的速度也慢一些,但比LARGE模式快。,37,(3)LAR

41、GE模式。在LARGE模式中,所有變量都默認(rèn)位于外部數(shù)據(jù)存儲(chǔ)器,相當(dāng)于使用數(shù)據(jù)指針@DPTR進(jìn)行尋址。通過(guò)數(shù)據(jù)指針訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器的效率較低,特別是當(dāng)變量為2字節(jié)或更多字節(jié)時(shí),該模式要比SMALL和COMPACT產(chǎn)生更多的代碼。3.3.2 C51語(yǔ)言的特殊功能寄存器及位變量定義介紹C51如何對(duì)特殊功能寄存器以及位變量進(jìn)行定義并訪問(wèn)。1.特殊功能寄存器的C51定義C51語(yǔ)言允許使用關(guān)鍵字sfr、sbit或直接引用編譯器提供的頭

42、文件來(lái)對(duì)特殊功能寄存器(SFR)進(jìn)行訪問(wèn),特殊功能寄存器在片內(nèi)RAM的高128字節(jié),只能采用直接尋址方式。,38,(1) 使用關(guān)鍵字定義sfr為了能直接訪問(wèn)特殊功能寄存器SFR,C51語(yǔ)言提供了一種定義方法,即引入關(guān)鍵字sfr,語(yǔ)法如下:sfr 特殊功能寄存器名字=特殊功能寄存器地址;例如:sfrIE=0xA8;/*中斷允許寄存器地址A8H*/sfrTCON=0x88;/*定時(shí)器/計(jì)數(shù)器控制寄存器地址88H*/sf

43、rSCON=0x98;/*串行口控制寄存器地址98H*/例如要訪問(wèn)16位SFR,可使用關(guān)鍵字sfr16。16位SFR的低,39,字節(jié)地址必須作為“sfr16”的定義地址,例如:sfr16 DPTR=0x82/*數(shù)據(jù)指針DPTR 的低8位地址為82H,高8位地址為83H*/ (2) 通過(guò)頭文件訪問(wèn)SFR各種衍生型的51單片機(jī)的特殊功能寄存器的數(shù)量與類型有時(shí)是不相同的,對(duì)單片機(jī)特殊功能寄存器的訪問(wèn)可以通過(guò)頭文件的訪問(wèn)來(lái)進(jìn)行。

44、為了用戶處理方便,C51語(yǔ)言把51單片機(jī)(或52單片機(jī))的常用的特殊功能寄存器和其中的可尋址位進(jìn)行了定義,放在一個(gè)reg51.h(或reg52.h)的頭文件中。當(dāng)用戶要使用,40,時(shí),只需在使用之前用一條預(yù)處理命令#include把這個(gè)頭文件包含到程序中,就可以使用特殊功能寄存器名和其中的可尋址位名稱了。用戶可以通過(guò)文本編輯器對(duì)頭文件進(jìn)行增減。頭文件引用舉例如下:#include/*頭文件為51型單片機(jī)的頭文件* /void

45、 main(void){TL0=0xF0;/*給定時(shí)器T0低字節(jié)TL0設(shè)置時(shí)間常數(shù),已在reg51.h中定義*/TH0=0x3F;/*給T0高字節(jié)TH0設(shè)時(shí)間常數(shù)*/TR0=1;/*啟動(dòng)定時(shí)器0 */……},41,(3) 特殊功能寄存器中的位定義對(duì)SFR中的可尋址位的訪問(wèn),要使用關(guān)鍵字來(lái)定義可尋址位,共有3種方法。① sbit 位名=特殊功能寄存器^位置;例如:sfr PSW=0xD0;

46、/*定義PSW 寄存器的字節(jié)地址0xD0H*/sbit CY= PSW^7; /*定義CY位為PSW.7,地址為0xD0*/sbit OV= PSW^2; /*定義OV位為PSW.2,地址為0xD2*/② sbit 位名=字節(jié)地址^位置; 例如:sbit CY= 0xD0^7;/* CY位地址為0xD7*/sbit OV= 0xD0^2;/* OV位地址為0xD2*/,42,③ sbit 位名=位

47、地址; 這種方法將位的絕對(duì)地址賦給變量,位地址必須在0x80~0xFF之間。例如:sbit CY= 0xD7;/* CY位地址為0xD7*/sbit OV= 0xD2; /* OV位地址為0xD2*/【例】片內(nèi)I/O口P1口的各尋址位的定義如下:sfr P1=0x90; sbit P1_7= P1^7; sbit P1_6= P1^6; sbit P1_5= P1^5;

48、sbit P1_4= P1^4;,43,sbit P1_3= P1^3; sbit P1_2= P1^2; sbit P1_1= P1^1; sbit P1_0= P1^0;2. 位變量的C51定義(1) 位變量的C51定義由于51單片機(jī)能夠進(jìn)行位操作,C51擴(kuò)展的“bit”數(shù)據(jù)類型用來(lái)定義位變量,這是C51與標(biāo)準(zhǔn)C的不同之處。C51采用關(guān)鍵字“bit”來(lái)定義位變量,一般格式為:bit bit_

49、name;例如:,44,bit ov_flag;/* 將ov_flag定義為位變量*/bit lock_pointer;/* 將lock_pointer定義為位變量*/ (2) 函數(shù)可以包含類型為bit的參數(shù),也可將其作為返回值C51程序函數(shù)可以包含類型為“bit”的參數(shù),也可將其作為返回值。例如:bit func(bit b0, bit b1);/* 位變量b0與b1作為函數(shù)func的參數(shù)*/{……re

50、turn(b1);/* 位變量b1作為函數(shù)的返回值*/},45,(3) 位變量定義的限制位變量不能用來(lái)定義指針和數(shù)組。例如:bit *ptr; /* 錯(cuò)誤,不能用位變量來(lái)定義指針*/bit array[ ];/* 錯(cuò)誤,不能用位變量來(lái)定義數(shù)組array[ ]*/在定義位變量時(shí),允許定義存儲(chǔ)類型,位變量都被放入一個(gè)位段,此段總是位于51單片機(jī)的片內(nèi)RAM中,因此其存儲(chǔ)類型限制為DATA 或IDATA,如果將位變量

51、定義成其他類型都會(huì)導(dǎo)致編譯時(shí)出錯(cuò)。,46,3.3.3 C51語(yǔ)言的絕對(duì)地址訪問(wèn)如何對(duì)51單片機(jī)的片內(nèi)RAM、片外RAM及I/O進(jìn)行訪問(wèn),C51語(yǔ)言提供了兩種比較常用的訪問(wèn)絕對(duì)地址的方法。1. 絕對(duì)宏C51編譯器提供了一組宏定義來(lái)對(duì)code、data、pdata和xdata空間進(jìn)行絕對(duì)尋址。在程序中,用“#include”來(lái)對(duì)absacc.h中聲明的宏來(lái)訪問(wèn)絕對(duì)地址,包括CBYTE、CWORD、DBYTE、DWORD、XBYTE、

52、XWORD、PBYTE、PWORD,具體使用方法參考absacc.h頭文件。其中:,47,CBYTE以字節(jié)形式對(duì)code區(qū)尋址;CWORD以字形式對(duì)code區(qū)尋址;DBYTE以字節(jié)形式對(duì)data區(qū)尋址;DWORD以字形式對(duì)data區(qū)尋址;XBYTE以字節(jié)形式對(duì)xdata區(qū)尋址;XWORD以字形式對(duì)xdata區(qū)尋址;PBYTE以字節(jié)形式對(duì)pdata區(qū)尋址;PWORD以字形式對(duì)pdata區(qū)尋址。例如:,48,#include

53、#define PORTA XBYTE[0xFFC0] /*將PORTA定義為外部I/O口,地址為0xFFC0,長(zhǎng)度8位*/#define NRAM DBYTE[0x50]/*將NRAM定義為片內(nèi)RAM,地址為0x50,長(zhǎng)度8位*/【例】片內(nèi)RAM、片外RAM及I/O的定義的程序如下:#include#define PORTA XBYTE[0xFFC0] /*將PORTA定義為外部I/O口,地址為0xFFC0*/#def

54、ine NRAM DBYTE[0x40] /*將NRAM定義為片內(nèi)RAM,地址為0x40*/,49,main( ){ PORTA=0x3D; /*數(shù)據(jù)3DH寫入地址0xFFC0的外部I/O端口PORTA */NRAM=0x01; /*將數(shù)據(jù)01H寫入片內(nèi)RAM的40H單元*/}2. _at_關(guān)鍵字使用關(guān)鍵字_at_可對(duì)指定的存儲(chǔ)器空間的絕對(duì)地址進(jìn)行訪問(wèn),格式如下:[存儲(chǔ)器類型] 數(shù)據(jù)類型說(shuō)明符 變量名

55、 _at_地址常數(shù)其中,存儲(chǔ)器類型為C51語(yǔ)言能識(shí)別的數(shù)據(jù)類型;數(shù)據(jù)類型為C51支持的數(shù)據(jù)類型;地址常數(shù)用于指定變量的絕對(duì)地址,必須位于有效的存儲(chǔ)器空間之內(nèi);使用_at_定義的變量必須為全局變量。,50,【例】使用關(guān)鍵字_at_實(shí)現(xiàn)絕對(duì)地址的訪問(wèn),程序如下:void main(void){ data unsigned char y1_at_0x50; /*在data 區(qū)定義字節(jié)變量y1,它的地址為50H*/xdata u

56、nsigned int y2_at_0x4000; /*在xdata區(qū)定義字變量y2,地址為4000H*/y1=0xff;y1=0x1234;……while(1);},51,【例】將片外RAM 2000H開(kāi)始的連續(xù)20個(gè)字節(jié)單元清0。程序如下:xdata unsigned char buffer[20]_at_0x2000;void main(void){ unsigned char i;for(i=0; i<

57、;20; i++){ buffer[i]=0}} 如果把片內(nèi)RAM 40H單元開(kāi)始的8個(gè)單元內(nèi)容清0,則程序如下:xdata unsigned char buffer[8]_at_0x40;void main(void){ unsigned char j ;for(j=0; j<8; j++){buffer[j]=0,52,}}3.3.4 C51的基本運(yùn)算C51語(yǔ)言的基本運(yùn)算與標(biāo)準(zhǔn)C類似,主

58、要包括算術(shù)運(yùn)算、關(guān)系運(yùn)算、邏輯運(yùn)算、位運(yùn)算和賦值運(yùn)算及其表達(dá)式等。1. 算術(shù)運(yùn)算符算術(shù)運(yùn)算的算術(shù)運(yùn)算符及其說(shuō)明如表3-4所示。,53,54,讀者對(duì)表3-4中的運(yùn)算符“+、-、*”,運(yùn)算比較熟悉,但是對(duì)于“/”和“%”往往會(huì)有疑問(wèn)。這兩個(gè)符號(hào)都涉及除法運(yùn)算,但“/”運(yùn)算是取商,而“%” 運(yùn)算為取余數(shù)。例如“5/3”的結(jié)果(商)為1,而“5%3”的結(jié)果為2(余數(shù))。表3-4中的自增和自減運(yùn)算符是使變量自動(dòng)加1或減1,自增和自減運(yùn)算符放在

59、變量前和變量之后是不同的。例如:++i,--i:在使用i之前,先使i值加(減)1。i++,i--:在使用i之后,再使i值加(減)1。例如:若i=4,則執(zhí)行x=++i時(shí),先使i加1,再引用結(jié)果,即x=5,運(yùn)算結(jié)果為i=5,x=5。再如:若i=4,則執(zhí)行x=i++時(shí),先引用i值,即x=4,再使i加1,運(yùn)算結(jié)果為i=5,x=4。,55,2. 邏輯運(yùn)算符邏輯運(yùn)算符及其說(shuō)明如表3-5所示。,56,3. 關(guān)系運(yùn)算符關(guān)系運(yùn)算符就是判斷兩個(gè)

60、數(shù)之間的關(guān)系。關(guān)系運(yùn)算符及其說(shuō)明如表3-6所示。,57,4. 位運(yùn)算位運(yùn)算符及其說(shuō)明如表3-7所示。,58,在實(shí)際的控制應(yīng)用中,人們常常想要改變I/O口中的某一位的值,而不影響其它位,如果I/O口是可位尋址的,這個(gè)問(wèn)題就很簡(jiǎn)單。但有時(shí)外擴(kuò)的I/O口只能進(jìn)行字節(jié)操作,因此要想在這種場(chǎng)合下實(shí)現(xiàn)單獨(dú)的位控,就要采用位操作?!纠?編寫程序?qū)U(kuò)展的某I/O口PORTA(只能字節(jié)操作)的PORTA.5清0 ,PORTA.1置為1,程序如下:

61、#define #define PORTA XBYTE[0xFFC0]void main( ){……PORTA=( PORTA&0xDF)│0x02;……},上面程序段中,第1行定義了一個(gè)片外I/O口變量PORTA,其地址為片外數(shù)據(jù)存儲(chǔ)區(qū)的0xFFC0。在main( )函數(shù)中,“PORTA=( PORTA&0xDF)│0x02”的作用是先用運(yùn)算符“&”將PORTA.5置成0,然后再用“│0x02”

62、運(yùn)算將PORTA.1置為1。5.指針和取地址運(yùn)算符指針是C語(yǔ)言中一個(gè)十分重要的概念,將在后面介紹。在這里,先來(lái)了解C語(yǔ)言中提供的兩個(gè)專門用于指針和取地址運(yùn)算符,如表3-8所示。,取內(nèi)容和取地址的一般形式分別為:變量=*指針變量指針變量=&目標(biāo)變量 取內(nèi)容運(yùn)算是將指針變量所指向的目標(biāo)變量的值賦給左邊的變量;取地址運(yùn)算是將目標(biāo)變量的地址賦給左邊的變量。注意,指針變量中只能存放地址(也就是指針型數(shù)據(jù)),一般情況下不要將非

63、指針類型的數(shù)據(jù)賦值給一個(gè)指針變量。,3.3.5 C51的分支與循環(huán)程序結(jié)構(gòu)在C51的程序結(jié)構(gòu)上可以把程序分為三類,即順序、分支和循環(huán)結(jié)構(gòu)。順序結(jié)構(gòu)是程序的基本結(jié)構(gòu),程序自上而下,從main()的函數(shù)開(kāi)始一直到程序運(yùn)行結(jié)束,程序只有一條路可走,沒(méi)有其它的路徑可以選擇。順序結(jié)構(gòu)比較簡(jiǎn)單和便于理解,這里僅介紹分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。3.3.5.1 分支控制語(yǔ)句實(shí)現(xiàn)分支控制的語(yǔ)句有:if語(yǔ)句和switch語(yǔ)句。,1. if語(yǔ)句if語(yǔ)句是

64、用來(lái)判定所給定的條件是否滿足,根據(jù)判定結(jié)果決定執(zhí)行兩種操作之一。if語(yǔ)句的基本結(jié)構(gòu)如下:if (表達(dá)式) {語(yǔ)句}括號(hào)中的表達(dá)式成立時(shí),程序執(zhí)行大括號(hào)內(nèi)的語(yǔ)句,否則程序跳過(guò)大括號(hào)中的語(yǔ)句部分,而直接執(zhí)行下面其它語(yǔ)句。C51語(yǔ)言提供3種形式的if語(yǔ)句:(1) 形式1 if (表達(dá)式) {語(yǔ)句},例如:if (x>y) {max=x; min=y;}即如果x>y,則x賦給max,y賦給min。如

65、果x>y不成立,則不執(zhí)行大括號(hào)中的賦值運(yùn)算。(2) 形式2if (表達(dá)式) {語(yǔ)句1;} else {語(yǔ)句2;} 例如: if (x>y) {max=x; } else {min=y;}本形式相當(dāng)于雙分支選擇結(jié)構(gòu)。,(3) 形式3if (表達(dá)式1) {語(yǔ)句1;}else if (表達(dá)式2) {語(yǔ)句2;}else if (表達(dá)式3) {語(yǔ)句3;}……else {語(yǔ)句n;}例如:

66、if (x>100) {y=1;}else if (x>50) {y=2;}else if (x>30) {y=3;}else if (x>20) {y=4;}else {y=5;}本形式相當(dāng)于串行多分支選擇結(jié)構(gòu)。在if語(yǔ)句中又含有一個(gè)或多個(gè)if語(yǔ)句,這稱為if語(yǔ)句的嵌套。應(yīng)當(dāng)注意if與else的對(duì)應(yīng)關(guān)系,else總是與它前面最近的一個(gè)if語(yǔ)句相對(duì)應(yīng)。,2. switch語(yǔ)句if語(yǔ)句只有

67、兩個(gè)分支可供選擇,而switch語(yǔ)句是多分支選擇語(yǔ)句。switch語(yǔ)句的一般形式如下:switch (表達(dá)式1) {case 常量表達(dá)式1:{語(yǔ)句1;}break;case 常量表達(dá)式2:{語(yǔ)句2;}break;……case 常量表達(dá)式n:{語(yǔ)句n;}break;default:{語(yǔ)句n+1;}}上述switch語(yǔ)句的說(shuō)明如下:(1)每一個(gè)case的常量表達(dá)式必須是互不相同的,否則將出現(xiàn)混亂。,(2)各個(gè)c

68、ase和default出現(xiàn)的次序,不影響程序執(zhí)行的結(jié)果。(3)switch括號(hào)內(nèi)的表達(dá)式的值與某case后面常量表達(dá)式的值相同時(shí),就執(zhí)行它后面的語(yǔ)句,遇到break語(yǔ)句則退出switch語(yǔ)句。若所有的case中的常量表達(dá)式的值都沒(méi)有與switch語(yǔ)句表達(dá)式的值相匹配時(shí),就執(zhí)行default后面的語(yǔ)句。(4)如果在case語(yǔ)句中遺忘了break語(yǔ)句,則程序執(zhí)行了本行之后,不會(huì)按規(guī)定退出switch語(yǔ)句,而是將執(zhí)行后續(xù)的case語(yǔ)句。在

69、執(zhí)行一個(gè)case分支后,使流程跳出switch結(jié)構(gòu),即中止switch語(yǔ)句的執(zhí)行,可以用一個(gè)break語(yǔ)句完成。switch語(yǔ)句的最后一個(gè)分支可以不加break語(yǔ)句,結(jié)束后直接退出switch結(jié)構(gòu)。,【例】在單片機(jī)程序設(shè)計(jì)中,常用switch語(yǔ)句作為鍵盤中按鍵按下的判別,并根據(jù)按下鍵的鍵號(hào)跳向各自的分支處理程序。input: keynum=keyscan( )switch(keynum);break;{case 1:key1

溫馨提示

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

評(píng)論

0/150

提交評(píng)論