第4章 單片機C語言及程序設(shè)計_第1頁
第4章 單片機C語言及程序設(shè)計_第2頁
第4章 單片機C語言及程序設(shè)計_第3頁
第4章 單片機C語言及程序設(shè)計_第4頁
第4章 單片機C語言及程序設(shè)計_第5頁
已閱讀5頁,還剩78頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第4章單片機C語言及程序設(shè)計Ag4.1C51概述4.2C51數(shù)據(jù)類型及存儲4.3C51變量的定義及數(shù)據(jù)存儲區(qū)域4.4C51位變量的定義4.5C51特殊功能寄存器的定義4.6C51指針的定義4.7C51的輸入/輸出4.8C51函數(shù)的定義4.9C51與匯編語言混合編程4.10C51集成開發(fā)軟件KeilC目錄12-11-6第4章單片機C語言及程序設(shè)計 本章主要討論C51變量的定義和函數(shù)的定義,以及KeilC軟件的使用等。

本章內(nèi)容的安排,認為讀者已經(jīng)學(xué)習(xí)過C語言,具有C語言的基本知識,因此,本章內(nèi)容完全是結(jié)合單片機來講解,也就是補充C語言在單片機方面的概念、數(shù)據(jù)定義和函數(shù)定義等。 通過本章學(xué)習(xí),讀者能夠比較順利地編寫C51程序。

4.1.2C語言與ANSI的區(qū)別

用匯編語言編寫單片機程序時,必須要考慮其存儲器的結(jié)構(gòu),尤其要考慮其片內(nèi)數(shù)據(jù)存儲器、特殊功能寄存器是否正確合理的使用,以及按照實際地址端口數(shù)據(jù)的處理。 用C51編寫程序,雖然不像匯編語言那樣需要具體地組織、分配存儲器資源,但是C51對數(shù)據(jù)類型和變量的定義,必須要與單片機的存儲結(jié)構(gòu)相關(guān)聯(lián),否則編譯器不能正確地映射定位。

用C51編寫單片機程序,與用ANSIC編寫程序的不同之處是,需要根據(jù)單片機存儲器結(jié)構(gòu)及內(nèi)部資源,定義相應(yīng)的數(shù)據(jù)類型和變量。 其它的語法規(guī)定、程序結(jié)構(gòu)及程序設(shè)計方法,都與ANSIC相同。所以本章主要介紹C51各種變量的定義、函數(shù)定義。4.2C51數(shù)據(jù)類型及存儲主要內(nèi)容4.2.1C51的數(shù)據(jù)類型4.2.2C51數(shù)據(jù)的存儲4.2.1C51的數(shù)據(jù)類型表4-1C51數(shù)據(jù)類型、長度和數(shù)值范圍數(shù)據(jù)類型表示方法長度數(shù)值范圍無符號字符型unsignedchar1字節(jié)0~255有符號字符型signedchar1字節(jié)-128~127無符號整型unsignedint2字節(jié)0~65535有符號整型signedint2字節(jié)-32768~32767無符號長整型unsignedlong4字節(jié)0~4294967295有符號長整型signedlong4字節(jié)-2147483648~2147483647浮點型float4字節(jié)±1.1755E-38~±3.40E+38雙精度型double8字節(jié)±1.1755E-38~±3.40E+38位類型bit、sbit1位0或1特殊功能寄存器型sfrsfr161字節(jié)2字節(jié)0~2550~655354.2.2C51數(shù)據(jù)的存儲

MCS-51單片機只有bit和unsignedchar兩種數(shù)據(jù)類型支持機器指令,而其它類型的數(shù)據(jù)都需要轉(zhuǎn)換成bit或unsignedchar型進行存儲。 為了減少單片機的存儲空間和提高運行速度,要盡可能地使用unsignedchar型數(shù)據(jù)。

一、位變量的存儲 bit和sbit型位變量,直接存于RAM的位尋址空間,包括低128位和特殊功能寄存器位。 二、字符變量的存儲

字符變量(char):無論是unsignedchar數(shù)據(jù)還是signedchar數(shù)據(jù),均為1個字節(jié),能夠被直接存儲在RAM中,可以存儲在0~0x7f區(qū)域,也可以存儲在0x80~0xff區(qū)域,與變量的定義有關(guān)。

