第3章 KeilC語言及其程序設(shè)計(jì)_第1頁
第3章 KeilC語言及其程序設(shè)計(jì)_第2頁
第3章 KeilC語言及其程序設(shè)計(jì)_第3頁
第3章 KeilC語言及其程序設(shè)計(jì)_第4頁
第3章 KeilC語言及其程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第三章 單片機(jī)的C51語言 3.1.1 C51語言概述【P60】 C51是在標(biāo)準(zhǔn)C的基礎(chǔ)上,根據(jù)單片機(jī)存儲(chǔ)器硬件結(jié)構(gòu)及內(nèi)部資源,擴(kuò)展了相應(yīng)的數(shù)據(jù)類型和變量,而C51在語法規(guī)定、程序結(jié)構(gòu)與設(shè)計(jì)方法上,都與標(biāo)準(zhǔn)C基本相同。Keil C語言的編譯器及編譯過程如圖3-1所示。圖3-1 Keil C語言的編譯器及編譯過程C語言是美國國家標(biāo)準(zhǔn)協(xié)會(huì)(ANSI)制定的編程語言標(biāo)準(zhǔn),1987年ANSI公布87 ANSI C,即標(biāo)準(zhǔn)C語言。Keil C51語言是在ANSI C的基礎(chǔ)上針對(duì)51單片機(jī)的硬件特點(diǎn)進(jìn)行的擴(kuò)展,并向51單片機(jī)上移植,經(jīng)過多年努力,C51語言已經(jīng)成為公認(rèn)的高效、簡潔而又貼近51單片機(jī)硬件的實(shí)

2、用高級(jí)編程語言。目前大多數(shù)的51單片機(jī)用戶都在使用C51語言來進(jìn)行程序設(shè)計(jì)。用C51進(jìn)行單片機(jī)軟件開發(fā),有如下優(yōu)點(diǎn):(1)可讀性好。C51語言程序比匯編語言程序的可讀性好,因而編程效率高,程序便于修改?!綪53的匯編程序】(2)模塊化開發(fā)與資源共享。用C51開發(fā)出來的程序模塊可以不經(jīng)修改,直接被其他項(xiàng)目所用,這使得開發(fā)者能夠很好地利用已有的大量的標(biāo)準(zhǔn)C程序資源與豐富的庫函數(shù),減少重復(fù)勞動(dòng)。(3)可移植性好。為某種型號(hào)單片機(jī)開發(fā)的C語言程序,只需將與硬件相關(guān)之處和編譯連接的參數(shù)進(jìn)行適當(dāng)修改,就可以方便地移植到其他型號(hào)的單片機(jī)上。例如,為51單片機(jī)編寫的程序通過改寫頭文件以及少量的程序行,就可以方

3、便地移植到PIC單片機(jī)上。(4)代碼效率高。當(dāng)前較好的C51語言編譯系統(tǒng)編譯出來的代碼效率只比直接使用匯編語言低1020%左右,如果使用優(yōu)化編譯選項(xiàng),效果會(huì)更好。3.1.2 C51的程序結(jié)構(gòu)C51程序的基本單位是函數(shù)。一個(gè)C51源程序至少包含一個(gè)主函數(shù),也可以是一個(gè)主函數(shù)和若干其他函數(shù)。主函數(shù)是程序的入口。下面通過一個(gè)可實(shí)現(xiàn)LED閃爍控制功能的源程序說明C51程序的基本結(jié)構(gòu)。程序如下:【P60】#include <reg51.h> / 51單片機(jī)頭文件void delay(); /延時(shí)函數(shù)聲明sbit p1_0=P10; /輸出端口定義main() /主函數(shù)While(1) /無限

4、循環(huán)p1_0=0; /p1.0=“0”,LED亮delay(); /延時(shí)p1_0=1; /p1.0=“1”,LED滅delay(); /延時(shí)void delay(void) /延時(shí)函數(shù)unsigned char i; /字符型變量i定義for (i=200;i>0;i-); /循環(huán)延時(shí) 【在仿真時(shí),可以不用連接電源,晶體振蕩器,復(fù)位電路】3.1.3 Keil C51的開發(fā)環(huán)境Keil C51是德國Keil Software公司開發(fā)的用于51系列單片機(jī)的C51語言開發(fā)軟件。Keil C51在兼容ANSI C的基礎(chǔ)上,又增加很多與51單片機(jī)硬件相關(guān)的編譯特性,使得開發(fā)51系列單片機(jī)程序更為方

5、便和快捷,程序代碼運(yùn)行速度快,所需存儲(chǔ)器空間小,完全可以和匯編語言相媲美。它支持眾多的MCS-51架構(gòu)的芯片,同時(shí)集編輯、編譯、仿真等功能于一體,具有強(qiáng)大的軟件調(diào)試功能,是眾多的單片機(jī)應(yīng)用開發(fā)軟件中最優(yōu)秀的軟件之一。Keil C51已被完全集成到一個(gè)功能強(qiáng)大的全新集成開發(fā)環(huán)境(IDE)µVision3中【版本在不斷更新】,該環(huán)境集成了文件編輯處理、編譯鏈接、項(xiàng)目(Project)管理、窗口、工具引用和仿真軟件模擬器以及Monitor51硬件目標(biāo)調(diào)試器等多種功能,這些功能可在Keil µVision3環(huán)境中進(jìn)行操作。µVision3內(nèi)部集成了源程序編輯器,并允許用戶

6、在編輯源文件時(shí)就可設(shè)置程序調(diào)試斷點(diǎn),便于在程序調(diào)試過程中快速檢查和修改程序。此外,µ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é)省購買硬件仿真器的費(fèi)用。3.1.4 C51與標(biāo)準(zhǔn)C的主要區(qū)別不同的嵌入式處理器的C編譯系統(tǒng)與標(biāo)準(zhǔn)C的不同之處,主要是它們所針對(duì)的嵌入式處理器的硬件系統(tǒng)不同。Keil C51的基本語法與標(biāo)準(zhǔn)C相同,但對(duì)標(biāo)準(zhǔn)C進(jìn)行了擴(kuò)展。理解Keil C51對(duì)