unsignedchar數(shù)據(jù):可直接被MSC-51接受

signedchar數(shù)據(jù):用補碼表示。需要額外的操作來測試、處理符號位,使用的是兩種庫函數(shù),代碼量大,運算速度降低。

三、整型變量的存儲

整型變量(int):不管是unsignedint數(shù)據(jù)還是signedint數(shù)據(jù),均為2個字節(jié),其存儲方法是高位字節(jié)保存在低地址(在前面),低位字節(jié)保存在高地址(在后面)。……0x120x34……地址低高

例如,整型變量的值為0x1234,在內(nèi)存中的存放如右圖所示。 signedint數(shù)據(jù)用補碼表示。4.2.2C51數(shù)據(jù)的存儲

四、長整型變量的存儲 長整型變量(long)為4個字節(jié),其存儲方法與整型數(shù)據(jù)一樣,是最高位字節(jié)保存的地址最低(在最前面),最低位字節(jié)保存的地址最高(在最后面)。…0x120x340x560x78…地址低高 如長整型變量的值為0x12345678,在內(nèi)存中的存放方法如右圖所示。不管是unsignedlong數(shù)據(jù)還是signedlong數(shù)據(jù)。4.3C51變量的定義及數(shù)據(jù)存儲區(qū)域主要內(nèi)容4.3.1C51變量的定義4.3.2C51變量的存儲類型4.3.3C51變量的存儲區(qū)域4.3.4C51變量定義舉例4.3.5C51變量的存儲模式4.3.6C51變量的絕對定位4.3.1C51變量的定義

C51變量定義的一般格式為:[存儲類型]數(shù)據(jù)類型[存儲區(qū)]變量名1[=初值][,變量名2[=初值]][,…]或 [存儲類型][存儲區(qū)]數(shù)據(jù)類型變量名1[=初值][,變量名2[=初值]][,…]

可見變量(非位變量)的定義由4部分組成,即在變量定義時,指定變量4種屬性:存儲類型、數(shù)據(jù)類型、存儲區(qū)和變量名。

數(shù)據(jù)類型:在前面的4.2中已經(jīng)敘述過,對于變量名也無須多說,下面主要解釋“存儲類型”和“存儲區(qū)”等概念。

4.3.2C51變量的存儲類型

存儲類型這個屬性我們?nèi)匝赜肁NSIC的說法,盡量不改變原來的含義。

按照ANSIC,C語言的變量有4種存儲類型: 動態(tài)存儲(auto) 靜態(tài)存儲(static) 全局存儲(extern) 寄存器存儲(register)

4.3.3C51變量的存儲區(qū)域

變量的存儲區(qū)屬性是單片機擴展的概念,非常重要,它涉及到7個新的關(guān)鍵字。

MCS-51單片機有四個存儲空間,分成三類,它們是片內(nèi)數(shù)據(jù)存儲空間、片外數(shù)據(jù)存儲空間和程序存儲空間。

MCS-51單片機有更多的存儲區(qū)域:由于片內(nèi)數(shù)據(jù)存儲器和片外數(shù)據(jù)存儲器又分成不同的區(qū)域,所以單片機的變量有更多的存儲區(qū)域,在定義時,必須明確指出是存放在哪個區(qū)域。4.3.3C51變量的存儲區(qū)域表4-2C51存儲區(qū)與MCS-51存儲空間的對應(yīng)關(guān)系符號對應(yīng)的存儲空間及范圍bit片內(nèi)RAM位尋找區(qū),位地址0x00~0x7fdata直接尋址片內(nèi)RAM低128字節(jié)bdata片內(nèi)RAM位尋址區(qū)0x20~0x2f,也可字節(jié)訪問idata間接尋址片內(nèi)RAM的256字節(jié),與MOV@Ri對應(yīng)pdata分頁尋址片外RAM的256字節(jié),與MOVX@Ri對應(yīng),P2不變xdata片外RAM全空間,64KBcode全部程序存儲空間,64KB注:bit存儲區(qū)只對位變量有效,對一般變量沒有意義4.3.4C51變量定義舉例 1)定義存儲在data區(qū)域的動態(tài)unsignedchar變量:

unsignedchardatasec=0,min=0,hou=0; 2)定義存儲在data區(qū)域的靜態(tài)unsignedchar變量:

staticunsignedchardatascan_code=0xfe;

3)定義存儲在data區(qū)域的靜態(tài)unsignedint變量:

staticunsignedintdatadd; 4)定義存儲在bdata區(qū)域的動態(tài)unsignedchar變量:

unsignedcharbdataoperate,operate1;//定義指示操作的可位尋址的變量 5)定義存儲在idata區(qū)域的動態(tài)unsignedchar數(shù)組:

unsignedcharidatatemp[20]; 6)定義在pdata區(qū)域的動態(tài)有符號int數(shù)組:

intpdatasend_data[30]; //定義存放發(fā)送數(shù)據(jù)的數(shù)組 7)定義存儲在xdata區(qū)域的動態(tài)unsignedint數(shù)組:

unsignedintxdatareceiv_buf[50]; //定義存放接受數(shù)據(jù)的數(shù)組 8)定義存儲在code區(qū)域的unsignedchar數(shù)組:

unsignedcharcodedis_code[10]= {0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; //定義共陰極數(shù)碼管段碼數(shù)組4.3.5C51變量的存儲模式

存儲模式:如果在定義變量時缺省了存儲區(qū)屬性,則編譯器會自動選擇默認的存儲區(qū)域,也就是存儲模式。

變量的存儲模式也就是程序(或函數(shù))的編譯模式。編譯模式?jīng)Q定了變量的默認存儲區(qū)域和參數(shù)的傳遞方法分為三種,分別是小模式(small):data和idata緊湊模式(compact):pdata大模式(large):xdata編譯模式由編譯控制命令“#pragmasmall(或compact、large)”決定,放在文件的開始。

如果文件或函數(shù)沒指明編譯模式,則按small模式處理。

4.3.6C51變量的絕對定位 在一些情況下,希望把一些變量定位在某個固定地址上,如I/O端口和指定訪問某個單元等。C51有三種方式可以對變量絕對定位:絕對定位關(guān)鍵字_at_,指針,庫函數(shù)的絕對定位宏。對于后兩種方式,在后面指針一節(jié)介紹。

C51擴展的關(guān)鍵字_at_專門用于對變量作絕對定位,_at_使用在變量的定義中,其格式為:[存儲類型]數(shù)據(jù)類型[存儲區(qū)]變量名1_at_地址常數(shù)[,變量名2…]舉例說明_at_的使用方法 1)對data區(qū)域中的unsignedchar變量aa作絕對定位: unsigned char dataaa_at_0x30; 2)對pdata區(qū)域中的unsignedint數(shù)組cc作絕對定位: unsigned intpdatacc[10]_at_0x1234; 3)對xdata區(qū)域中的unsignedchar變量printer_port作絕對定位: unsigned char xdataprinter_port_at_0x7fff;4.3.6C51變量的絕對定位

對變量絕對定位的幾點說明: 1)絕對地址變量在定義時不能初始化,因此不能對code型變量絕對定位; 2)絕對地址變量只能夠是全局變量,不能在函數(shù)中對變量絕對定位; 3)絕對地址變量多用于I/O端口,一般情況下不對變量作絕對定位; 4)位變量不能被絕對定位。

4.4C51位變量的定義主要內(nèi)容4.4.1bit型位變量的定義4.4.2sbit型位變量的定義4.4.1bit型位變量的定義

常說的位變量指的就是bit型位變量。C51的bit型位變量定義的一般格式為:[存儲類型]bit位變量名1[=初值][,位變量名2[=初值]][,…]

bit位變量被保存在RAM中的位尋址區(qū)域(字節(jié)地址為0x20~0x2f,16字節(jié))。例如: bit flag_run,receiv_bit=0; staticbit send_bit;

幾點說明: 1)bit型位變量與其它變量一樣,可以作為函數(shù)的形參,也可以作為函數(shù)的返回值,即函數(shù)的類型可以是位型的; 2)位變量不能使用關(guān)鍵字“_at_”絕對定位; 3)位變量不能定義指針,不能定義數(shù)組。4.4.2sbit型位變量的定義 對于能夠按位尋址的特殊功能寄存器,可以對寄存器各位定義位變量。位變量定義的一般格式為:

sbit 位變量名=位地址表達式

這里的位地址表達式有三種形式:

直接位地址 特殊功能寄存器名帶位號 字節(jié)地址帶位號一、用直接位地址定義位變量

這種情況下位變量的定義格式為:

sbit 位變量名=位地址常數(shù)

這里的位地址常數(shù)范圍為0x80~0xff,實際是定義特殊功能寄存器的位。例如: sbit P0_0=0x80; sbit P1_1=0x91; sbit RS0=0xd3; //定義PSW的第3位 sbit ET0=0xa9; //定義IE的第1位

二、特殊功能寄存器名帶位號定義

這時位變量的定義格式為:

sbit 位變量名=特殊功能寄存器名^位號常數(shù) 這里的位號常數(shù)為0~7。例如: sbit P0_3=P0^3; sbit P1_4=P1^4; sbit OV=PSW^2; //定義PSW的第2位 sbit ES=IE^4; //定義IE的第4位

三、寄存器地址帶位號定義位變量

在這種情況下位變量的定義格式為:

sbit 位變量名=特殊功能寄存器地址^位號常數(shù) 這里的位號常數(shù)同上,為0~7。例如: sbit P0_6=0x80^6; sbit P1_7=0x90^7; sbit AC=0xd0^6; //定義PSW的第6位 sbit EA=0xa8^7; //定義IE的第7位4.4.2sbit型位變量的定義

幾點說明: 1)用sbit定義的位變量,必須能夠按位尋址和按位操作,而不能夠?qū)o位操作功能的位定義位變量。 2)用sbit定義位變量,必須放在函數(shù)外面作為全局位變量,而不能在函數(shù)內(nèi)部定義。 3)用sbit每次只能定義一個位變量。 4)對其它模塊定義的位變量(bit型或sbit型)的引用聲明,也可以使用bit。 5)用sbit定義的是一種絕對定位的位變量(因為名字是與確定位地址對應(yīng)的),具有特定的意義,在應(yīng)用時不能像bit型位變量那樣隨便使用。4.5C51特殊功能寄存器的定義主要內(nèi)容4.5.18位特殊功能寄存器的定義4.5.216位特殊功能寄存器的定義4.5.18位特殊功能寄存器的定義

定義的一般格式為:

sfr 特殊功能寄存器名=地址常數(shù) 對于MCS-51單片機,地址常數(shù)為8位的,其范圍為0x80~0xff。特殊功能寄存器定義如下(見reg51.h、reg52.h等文件): sfr P0=0x80; //定義P0寄存器 sfr P1=0x90; //定義P1口寄存器 sfr PSW=0xd0; //定義PSW sfr IE=0xa8; //定義IE

4.5.216位特殊功能寄存器的定義

定義的一般格式為:

sfr16 特殊功能寄存器名=地址常數(shù) 對于MCS-51單片機,地址常數(shù)為8位的,其范圍為0x80~0xff。例如(見reg51.h、reg52.h等文件):

sfr16DPTR=0x82; sfr16T2=0xcc; //含TL2和TH2 sfr16RCAP2=0xca;

//含RCAP2L //和RCAP2H,0xca為RCAP2L的地址4.5.216位特殊功能寄存器的定義

幾點說明:

1)定義特殊功能寄存器中的地址必須在0x80~0xff范圍內(nèi)。 2)定義特殊功能寄存器,必須放在函數(shù)外面作為全局位變量。 3)用sfr或sfr16每次只能定義一個特殊功能寄存器。 4)像sbit一樣,用sfr或sfr16定義的是絕對定位的變量(因為名字是與確定地址對應(yīng)的),具有特定的意義,在應(yīng)用時不能像一般變量那樣隨便使用。

4.6C51指針的定義主要內(nèi)容4.6.1通用指針4.6.2存儲器專用指針4.6.3指針變換4.6.4C51指針應(yīng)用4.6C51指針的定義

由于MCS-51單片機有三種不同類型的存儲空間,并且空間范圍也不同,因此C51指針的內(nèi)容更豐富。 除了像變量的四種屬性(存儲類型、數(shù)據(jù)類型、存儲區(qū)、變量名)外,按存儲區(qū),將指針分為通用指針和不同存儲空間的專用指針。

4.6.1通用指針

所謂通用指針,就是通過該類指針可以訪問所有的存儲空間。所以在C51庫函數(shù)中通常使用這種指針來訪問。