7、標(biāo)準(zhǔn)C的擴(kuò)展部分是掌握Keil C51的關(guān)鍵。C51與標(biāo)準(zhǔn)C的主要區(qū)別如下:(1)頭文件的差異。51系列單片機(jī)廠家有多個(gè),它們的差異在于內(nèi)部資源如定時(shí)器、中斷、I/O等數(shù)量以及功能的不同,而對(duì)使用者來說,只需要將相應(yīng)的功能寄存器的頭文件加載在程序內(nèi),就可實(shí)現(xiàn)所具有的功能。因此,Keil C51系列的頭文件集中體現(xiàn)了各系列芯片的不同資源及功能。(2)數(shù)據(jù)類型的不同。51系列單片機(jī)包含位操作空間和位操作指令,因此Keil C51與ANSI C相比又?jǐn)U展了4種類型,以便能夠靈活地進(jìn)行操作。(3)數(shù)據(jù)存儲(chǔ)類型的不同。C語言最初是為通用計(jì)算機(jī)設(shè)計(jì)的,在通用計(jì)算機(jī)中只有一個(gè)程序和數(shù)據(jù)統(tǒng)一尋址的內(nèi)存空間,而

8、51系列單片機(jī)有片內(nèi)、外程序存儲(chǔ)器,還有片內(nèi)、外數(shù)據(jù)存儲(chǔ)器。標(biāo)準(zhǔn)C并沒有提供這部分存儲(chǔ)器的地址范圍的定義。此外,對(duì)于80C51單片機(jī)中大量的特殊功能寄存器也沒有定義。(4)標(biāo)準(zhǔn)C語言沒有處理單片機(jī)中斷的定義。(5)Keil C51與標(biāo)準(zhǔn)C的庫函數(shù)有較大的不同。由于標(biāo)準(zhǔn)C的中的部分庫函數(shù)不適于嵌入式處理器系統(tǒng),因此被排除在Keil C51之外,如字符屏幕和圖形函數(shù)。有一些庫函數(shù)可以繼續(xù)使用,但這些庫函數(shù)都必須針對(duì)51單片機(jī)的硬件特點(diǎn)來作出相應(yīng)的開發(fā),與標(biāo)準(zhǔn)C庫函數(shù)的構(gòu)成與用法有很大的不同。例如庫函數(shù)printf和scanf,在標(biāo)準(zhǔn)C中,這兩個(gè)函數(shù)通常用于屏幕打印和接收字符,而在Keil C51中

9、,它們主要用于串行口數(shù)據(jù)的收發(fā)。(6)程序結(jié)構(gòu)的差異。由于51單片機(jī)的硬件資源有限,它的編譯系統(tǒng)不允許太多的程序嵌套。其次,標(biāo)準(zhǔn)C所具備的遞歸特性不被Keil C51支持,在C51中,要使用遞歸特性,必須用reentrant進(jìn)行聲明才能使用。但是從數(shù)據(jù)運(yùn)算操作、程序控制語句以及函數(shù)的使用上來說,Keil C51與標(biāo)準(zhǔn)C幾乎沒有什么明顯的差別。如果程序設(shè)計(jì)者具備了有關(guān)標(biāo)準(zhǔn)C的編程基礎(chǔ),只要注意Keil C51與標(biāo)準(zhǔn)C的不同之處,并熟悉AT89S51單片機(jī)的硬件結(jié)構(gòu),就能夠較快地掌握Keil C51的編程。3.2 C51語言程序設(shè)計(jì)基礎(chǔ)3.2.1 C51語言中的數(shù)據(jù)1. 數(shù)據(jù)類型【P63】Keil

10、 C51的基本數(shù)據(jù)類型如表3-1所示。針對(duì)80C51單片機(jī)的硬件特點(diǎn),C51在標(biāo)準(zhǔn)C的基礎(chǔ)上,擴(kuò)展了4種數(shù)據(jù)類型(見表中最后4行)。注意:擴(kuò)展的4種數(shù)據(jù)類型,不能使用指針對(duì)它們存取。表3-1 Keil C51支持的數(shù)據(jù)類型數(shù)據(jù)類型位數(shù)字節(jié)數(shù)值 域unsigned char810255signed char81-128+127unsigned int162065535signed int162-32768+32767unsigned long32404294967295signed long324-2147483648+2147483647float32410-3810E+38double648

11、10-30810E+308bit10或1sbit10或1sfr810255sfr16162065536其中,有符號(hào)數(shù)據(jù)類型,可以忽略signed標(biāo)識(shí)符,如signed int 等價(jià)于int,signed char 等價(jià)于char等。在C51語言程序中,有可能會(huì)出現(xiàn)在運(yùn)算中數(shù)據(jù)類型不一致的情況。C51允許任何標(biāo)準(zhǔn)數(shù)據(jù)類型的隱式轉(zhuǎn)換。隱式轉(zhuǎn)換的優(yōu)先級(jí)順序如下:Bitcharintlongfloatsignedunsigned也就是說,當(dāng)char型與int型進(jìn)行運(yùn)算時(shí),先自動(dòng)對(duì)char型擴(kuò)展為int型,然后與int型進(jìn)行運(yùn)算,運(yùn)算結(jié)果為int型。C51除了支持隱式類型轉(zhuǎn)換外,還可以通過強(qiáng)制類型轉(zhuǎn)換符

12、“()”對(duì)數(shù)據(jù)類型進(jìn)行人為的強(qiáng)制轉(zhuǎn)換。2. C51的擴(kuò)展數(shù)據(jù)類型【P64】 80C51系列單片機(jī)用特殊功能寄存器SFR來控制定時(shí)器、計(jì)數(shù)器、串口、并口和外圍設(shè)備。它們分別用位、字節(jié)和字進(jìn)行訪問。與此對(duì)應(yīng),編譯器提供bit、sbit、sfr和sfr16數(shù)據(jù)類型訪問SFR。下面對(duì)表3-1中擴(kuò)展的4種數(shù)據(jù)類型進(jìn)行說明。(1) 位變量bit類型 利用它可以定義一個(gè)位變量或位函數(shù),但不能定義位指針,也不能定義位數(shù)組。它的值可以是1(true), 也可以是0(false)。在C51中,允許用戶通過位類型符定義位變量。位類型符有兩個(gè):bit和sbit??梢远x兩種位變量。bit位類型符用于定義一般的可位處理