通用指針用3個字節(jié)來存儲: 第一個字節(jié):表示指針?biāo)赶虻拇鎯臻g 第二個字節(jié):為指針地址的高字節(jié) 第三個字節(jié):為指針地址的低字節(jié)

通用指針的定義與一般C語言的指針定義相同,其格式為: [存儲類型]數(shù)據(jù)類型*指針名1[,*指針名2][,…]例如: unsignedchar*cc; int*dd; long*numptr; staticchar*ccptr;

通用指針的特點:定義簡單、能訪問所有空間、訪問速度慢,在實際應(yīng)用中要盡可能地使用專用指針。4.6.2存儲器專用指針

所謂存儲器專用指針,就是通過該類指針,只能夠訪問規(guī)定的存儲空間。 指針本身占用1個字節(jié)(data*,idata*,bdata*,pdata*)或2個字節(jié)(xdata*,code*)。

存儲器專用指針的一般定義格式為:[存儲類型]數(shù)據(jù)類型指向存儲區(qū)*[指針存儲區(qū)]指針名1[,*[指針存儲區(qū)]指針名2,…]

unsignedchardata*idatacpt1,*idatacpt2;

指向存儲區(qū):

是指針變量所指向的數(shù)據(jù)存儲空間區(qū)域。不能夠缺省。

指針存儲區(qū):

是指針變量本身所存儲的空間區(qū)域。

缺省時認為指針存儲區(qū)在默認的存儲區(qū)域,其默認存儲區(qū)域決定于所設(shè)定的編譯模式。

指向存儲區(qū)和指針存儲區(qū),兩者可以是同一種區(qū)域,但多數(shù)情況下不會是同一種區(qū)域。

存儲器專用指針例子:(P81) unsignedchardata*cpt1,*cpt2; signedintidata*dpt1,*dpt2; unsignedcharpdata*ppt; signedlongxdata*lpt1,*lpt2; unsignedcharcode*ccpt; 上面所定義的指針雖然所指向的空間不同,但指針變量本身都存儲在默認的存儲區(qū)域。又如:

1)unsignedchardata*idatacpt1,*idatacpt2; 2)signedintidata*datadpt1,*datadpt2; 3)unsignedcharpdata*xdatappt; 4)signedlongxdata*lpt1,*xdatalpt2; 5)unsignedcharcode*dataccpt;注意:(1)要區(qū)分指針變量指向的空間區(qū)域和指針變量本身所存儲的區(qū)域;(2)定義時,指針的指向存儲區(qū)屬性不能缺省,而指針存儲區(qū)屬性可以缺??;(3)指向區(qū)域不同的指針變量,本身所占的字節(jié)數(shù)不同。

說明:指針變量本身所存儲的區(qū)域,在定義指針時一般都省略了,指針變量本身保存在缺省存儲的區(qū)域中,這樣顯得簡單些,并且對初學(xué)者來說更容易理解。

4.6.4C51指針應(yīng)用

指針在PC機上的C語言中應(yīng)用很廣泛。在單片機中,由于不使用操作系統(tǒng),指針的應(yīng)用完全可以獨立于變量,可以獨立指向所需要的存儲空間位置。本節(jié)通過例子來學(xué)習(xí)和認識C51指針的這種獨立應(yīng)用性。 借助于指針,能夠方便地對所有空間的任一位置進行訪問,也可以訪問函數(shù)。下面介紹兩種訪問空間任一單元的方法。

一、通過專用指針直接訪問存儲器 使用指針直接訪問存儲器對PC機是禁止的,但對于單片機來說使用時注意是可以的。

使用指針直接訪問存儲器方法是先定義所需要的指針,給指針賦地址值,然后使用指針訪問存儲器。例如: unsignedcharxdata*xcpt; xcpt=0x2000; *xcpt=123; xcpt++; *xcpt=234;

例4-1編寫程序,將單片機片外數(shù)據(jù)存儲器中地址從0x1000開始20個字節(jié)數(shù)據(jù),傳送到片內(nèi)數(shù)據(jù)存儲器地址從0x30開始的區(qū)域。

程序段如下: unsignedchardata i,*dcpt; unsignedcharxdata *xcpt; dcpt=0x30; //給指針賦地址 xcpt=0x1000; for(i=0;i<20;i++) *(dcpt+i)=*(xcpt+i);