13、位變量。它的格式如下: bit 位變量名;例如:bit flag1;bit flag2;所有的bit變量存放在80C51內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)的(20H2FH)位段。因?yàn)檫@個(gè)區(qū)域只有16個(gè)字節(jié)長,所以在某個(gè)范圍內(nèi)最多只能定義128個(gè)位變量。(2)特殊功能寄存器sfr類型特殊功能寄存器可以用sfr 來定義,通過名字或地址來引用特殊功能寄存器。51系列特殊功能寄存器在片內(nèi)RAM區(qū)的80HFFH之間,“sfr” 數(shù)據(jù)類型占用一個(gè)內(nèi)存單元。利用它可訪問80C51內(nèi)部的所有特殊功能寄存器。 格式如下: sfr sfr_name=地址常數(shù);sfr_name是特殊功能寄存器名,“地址常數(shù)”必須是一個(gè)常數(shù),不允許用帶

14、操作數(shù)的表達(dá)式。其數(shù)值范圍必須在特殊功能寄存器的地址范圍,即位于0x800xffH之間。例如:sfr P0=0x80這一語句定義P0口在片內(nèi)的寄存器,在后面語句中可用“P0=0xff”(使P0的所有引腳輸出為高電平)之類的語句來操作特殊功能寄存器。 同樣: sfr P1=0x90; sfr P2=0xa0;sfr P3=0xb0;P1、P2和P3是聲明的SFR名。【實(shí)際上,這些定義在REG51.H文件中已經(jīng)定義過】(3)特殊功能寄存器sfr16類型“sfr16”數(shù)據(jù)類型占用兩個(gè)內(nèi)存單元,用來定義16 位的特殊功能寄存器。sfr16和sfr一樣用于操作特殊功能寄存器。所不同的是它用于操作占兩個(gè)字

15、節(jié)的特殊功能寄存器。特殊功能寄存器名一般用大寫字母表示。地址一般用直接地址形式(常數(shù))。不允許用帶操作數(shù)的表達(dá)式。而且必須是低位和高位字節(jié)中的低位字節(jié)的地址。例如DPTR。通過名字或地址來引用特殊功能寄存器。編譯器提供sfr16數(shù)據(jù)類型,將兩個(gè)8位的SFR作為一個(gè)16位的SFR來訪問。例如: sfr16 DPTR=0x82語句定義了片內(nèi)16位數(shù)據(jù)指針寄存器DPTR,其低8位字節(jié)地址為82H,高8位字節(jié)地址為83H。在后面的語句中可以對(duì)DPTR進(jìn)行操作。(4)特殊功能位 sbit在51系列單片機(jī)中,經(jīng)常要訪問特殊功能寄存器中的某些位,可位尋址的特殊功能寄存器的位變量定義用關(guān)鍵字sbit。格式如下

16、:sbit 位變量名=位地址;位地址可有2種形式:位直接地址,其取值范圍為0x800xff特殊功能寄存器名帶位號(hào),特殊功能寄存器與位號(hào)之間一般用“”作間隔?!境S谩坷纾簊bit EA=0xAF; 【IE寄存器的D7,即IE.7】【參見P27的表2.3】sbit EA=IE7; 【IE寄存器的D7,即IE.7】符號(hào)“”前面是特殊功能寄存器的名字,“”的后面數(shù)字定義特殊功能寄存器可尋址位在寄存器中的位置,取值必須是07。注意,不要把bit與sbit混淆。bit用來定義普通的位變量,值只能是二進(jìn)制的0或1(位變量存放在RAM:20H2FH之間)。而sbit定義的是特殊功能寄存器的可尋址位,其值是可

17、進(jìn)行位尋址的特殊功能寄存器的位絕對(duì)地址(地址在80HFFH之間)?!纠?-5】sbit型變量的定義。sbit P=0xd0;【 sbit P=PSW0; 】【見P27】sbit CY=0xd7;【 sbit P=PSW7; 】sfr P1=0x90;sbit P1_0=P10;sbit P1_1=P11;sbit P1_2=P12;sbit P1_3=P13;sbit P1_4=P14;sbit P1_5=P15;sbit P1_6=P16;sbit P1_7=P17;在C51中,為了用戶處理方便,C51編譯器把MCS-51單片機(jī)的常用的特殊功能寄存器和特殊位進(jìn)行了定義,放在一個(gè)“reg51.

18、h”或“reg52.h”的頭文件中,當(dāng)用戶要使用時(shí),只需要在使用之前用一條預(yù)處理命令#include <reg51.h>或#include <reg52.h>把這個(gè)頭文件包含到程序中,然后就可在程序中使用殊功能寄存器名和某些特殊位名稱。典型reg51.h頭文件的部分內(nèi)容如下:C51編譯器在頭文件“reg51.h”中定義了全部sfr/sfr16和sbit變量。用一條預(yù)處理命令#include <reg51.h>把這個(gè)頭文件包含到C51程序中,無需重定義即可直接使用它們的名稱。REG51.H文件中定義的內(nèi)容Header file for generic 80C5

19、1 and 80C31 microcontroller.-*/#ifndef _REG51_H_#define _REG51_H_/* BYTE Register */ 字節(jié)寄存器【21個(gè)】sfr P0 = 0x80;sfr P1 = 0x90;sfr P2 = 0xA0;sfr P3 = 0xB0;sfr PSW = 0xD0;sfr ACC = 0xE0;sfr B = 0xF0;sfr SP = 0x81;sfr DPL = 0x82;sfr DPH = 0x83;sfr PCON = 0x87;sfr TCON = 0x88;sfr TMOD = 0x89;sfr TL0 = 0x8A

20、;sfr TL1 = 0x8B;sfr TH0 = 0x8C;sfr TH1 = 0x8D;sfr IE = 0xA8;sfr IP = 0xB8;sfr SCON = 0x98;sfr SBUF = 0x99;/* BIT Register */ 可位尋址的位變量/* PSW */【程序狀態(tài)字】sbit CY = 0xD7;sbit AC = 0xD6;sbit F0 = 0xD5;sbit RS1 = 0xD4;sbit RS0 = 0xD3;sbit OV = 0xD2;sbit P = 0xD0;/* TCON */sbit TF1 = 0x8F;sbit TR1 = 0x8E;sbi