4.7C51的輸入/輸出主要內(nèi)容4.7.1格式輸出函數(shù)printf4.7.2格式輸入函數(shù)scanfC51的輸入/輸出函數(shù),都是通過單片機的串行接口實現(xiàn)的。在使用這些I/O函數(shù)之前,必須先對單片機的串行口、定時器/計數(shù)器T1進行初始化。具體內(nèi)容到后面介紹。4.8C51函數(shù)的定義主要內(nèi)容4.8.1C51函數(shù)的定義4.8.2C51中斷函數(shù)的定義 C51函數(shù)的定義與ANSIC相似,但有更多的屬性要求。本節(jié)先討論函數(shù)的一般定義,然后專門給出中斷函數(shù)的定義,因為中斷函數(shù)有其特殊性。

4.8.1C51函數(shù)的定義 在C51中,函數(shù)的定義與ANSIC中是相同的。唯一不同的就是在函數(shù)的后面需要帶上若干個C51的專用關(guān)鍵字。C51函數(shù)定義的一般格式如下:返回類型函數(shù)名(形參表)[函數(shù)模式][reentrant][interruptm][usingn]{ 局部變量定義 執(zhí)行語句}

各屬性含義如下:

函數(shù)模式:也就是編譯模式、存儲模式,可以為small、compact和large。缺省時則使用文件的編譯模式。

關(guān)鍵字reentrant表示重入函數(shù)。所謂可重入函數(shù),就是允許被遞歸調(diào)用的函數(shù)。是C51定義的。在編譯時會為重入函數(shù)生成一個堆棧,通過這個堆棧來完成參數(shù)的傳遞和存放局部變量。重入函數(shù)不能使用bit型參數(shù);函數(shù)返回值也不能是bit型。

interruptm表示中斷處理函數(shù)及中斷號。interrupt是C51定義的。C51支持32個中斷源,中斷入口地址與中斷號m的關(guān)系為:中斷入口地址=3+8×m。表4-7單片機中斷源與中斷號的關(guān)系中斷源外中斷0T0中斷外中斷1T1中斷串行中斷T2中斷中斷號012345中斷入口地址0x00030x000b0x00130x001b0x00230x002b

usingn表示選擇工作寄存器組及組號,n可以為0~3,對應(yīng)第0組到第3組。關(guān)鍵字using是C51定義的。

如果函數(shù)有返回值,不能使用該屬性,因為返回值是存于寄存器中,函數(shù)返回時要恢復(fù)原來的寄存器組,導(dǎo)致返回值錯誤。

4.8.2C51中斷函數(shù)的定義 C51函數(shù)的定義實際上已經(jīng)包含了中斷服務(wù)函數(shù),但為了明確起見,下面專門給出中斷處理函數(shù)的具體定義形式:void函數(shù)名(void)[函數(shù)模式]interruptm[usingn]{ 局部變量定義 執(zhí)行語句}

中斷服務(wù)函數(shù)需要注意以下幾點: 1)中斷服務(wù)函數(shù)不傳遞參數(shù); 2)中斷服務(wù)函數(shù)沒有返回值; 3)中斷服務(wù)函數(shù)必須有interruptm屬性; 4)進入中斷服務(wù)函數(shù),ACC、B、PSW會進棧,根據(jù)需要,DPL、DPH也可能進棧,如果沒有usingn屬性,R0~R7也可能進棧,否則不進棧; 5)在中斷服務(wù)函數(shù)中調(diào)用其它函數(shù),被調(diào)函數(shù)最好設(shè)置為可重入的,因為中斷是隨機的,有可能中斷服務(wù)函數(shù)所調(diào)用的函數(shù)出現(xiàn)嵌套調(diào)用; 6)不能夠直接調(diào)用中斷服務(wù)函數(shù)。

例4-4編寫程序,使用定時器/計數(shù)器0定時并產(chǎn)生中斷,實現(xiàn)從P1.7產(chǎn)生方波的功能。

程序如下:#include<reg52.h>#define TIMER0L 0x18 //設(shè)振蕩頻率為12MHz#define TIMER0H 0xfc //定時1ms(1000微秒)voidtimer0_int(void)interrupt1{ TL0=TIMER0L;