21、t TF0 = 0x8D;sbit TR0 = 0x8C;sbit IE1 = 0x8B;sbit IT1 = 0x8A;sbit IE0 = 0x89;sbit IT0 = 0x88;/* IE */sbit EA = 0xAF;sbit ES = 0xAC;sbit ET1 = 0xAB;sbit EX1 = 0xAA;sbit ET0 = 0xA9;sbit EX0 = 0xA8;/* IP */ sbit PS = 0xBC;sbit PT1 = 0xBB;sbit PX1 = 0xBA;sbit PT0 = 0xB9;sbit PX0 = 0xB8;/* P3 */sbit RD =

22、 0xB7;sbit WR = 0xB6;sbit T1 = 0xB5;sbit T0 = 0xB4;sbit INT1 = 0xB3;sbit INT0 = 0xB2;sbit TXD = 0xB1;sbit RXD = 0xB0;/* SCON */sbit SM0 = 0x9F;sbit SM1 = 0x9E;sbit SM2 = 0x9D;sbit REN = 0x9C;sbit TB8 = 0x9B;sbit RB8 = 0x9A;sbit TI = 0x99;sbit RI = 0x98;#endif3. 數(shù)據(jù)的存儲(chǔ)類型【P65】 針對(duì)80C51存儲(chǔ)空間的特點(diǎn),可以利用存儲(chǔ)空間的修

23、飾符,來指明所定義的變量應(yīng)分配在什么樣的存儲(chǔ)空間。C51存儲(chǔ)類型與80C51的實(shí)際存儲(chǔ)空間的對(duì)應(yīng)關(guān)系見表3-2。下面對(duì)表3-2作以說明。(1)片內(nèi)數(shù)據(jù)存儲(chǔ)器 片內(nèi)數(shù)據(jù)存儲(chǔ)區(qū)是可讀/寫的。80C51系列最多可有256字節(jié)的內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)。內(nèi)部數(shù)據(jù)區(qū),可以分成3個(gè)不同的存儲(chǔ)類型data、idata和bdata。data:片內(nèi)直接尋址區(qū),位于片內(nèi)RAM的低128字節(jié)。為片內(nèi)直接尋址的RAM空間,尋址范圍為0127(00H7FH,主要在30H7FH之間)。在此空間內(nèi),存取速度最快。idata:片內(nèi)間接尋址區(qū),片內(nèi)RAM所有地址單元(00HFFH)。為片內(nèi)間接尋址的RAM空間,尋址范圍0255。由于只能

24、間接尋址,訪問速度比直接尋址慢。【只有52系列才有】bdata:片內(nèi)位尋址區(qū),位于片內(nèi)RAM位尋址區(qū)20H2FH,位地址范圍位0127。在此空間允許按字節(jié)和按位尋址混合訪問?!救绻挥梦蛔兞?,仍然可以作為字節(jié)地址訪問】bit定義的變量,嚴(yán)格來說只能是bdata。例如:unsigned char bdata flag; 表3-2 存儲(chǔ)器類型說 明data直接訪問的內(nèi)部數(shù)據(jù)存儲(chǔ)器,訪問速度最快(位于片內(nèi)RAM的低128字節(jié),字節(jié)地址:00H7FH)bdata可位尋址的內(nèi)部數(shù)據(jù)存儲(chǔ)器,可用字節(jié)方式,也可用位方式訪問,位于20H2FH(16個(gè)字節(jié))idata間接訪問的內(nèi)部數(shù)據(jù)存儲(chǔ)器,可以訪問所有的內(nèi)部

25、存儲(chǔ)空間(256字節(jié))【只有52系列才有】pdata片外RAM的一個(gè)分頁尋址區(qū),每頁256字節(jié)xdata外部數(shù)據(jù)存儲(chǔ)器RAM(64KB),常用于存放不常用的變量或等待處理的數(shù)據(jù),字節(jié)地址:0000HFFFFHcode外部程序存儲(chǔ)器空間(64KB),常用于存放數(shù)據(jù)表格、常數(shù)等固定信息(2)片外數(shù)據(jù)存儲(chǔ)器 外部數(shù)據(jù)存儲(chǔ)區(qū)是可讀/寫的。可通過一個(gè)數(shù)據(jù)指針加載一個(gè)地址來間接訪問外部數(shù)據(jù)區(qū)。因此,訪問外部數(shù)據(jù)區(qū)比訪問內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)慢。 外部數(shù)據(jù)存儲(chǔ)區(qū)最多可有64KB。由于硬件設(shè)計(jì)時(shí),要把外圍設(shè)備映射到該存儲(chǔ)區(qū),所以這些地址不一定都能用來作為數(shù)據(jù)存儲(chǔ)區(qū)。 編譯器提供兩種不同的存儲(chǔ)類型來訪問外部數(shù)據(jù)xdat

26、a和pdata。 xdata該標(biāo)識(shí)是指外部數(shù)據(jù)存儲(chǔ)區(qū)(64KB)內(nèi)的任何地址,尋址范圍為065535【字節(jié)地址:0000HFFFFH】。pdata該標(biāo)識(shí)符僅指一頁或256字節(jié)的外部數(shù)據(jù)存儲(chǔ)區(qū),尋址范圍為0255。 在定義變量時(shí),通過指明存儲(chǔ)器類型,可以將所定義的變量存儲(chǔ)在指定的存儲(chǔ)區(qū)域中。 訪問內(nèi)部數(shù)據(jù)存儲(chǔ)器比訪問外部數(shù)據(jù)存儲(chǔ)器快得多。因此,應(yīng)該把頻繁使用的變量放置在內(nèi)部數(shù)據(jù)存儲(chǔ)器中,把很少使用的變量放在外部數(shù)據(jù)存儲(chǔ)器中。 在變量聲明中,可以包括存儲(chǔ)器類型和singed或unsinged屬性。例如: unsigned char data var1; unsigned char code tex