TH0=TIMER0H;

P1_7=~P1_7; //產(chǎn)生的方波頻率為500Hz}

void main(void){ TMOD=0x01; //設(shè)置T1模式1定時

TL0=TIMER0L; //設(shè)置T0低8位初值

TH0=TIMER0H; //設(shè)置T0高8位初值

IE=0x82; //開T0中斷和總中斷

TR0=1; //開T0運行 while(1); //等待中斷,產(chǎn)生方波}

4.10C51集成開發(fā)軟件KeilC主要內(nèi)容4.10.1KeilC集成開發(fā)工具簡介4.10.2KeilC操作界面4.10.3KeilC的使用4.10.4項目的運行調(diào)試4.10C51集成開發(fā)軟件KeilC

KeilC:是德國KEIL公司開發(fā)的單片機C語言編譯器。其前身是FRANKLINC51,功能相當(dāng)強大。

μVision2:是一個forWindows的、集成化的C51開發(fā)環(huán)境。集成了文件編輯處理、項目管理、編譯鏈接、軟件仿真調(diào)試等多種功能,是強大的C51開發(fā)工具。 在后面的討論中,對KeilC和μVision2兩個術(shù)語不做嚴(yán)格的區(qū)分,一般多稱呼為KeilC,包含有μVision2集成開發(fā)環(huán)境之意。

4.10.1KeilC集成工具簡介

一、編譯器和鏈接器 KeilC的編譯器和鏈接器包括C51、A51、L51和BL51。

C51是C語言編譯器,其功能是將C源代碼編譯生成可重新定位的目標(biāo)模塊。

A51是匯編語言編譯器,其功能是將匯編源代碼編譯生成可重新定位的目標(biāo)模塊。

L51是鏈接/定位器,其功能是將匯編源代碼和C源代碼生成的可重定位的目標(biāo)模塊文件(.OBJ),與庫文件鏈接、定位生成絕對目標(biāo)文件。

4.10.1KeilC集成工具簡介

BL51也是鏈接/定位器,除了具有L51所有的功能之外,(1)可以鏈接定位大于64KB的程序;(2)具有代碼域及域切換功能;(3)可用于RTX51實時多任務(wù)操作系統(tǒng)。

二、LIB51庫管理器

LIB51庫管理器可以把由匯編器、編譯器創(chuàng)建的目標(biāo)文件構(gòu)建成目標(biāo)庫(.LIB)。 這些庫是按規(guī)定格式排列的目標(biāo)模塊,可在以后被鏈接器所使用。4.10.1KeilC集成工具簡介

三、軟件模擬調(diào)試器

dScope51是一個源級軟件模擬調(diào)試器,功能強大。它可以調(diào)試由C51編譯器、A51匯編器、ASM-51匯編器產(chǎn)生的程序;

可以模擬CPU及其外圍器件,如內(nèi)部串行口、定時器/計數(shù)器,外部I/O口等。 除了軟件模擬調(diào)試器dScope51之外,μVision2還集成有硬件調(diào)試器tScope51和監(jiān)視程序Monitor51。tScope51用于對硬件目標(biāo)板進行調(diào)試。Monitor51通過PC的串行口與目標(biāo)板進行通信,在PC機的顯示器上顯示程序的運行情況。

4.10.2KeilC操作界面

編輯狀態(tài)的操作界面主要由5部分組成:最上面的菜單欄、菜單欄下面的工具欄、左邊的工程管理窗口、中間的編輯窗口、下面的輸出信息窗口。

菜單項主要有:文件、編輯、視圖(View)、工程、調(diào)試、片內(nèi)外設(shè)(Peripherals)、工具、軟件版本控制系統(tǒng)(SVCS)、窗口、幫助。

工具都是相應(yīng)菜單項的快捷操作按鈕,所以,下面以介紹菜單項為主線,并指明對應(yīng)的工具按鈕。4.10.2KeilC操作界面圖4-6KeilC51在編輯狀態(tài)下的操作界面輸出信息窗口工程管理器窗口工具欄菜單欄編輯窗口4.10.2KeilC操作界面

一、文件(File)菜單 文件菜單下都是常見的項,不再給出對應(yīng)的工具按鈕。 1)New 2)Open 3)Close 4)Save 5)Saveas…

6)DeviceDatabase:維護器件數(shù)據(jù)庫 7)PrintSetup…:設(shè)置打印機 8)Print 9)Exit4.10.2KeilC操作界面

二、編輯(Edit)菜單1)Undo 2)Redo:恢復(fù)上次的撤銷3)Cut 4)Copy5)Paste6)IndentSelectText:縮進一個制表符位7)UnindentSelectText左移一個制表符位8)ToggleBookmark:在當(dāng)前行置書簽9)GotoNextBookmark移光標(biāo)到下一書簽10)GotoPreviousBookmark: 移光標(biāo)到上一個書簽4.10.2KeilC操作界面11)ClearAllBookmark: 清除當(dāng)前文件中所有的書簽12)Find…13)Replace…:查找與替換14)FindinFiles…: 在多個文件中查找字符串15)GotoMatchingBrace: 尋找匹配的各種括號

4.10.2KeilC操作界面

三、查看(View)菜單1)StatusBar:顯示或隱藏狀態(tài)欄2)FileToolbar:顯示或隱藏文件工具欄3)BuildToolbar:顯示或隱藏編譯工具欄4)DebugToolbar:顯示或隱藏調(diào)試工具欄5)ProjectWindows:顯示或隱藏工程窗口6)OutputWindows:顯示或隱藏輸出窗口7)SourceBrowser:打開源文件瀏覽器窗口8)DisassemblyWindows: 顯示或隱藏反匯編窗口4.10.2KeilC操作界面9)Watch&CallStackWindows: 顯示或隱藏觀察和堆棧窗口10)MemoryWindows: 顯示或隱藏存儲器窗口11)CodeCoverageWindows: 顯示或隱藏代碼覆蓋窗口12)PerformanceAnalyzerWindows: 顯示或隱藏性能分析窗口13)SymbolWindows: 顯示或隱藏符號變量窗口4.10.2KeilC操作界面 14)SerialWindows#1: 顯示或隱藏串行口窗口1 15)SerialWindows#2: 顯示或隱藏串行口窗口2 16)Toolbox:顯示或隱藏工具箱 17)PeriodicWindowsUpdate: 在調(diào)試運行程序時,周期刷新調(diào)試窗口 18)WorkbookMode: 顯示或隱藏工作簿窗口的標(biāo)簽 19)Option…: 設(shè)置顏色、字體、快捷鍵和編輯器選項4.10.2KeilC操作界面

四、工程(Project)菜單1)NewProject…: 創(chuàng)建一個新工程2)ImportμVision2Project…: 導(dǎo)入工程文件3)OpenProject:打開一個已有工程4)CloseProject:關(guān)閉當(dāng)前工程5)ComponentsEnvironmentandBooks: 設(shè)置工具書、包含文件和庫文件的路徑6)SelectDeviceforTarget: 從器件庫中選擇一種CPU4.10.2KeilC操作界面7)RemoveGroups…: 從工程中刪去組或文件8)OptionforTarget…: 設(shè)置對象、組或文件的工具選項,設(shè)置當(dāng)前目標(biāo)選項,選擇當(dāng)前目標(biāo)9)BuildTarget: 編譯修改過的文件并生成應(yīng)用10)RebuildTarget: 重新編譯所有的文件并生成應(yīng)用11)Translate…:編譯當(dāng)前文件12)StopBuild:停止當(dāng)前的編譯過程4.10.2KeilC操作界面

五、調(diào)試(Debug)菜單1)Start/StopDebugging: 啟動/停止調(diào)試模式2)Go:全速運行3)Step:跟蹤運行4)StepOver:單步運行5)Stepoutofcurrentfunction: 一步執(zhí)行完當(dāng)前函數(shù)并返回6)RuntoCursorline: 一步運行到當(dāng)前光標(biāo)處7)StopRunning:停止運行4.10.2KeilC操作界面8)Breakpointing…:打開斷點對話框9)Insert/RemoveBreakpoint: 在當(dāng)前行設(shè)置/清除斷點10)Enable/DisableBreakpoint: 使能/禁止當(dāng)前行的斷點11)DisableAllBreakpoints: 禁止所有斷點12)KillAllBreakpoints:清除所有斷點13)ShowNextStatement: 顯示下一條指令4.1

溫馨提示

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

評論

0/150

提交評論