27、t=”Enter Parameter”; unsigned long xdata array100; unsigned char xdata vector1044; unsigned char bdata flag; 【如果位變量區(qū)有未用的單元,可以進(jìn)行字節(jié)訪問】unsigned char code data=0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15,;/把常數(shù)放到程序存儲(chǔ)器中如果在變量的定義中,沒有包括存儲(chǔ)器類型,那么將自動(dòng)選用默認(rèn)的存儲(chǔ)器類型。(

28、3)片外程序存儲(chǔ)器code:外部程序存儲(chǔ)器的64KB空間。程序存儲(chǔ)區(qū)用來存放程序代碼、數(shù)據(jù)及表格(數(shù)據(jù)及表格中的數(shù)據(jù)是不變的)。程序的代碼(CODE)存儲(chǔ)區(qū)是只讀的,不能寫入。硬件決定最多可能有64KB的程序存儲(chǔ)區(qū)?!疽?yàn)槭?6位】用code標(biāo)識(shí)符來訪問片內(nèi)、片外統(tǒng)一編址的程序存儲(chǔ)區(qū),尋址范圍為065535。【P66】如果在定義變量時(shí),省略了存儲(chǔ)類型說明,C51編譯器會(huì)根據(jù)當(dāng)前編譯模式自動(dòng)認(rèn)定默認(rèn)的存儲(chǔ)類型。編譯模式分為:小編譯模式(SMALL)、緊湊編譯模式(COMPACT)和大編譯模式(LARGE)3種,具體的內(nèi)容見下表:【在keil中要進(jìn)行選擇,目前只用SMALL就可以了】3種編譯模式的

29、特點(diǎn)小結(jié)編譯模式變量存儲(chǔ)區(qū)域默認(rèn)存儲(chǔ)類型特點(diǎn)SMALL片內(nèi)低128RAMdata訪問數(shù)據(jù)的速度最快,但由于存儲(chǔ)容量較小,難于滿足需要定義較多變量的場(chǎng)合COMPACT片外頁256BRAMpdata介于兩者之間,且受片外RAM的容量限制LARGE片外64KBRAMxdata訪問數(shù)據(jù)的效率不高,但由于存儲(chǔ)容量大,可滿足需要定義較多變量的場(chǎng)合所以,在SMALL編譯模式下,語句char a 等價(jià)于char data a;而在LARGE編譯模式下,語句char a等價(jià)于char xdata a。一般采用SMALL模式,所以,在變量聲明中,如果沒有修飾符,則數(shù)據(jù)默認(rèn)的存儲(chǔ)空間為data型,也就是在片內(nèi)RAM

30、中。對(duì)單片機(jī)編程,正確地定義數(shù)據(jù)類型以及存儲(chǔ)類型,是所有編程者在編程前都需要首先考慮的問題。在資源有限的條件下,如何節(jié)省存儲(chǔ)單元并保證運(yùn)行效率,是對(duì)開發(fā)者的一個(gè)考驗(yàn)。只有對(duì)C51中的各種數(shù)據(jù)類型以及存儲(chǔ)類型非常熟練的掌握,才能運(yùn)用自如。定義變量類型應(yīng)考慮如下問題:程序運(yùn)行時(shí)該變量可能的取值范圍,是否有負(fù)值,絕對(duì)值有多大,以及相應(yīng)需要的存儲(chǔ)空間大小。在夠用的情況下,盡量選擇8位即一個(gè)字節(jié)的char型,特別是unsiged char。對(duì)于51系列這樣的定點(diǎn)機(jī)而言,浮點(diǎn)類型變量將明顯增加運(yùn)算時(shí)間和程序長度,如果可以的話,盡量使用靈活巧妙的算法來避免浮點(diǎn)變量的引入。定義數(shù)據(jù)的存儲(chǔ)類型通常遵循如下原則:

31、只要條件滿足,盡量選擇內(nèi)部直接尋址的存儲(chǔ)類型data,然后選擇idata即內(nèi)部間接尋址。對(duì)于那些經(jīng)常使用的變量要使用內(nèi)部尋址。在內(nèi)部數(shù)據(jù)存儲(chǔ)器數(shù)量有限或不能滿足要求的情況下才使用外部數(shù)據(jù)存儲(chǔ)器。選擇外部數(shù)據(jù)存儲(chǔ)器可先選擇pdata類型,最后選用xdata類型。需指出,擴(kuò)展片外存儲(chǔ)器,原理上雖很簡單,但在實(shí)際開發(fā)中,很多時(shí)候,會(huì)帶來不必要的麻煩,如可能降低系統(tǒng)穩(wěn)定性、增加成本、拉長開發(fā)和調(diào)試周期等,推薦充分利用片內(nèi)存儲(chǔ)空間。另外,通常的單片機(jī)應(yīng)用都是面對(duì)小型的控制,代碼比較短,對(duì)于程序存儲(chǔ)區(qū)的大小要求很低,常常是片內(nèi)RAM很緊張而片內(nèi)Flash ROM很富裕,因此如果實(shí)時(shí)性要求不高,可考慮將一些

32、子函數(shù)的常量數(shù)據(jù)做成數(shù)據(jù)表,放置在程序存儲(chǔ)區(qū),當(dāng)程序運(yùn)行時(shí),進(jìn)入子函數(shù)動(dòng)態(tài)調(diào)用下載至RAM即可,退出子函數(shù)后立即釋放該內(nèi)存空間。3.2.3 一個(gè)簡單的C51程序一個(gè)C51源程序是由一個(gè)個(gè)模塊化的函數(shù)所構(gòu)成,函數(shù)是指程序中的一個(gè)模塊,main()函數(shù)為程序的主函數(shù),其他若干個(gè)函數(shù)可以理解為一些子程序。一個(gè)C51源程序無論包含了多少函數(shù),它總是從main()函數(shù)開始執(zhí)行,不論main()函數(shù)位于程序的什么位置。程序設(shè)計(jì)者就是編寫一系列的函數(shù)模塊,并在需要的時(shí)候調(diào)用這個(gè)函數(shù),實(shí)現(xiàn)程序所要求的功能。1. C51程序與函數(shù)下面通過一個(gè)簡單C51程序,認(rèn)識(shí)C51程序與函數(shù)。【例3-1】 在80C51的P1

33、.0腳接有一只發(fā)光二極管,二極管的陰極接P1.0腳,陽極通過限流電阻接+5V,現(xiàn)在讓發(fā)光二極管每隔800ms閃滅,占空比為50%。已知單片機(jī)時(shí)鐘晶振為12MHz,即每個(gè)機(jī)器周期1s,采用軟件延時(shí)的方法,參考程序如下:#include <reg51.h> / 包含reg51.h 頭文件sbit P10=P10; / 定義位變量P1.0 ,也可使用sbit P10=0x90void delay(unsigned int count) / 延時(shí)函數(shù)Delay( ),count是形式參數(shù) / 兩個(gè)花括號(hào)之間為函數(shù)Delay( )的函數(shù)體unsigned int i,j; / 定義變量i,j

34、for(i=0; i<count;i+) / 如果i<count,則i加1 /在時(shí)鐘頻率為12MHz時(shí),循環(huán)120次,大約為1ms for(j=0;j<120;j+) / 如果j<120,則j加1 / unsigned char j;可以節(jié)約一個(gè)單元空間void main(void) / 主函數(shù)main( )while(1) / 主程序輪詢 P10=1; / P1.0輸出高電平,發(fā)光二極管滅 delay(800) ; / 將實(shí)際參數(shù)800傳遞給形式參數(shù)i,延時(shí)800ms P10=0; / P1.0輸出低電平,發(fā)光二極管亮 delay(800) / 將實(shí)際參數(shù)800傳遞給

35、形式參數(shù)i,延時(shí)800ms 【問題】void delay(unsigned int count)能否改為void delay(unsigned char count)否?下面對(duì)程序進(jìn)行簡要說明。程序的第1行是“文件包含”,是將另一個(gè)文件“reg51.h”的內(nèi)容全部包含進(jìn)來。文件“reg51.h”包含了51單片機(jī)全部的特殊功能寄存器的字節(jié)地址及大多數(shù)可尋址位的位地址定義。程序包含reg51.h的目的就是為了使用P1這個(gè)符號(hào),即通知程序中所寫的P1是指80C51的P1端口,而不是其他變量。打開reg51.h文件可以看到“sfr P1=0x90;”,即定義符號(hào)P1與地址0x90對(duì)應(yīng),而P1口的地址就

36、是0x90。雖然這里的“文件包含”只有一行,但C編譯器在處理的時(shí)候卻要處理幾十行或幾百行。 程序的第2行用符號(hào)P10來表示P1.0引腳。在C51中,如果直接寫“P1.0”編譯器并不能識(shí)別,而且P1.0也不是一個(gè)合法的C51語言程序變量名【因?yàn)樵趓eg51.h中,沒有定義,需要用戶自己定義】,所以必須給它起一個(gè)另外的名字,這里起的名字是P10,可是P10是否就是P1.0呢,所以必須給它們建立聯(lián)系,這里使用了C51的關(guān)鍵字“sbit”來進(jìn)行定義。第3行第8行對(duì)函數(shù)delay進(jìn)行了事先定義,只有這樣,才能在主程序中被主函數(shù)main ( )調(diào)用。自行編寫的函數(shù)delay( )的用途是軟件延時(shí),調(diào)用時(shí)使

37、用的這個(gè)“800”被稱為“實(shí)際參數(shù)”,以延時(shí)800ms的時(shí)間。注意,若delay( )的定義寫在main函數(shù)的后面,則需要先作出聲明,否則編譯無法通過,因?yàn)榫幾g到main函數(shù)中的delay( )語句時(shí),找不到相應(yīng)的函數(shù)體。main為“主函數(shù)”,每一個(gè)C語言程序有且只有一個(gè)主函數(shù),主函數(shù)后面一定有一對(duì)花括號(hào)“”,在花括號(hào)里面書寫該函數(shù)的代碼行。2. 用戶自定義函數(shù)與庫函數(shù)用戶自定義函數(shù)用戶根據(jù)自己需要所編寫的函數(shù)。如例3-1中的delay函數(shù)。編寫時(shí),需要注意以下幾點(diǎn)。函數(shù)的首部(函數(shù)的第1行),包括函數(shù)名、函數(shù)類型、函數(shù)屬性、函數(shù)參數(shù)(形式參數(shù))名、參數(shù)類型。例如:void Delay(uns

38、igned int i)函數(shù)體,即函數(shù)首部下面的花括號(hào)“ ”內(nèi)的部分。如果一個(gè)函數(shù)體內(nèi)有多個(gè)花括號(hào),則最外層的一對(duì)“ ”為函數(shù)體的范圍。C51區(qū)分大小寫,例如Delay與delay,編譯時(shí)是不同的兩個(gè)名稱。每個(gè)語句最后必須有一個(gè)分號(hào),分號(hào)是C語句的必要組成部分。從函數(shù)的定義的形式上劃分可以有三種形式:無參數(shù)函數(shù)、有參數(shù)函數(shù)和空函數(shù)。(1)無參數(shù)函數(shù) 此種函數(shù)在被調(diào)用時(shí),既無參數(shù)輸入,也不返回結(jié)果給調(diào)用函數(shù),只是為完成某種操作而編寫的。(2)有參數(shù)函數(shù) 調(diào)用此種函數(shù)時(shí),必須提供實(shí)際的輸入函數(shù),必須說明與實(shí)際參數(shù)一一對(duì)應(yīng)的形式參數(shù),并在函數(shù)結(jié)束時(shí)返回結(jié)果,供調(diào)用它的函數(shù)使用。(3)空函數(shù)函數(shù)體內(nèi)無

39、語句,是空白的。調(diào)用空函數(shù)時(shí),什么工作也不做,不起任何作用。定義空函數(shù)的目的,是為以后程序功能的擴(kuò)充。程序最初設(shè)計(jì)時(shí),往往只涉及最基本的功能模塊的函數(shù),其他模塊的功能函數(shù)可以在以后補(bǔ)上。因此先將非基本模塊的功能函數(shù)定義成空函數(shù),用一個(gè)空語句“;”占好位置,并寫好注釋,以后再用一個(gè)編好的函數(shù)代替它。3. 函數(shù)調(diào)用程序設(shè)計(jì)者的任務(wù)就是編寫一系列的用戶自定義函數(shù)模塊,并在需要的時(shí)候調(diào)用這些函數(shù)以及庫函數(shù),實(shí)現(xiàn)程序所要求的功能。調(diào)用格式為:函數(shù)名(實(shí)際參數(shù)1,實(shí)際參數(shù)2,)例如,例3-1中主函數(shù)main ( )里的子函數(shù)調(diào)用語句“delay(800);”,其中800為實(shí)際參數(shù)。3.2.4 C51的運(yùn)算

40、符在程序中實(shí)現(xiàn)運(yùn)算,要熟悉常用的運(yùn)算符。本節(jié)對(duì)C51中用到的標(biāo)準(zhǔn)C運(yùn)算符進(jìn)行回顧,為C51的程序設(shè)計(jì)打下基礎(chǔ)。1. 算術(shù)運(yùn)算符如表3-3所示。表3-3 算術(shù)運(yùn)算符及其說明符 號(hào)說 明加法運(yùn)算減法運(yùn)算*乘法運(yùn)算/除法運(yùn)算【商】%取模運(yùn)算【余數(shù)】自增1自減1對(duì)于“/”和“%”這兩個(gè)符號(hào)都涉及除法運(yùn)算,但“/”運(yùn)算是取商,而“%” 運(yùn)算為取余數(shù)。例如“5/3”的結(jié)果(商)為1,而“5%3”的結(jié)果為2(余數(shù))。表3-3中的自增和自減運(yùn)算符是使變量自動(dòng)加1或減1,自增和自減運(yùn)算符放在變量前和變量之后是不同的。+i,-i:在使用i之前,先使i值加(減)1。i+,i-:在使用i之后,再使i值加(減)1。例如

41、:若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。2. 邏輯運(yùn)算符邏輯運(yùn)算符及其說明如表3-4所示。表3-4 邏輯運(yùn)算符及其說明符號(hào)說 明&&邏輯與|邏輯或!邏輯非3. 關(guān)系運(yùn)算符判斷兩個(gè)數(shù)之間的關(guān)系。關(guān)系運(yùn)算符及其說明如表3-5。表3-5 關(guān)系運(yùn)算符及其說明符號(hào)說 明>大于<小于>=大于或等于<=小于或等于=等于!=不等于4. 位運(yùn)算C51中的位運(yùn)算符及其說明如表3-6所示。表3-6 位運(yùn)算其說明符號(hào)說 明&按位

42、與按位或按位異或按位取反<<左移>>右移【例】設(shè)a=0x54=01010100B,b=0x3b=00111011B,則a&b、a|b、ab、a、a<<2、b>>2分別為多少?a=0x54=01010100Bb=0x3b=00111011B a&b=00010000b=0x10 a|b=01111111B=0x7f ab=01101111B=0x6f a=10101011B=0xab a<<2=01010000B=0x50 【a<<=2】 b>>2=00001110B=0x0e 【b>>

43、;=2】5 復(fù)合賦值運(yùn)算符C51語言中支持在賦值運(yùn)算符“=”的前面加上其它運(yùn)算符,組成復(fù)合賦值運(yùn)算符。下面是C51中支持的復(fù)合賦值運(yùn)算符:+= 加法賦值 -+ 減法賦值*= 乘法賦值 /= 除法賦值%= 取模賦值 &= 邏輯與賦值 |= 邏輯或賦值 = 邏輯異或賦值= 邏輯非賦值 >>= 右移位賦值 <<= 左移位賦值復(fù)合賦值運(yùn)算的一般格式如下: 變量 復(fù)合運(yùn)算賦值符 表達(dá)式 它的處理過程:先把變量與后面的表達(dá)式進(jìn)行某種運(yùn)算,然后將運(yùn)算的結(jié)果賦給前面的變量。其實(shí)這是C51語言中簡化程序的一種方法,大多數(shù)二目運(yùn)算都可以用復(fù)合賦值運(yùn)算符簡化表示。例如:a+=6相當(dāng)于

44、a=a+6;a*=5相當(dāng)于a=a*5;b&=0x55相當(dāng)于b=b&0x55;x>>=2相當(dāng)于x=x>>2。3.2.5 C51的分支與循環(huán)程序結(jié)構(gòu)程序結(jié)構(gòu)上可把程序分為三類,即順序、分支和循環(huán)結(jié)構(gòu)。順序結(jié)構(gòu)是程序的基本結(jié)構(gòu),程序自上而下,從main()的函數(shù)開始一直到程序運(yùn)行結(jié)束,程序只有一條路可走,沒有其他的路徑可以選擇。順序結(jié)構(gòu)比較簡單和便于理解,這里介紹分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。1. 分支結(jié)構(gòu)程序(1) 只有兩條分支的時(shí)候用If (條件) 分支1else 分支2(2) 分支較多時(shí)在分支較多時(shí)的情況下使用switch語句。switch ( ) case( )

45、:語句; break; case( ):語句;break;default:語句;break;注意:每個(gè)switch分支必須有一個(gè)break語句,否則程序并不能跳出switch,就會(huì)繼續(xù)執(zhí)行case后面的case語句。2. 循環(huán)結(jié)構(gòu)程序循環(huán)語句有以下三種。(1)for循環(huán)格式為:for(循環(huán)體初始化;循環(huán)體執(zhí)行條件;循環(huán)體執(zhí)行后操作) 循環(huán)體 花括號(hào)中為循環(huán)體內(nèi)容。(2)while循環(huán)格式為:while(循環(huán)體執(zhí)行條件) 花括號(hào)中為循環(huán)體內(nèi)容。 (3)do while循環(huán)格式為:do 花括號(hào) 中為循環(huán)體內(nèi)容while(循環(huán)體執(zhí)行條件)前兩種循環(huán)是先判斷循環(huán)條件是否滿足,才決定循環(huán)體是否執(zhí)行;而“

46、do while循環(huán)”是在執(zhí)行完循環(huán)體后再判斷條件是否滿足,再?zèng)Q定循環(huán)體是否繼續(xù)執(zhí)行。三種循環(huán)中,經(jīng)常使用的是for語句和while語句。下面來說明for語句的應(yīng)用。關(guān)于循環(huán),需說明的是,在無操作系統(tǒng)的控制器和處理器上運(yùn)行的程序,主體通常采用輪詢方式,即把所有的操作包含在一個(gè)while(1)中,如例3-1。這樣的無限循環(huán)在面向通用計(jì)算機(jī)的軟件設(shè)計(jì)中是不被允許的,然而嵌入式系統(tǒng)軟件設(shè)計(jì)中,則由于其硬件構(gòu)成和使用需求,常常采用這種無限循環(huán)。3.2.6 絕對(duì)地址訪問使用C51運(yùn)行庫中預(yù)定義宏C51編譯器提供了一組宏定義來對(duì)51系列單片機(jī)的code、data、pdata和xdata空間進(jìn)行絕對(duì)尋址。規(guī)

47、定只能以無符號(hào)數(shù)方式訪問,定義了8個(gè)宏定義,其函數(shù)原型如下:#define CBYTE (unsigned char volatile code *) 0)#define DBYTE (unsigned char volatile data *) 0)#define PBYTE (unsigned char volatile pdata *) 0)#define XBYTE (unsigned char volatile xdata *) 0)#define CWORD (unsigned int volatile code *) 0)#define DWORD (unsigned int v

48、olatile data *) 0)#define PWORD (unsigned int volatile pdata *) 0)#define XWORD (unsigned int volatile xdata *) 0)這些函數(shù)原型放在absacc.h文件中。使用時(shí)須用預(yù)處理命令把該頭文件包含到文件中,形式為:#include <absacc.h>。其中:CBYTE以字節(jié)形式對(duì)code區(qū)尋址,DBYTE以字節(jié)形式對(duì)data區(qū)尋址,PBYTE以字節(jié)形式對(duì)pdata區(qū)尋址,XBYTE以字節(jié)形式對(duì)xdata區(qū)尋址,CWORD以字形式對(duì)code區(qū)尋址,DWORD以字形式對(duì)data區(qū)

49、尋址,PWORD以字形式對(duì)pdata區(qū)尋址,XWORD以字形式對(duì)xdata區(qū)尋址。訪問形式如下: 宏名地址 宏名為CBYTE、DBYTE、PBYTE、XBYTE、CWORD、DWORD、PWORD或XWORD。地址為存儲(chǔ)單元的絕對(duì)地址,一般用十六進(jìn)制形式表示。【例4-7】絕對(duì)地址對(duì)存儲(chǔ)單元的訪問。#include <absacc.h> /將絕對(duì)地址頭文件包含在文件中#include <reg51.h> /將寄存器頭文件包含在文件中#define uchar unsigned char /定義符號(hào)uchar為數(shù)據(jù)類型符unsigned char#define uint u

50、nsigned int /定義符號(hào)uint為數(shù)據(jù)類型符unsigned intvoid main(void)uchar var1;uint var2;var1=XBYTE0x0005; /XBYTE0x0005訪問片外RAM的0005字節(jié)單元var2=XWORD0x0002; /XWORD0x0002訪問片外RAM的0002字單元xval=XBYTE0x0002; /把外部存儲(chǔ)區(qū)地址0x0002的數(shù)據(jù)存入變量xval中XWORD0x0002=0x2000; /把0x2000送到外部存儲(chǔ)區(qū)地址為0x0002的單元#define DAC0832 XBYTE0x7fff /定義DAC0832的端口地

51、址DAC0832=0x80; /啟動(dòng)一次D/A轉(zhuǎn)換.while(1);在上面程序中,其中XBYTE0x0005就是以絕對(duì)地址方式訪問的片外RAM 0005字節(jié)單元;XWORD0x0002就是以絕對(duì)地址方式訪問的片外RAM 0002字單元。3.2.7 使用C51擴(kuò)展關(guān)鍵字“_at_” 使用_at_對(duì)指定的存儲(chǔ)器空間的絕對(duì)地址進(jìn)行訪問,一般格式如下: 存儲(chǔ)器類型 數(shù)據(jù)類型說明符 變量名 _at_ 地址常數(shù); 其中,存儲(chǔ)器類型為data、bdata、idata、pdata等C51能識(shí)別的數(shù)據(jù)類型,如省略則按存儲(chǔ)模式規(guī)定的默認(rèn)存儲(chǔ)器類型確定變量的存儲(chǔ)器區(qū)域;數(shù)據(jù)類型為C51支持的數(shù)據(jù)類型。地址常數(shù)用于

52、指定變量的絕對(duì)地址,必須位于有效的存儲(chǔ)器空間之內(nèi);使用“_at_”定義的變量必須為全局變量。【例】通過_at_實(shí)現(xiàn)絕對(duì)地址的訪問。#define uchar unsigned char/定義符號(hào)uchar為數(shù)據(jù)類型符unsigned char#define uint unsigned int /定義符號(hào)uint為數(shù)據(jù)類型符unsigned intvoid main(void)data uchar x1 _at_ 0x40; /在data區(qū)中定義字節(jié)變量x1,它的地址為40Hxdata uint x2 _at_ 0x2000; /在xdata區(qū)中定義字變量x2,它的地址為2000Hx1=0xff

53、;x2=0x1234;.while(1);3.2.7 C51中斷服務(wù)函數(shù)的定義 由于標(biāo)準(zhǔn)C沒有處理單片機(jī)中斷的定義,為直接編寫中斷服務(wù)程序,C51編譯器對(duì)函數(shù)的定義進(jìn)行了擴(kuò)展,增加了一個(gè)擴(kuò)展關(guān)鍵字interrupt,使用該關(guān)鍵字可以將一個(gè)函數(shù)定義成中斷服務(wù)程序。由于C51編譯器在編譯時(shí)對(duì)聲明為中斷服務(wù)程序的函數(shù)自動(dòng)添加了相應(yīng)的現(xiàn)場(chǎng)保護(hù)、阻斷其他中斷、返回時(shí)恢復(fù)現(xiàn)場(chǎng)等處理的程序段,因而在編寫中斷服務(wù)函數(shù)時(shí)可不必考慮這些問題,減輕了用匯編語言編寫中斷服務(wù)程序的繁瑣程度,而把精力放在如何處理引發(fā)中斷請(qǐng)求的事件上。中斷服務(wù)函數(shù)的一般形式為:void 函數(shù)名(void)interrupt n using m在函數(shù)聲明時(shí),用“interrupt n”語句,可以把所聲明的函數(shù)定義為一個(gè)中斷服務(wù)程序。從定

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(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)論