c51程序設(shè)計基礎(chǔ)【谷風(fēng)詳析】_第1頁
c51程序設(shè)計基礎(chǔ)【谷風(fēng)詳析】_第2頁
c51程序設(shè)計基礎(chǔ)【谷風(fēng)詳析】_第3頁
c51程序設(shè)計基礎(chǔ)【谷風(fēng)詳析】_第4頁
c51程序設(shè)計基礎(chǔ)【谷風(fēng)詳析】_第5頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、公選課 單片機基礎(chǔ)及應(yīng)用,主講:張宏偉,1,特制分析,一、C及C51語言概述 二、C51基礎(chǔ)知識 三、C程序的規(guī)范化設(shè)計,2,特制分析,一、C及C51語言概述,常用編程語言 用什么語言最好?這主要取決于應(yīng)用領(lǐng)域,每種語言都有自已的長處和不足。 1)匯編語言和C語言在單片機及工控領(lǐng)域用較多。另外C語言也是一種通用語言,是學(xué)C+/c#的起點。 2)C+系統(tǒng)編程等多個方面,最常用的編譯器是VC。 3)C#/Java網(wǎng)絡(luò)編程方面新興的。 4)VB通用。,3,特制分析,C及C51語言的特點,語言簡潔,使用方便靈活。 可移植性好。 表達能力強。 表達方式靈活。 可進行結(jié)構(gòu)化程序設(shè)計。 可以直接操作計算機硬

2、件。 生成的目標(biāo)代碼質(zhì)量高。,4,特制分析,什么是ANSI C,ANSI 就是美國國家標(biāo)準協(xié)會(American National Standards Institute) ANSI C 就是美國國家標(biāo)準協(xié)會制定的一個C語言的標(biāo)準 。,5,特制分析,單片機C語言和ANSI C的區(qū)別和聯(lián)系,“單片機C語言” 通常和ANSI C間關(guān)系只是存在一個交集。也就是說,它們分別都存在著自己的特定內(nèi)容。由于ANSI C是一般C的基礎(chǔ),所以某些“單片機C語言”可能會舍去部分ANSI C中的標(biāo)準,以簡化編譯。 但反過來,某些“單片機C語言”還會增加一些單片機特有的語言特性,以方便針對單片機的編程,6,特制分析,

3、二、C51基礎(chǔ)知識,1、標(biāo)識符 2、關(guān)鍵字 3、 C51編譯器所支持的數(shù)據(jù)類型 4、C51對內(nèi)部資源的定義 5、常量 6、變量 7、數(shù)組 8、運算符 9、C51絕對地址訪問 10、 C51的基本語句 11、中斷服務(wù)程序,7,特制分析,1、標(biāo)識符,標(biāo)識符是用來標(biāo)識源程序中某個對象的名字,這些對象可以是函數(shù)、變量、數(shù)組等。 C語言對大小些敏感, 如“Timer1”、“TIMER1” 是完全不同定義的標(biāo)識符。 標(biāo)識符由字符串、數(shù)字和下劃線等組成,注意的是第一個字符必須是字母或下劃線。 標(biāo)識符在命名時應(yīng)當(dāng)簡單,含義清晰,這樣有助于閱讀理解程序。,8,特制分析,2、關(guān)鍵字,關(guān)鍵字則是編程語言保留的特殊標(biāo)

4、識符,它們具有固定名稱和含義,在程序編寫中不允許標(biāo)識符與關(guān)鍵字亦同。 在KEIL uVision2中的關(guān)鍵字除了有ANSI C標(biāo)準的32個關(guān)鍵字外還根據(jù)51單片機的特點擴展了相關(guān)的關(guān)鍵字。,9,特制分析,關(guān)鍵字 :,10,特制分析,3、KEIL C51編譯器所支持的數(shù)據(jù)類型,11,特制分析,1)char字符類型,char類型的長度是一個字節(jié),通常用于定義處理字符數(shù)據(jù)的變量或常量。 unsigned char:0255。 signed char:字節(jié)中最高位字節(jié)表示數(shù)據(jù)的符號,“0”表示正數(shù),“1”表示負數(shù),負數(shù)用補碼表示。所能表示的數(shù)值范圍是-128+127。 unsigned char常用于

5、處理ASCII字符或用于處理小于或等于255的整型數(shù)。,12,特制分析,2)int整型,int整型長度為兩個字節(jié),用于存放一個雙字節(jié)數(shù)據(jù)。 signed int:-32768+32767 unsigned int:065535,13,特制分析,3)long長整型 long長整型長度為四個字節(jié),用于存放一個四字節(jié)數(shù)據(jù)。分有signed long和unsigned long 4)float浮點型 float浮點型在十進制中具有7位有效數(shù)字,是符合IEEE754標(biāo)準的單精度浮點型數(shù)據(jù),占用四個字節(jié)。 5)*指針型 指針型本身就是一個變量,在這個變量中存放的指向另一個數(shù)據(jù)的地址。,14,特制分析,6)

6、bit位標(biāo)量,C51編譯器的擴充數(shù)據(jù)類型 利用bit位標(biāo)量可定義一個位標(biāo)量,但不能定義位指針,也不能定義位數(shù)組。 它的值是一個二進制位,不是0就是1,類似高級語言中的Boolean類型中的True和False。,15,特制分析,7)sfr特殊功能寄存器,sfr也是一種擴充數(shù)據(jù)類型 占用一個內(nèi)存單元,值域為0255。利用它可以訪問51單片機內(nèi)部的所有特殊功能寄存器。 其用法: sfr 特殊功能寄存器名 = 特殊功能寄存器地址常數(shù); 如sfr P1 = 0 x90;/*定義P1 I/O口,其地址90H*/。 如用P1 = 255 /*把FFH送入P1中(對P1 端口的所有引腳置高電平)*/。,16

7、,特制分析,8)Sfr16,16位特殊功能寄存器 sfr16占用兩個內(nèi)存單元,值域為065535。sfr16和sfr一樣用于操作特殊功能寄存器,所不同的是它用于操作占兩個字節(jié)的寄存器。 用法: sfr16 特殊功能寄存器名= 特殊功能寄存器地址常數(shù); 如8052的T2定時器,可以定義為: sfr16 T2 = 0 xCC; /*這里定義8052定時器2,地址為T2L=CCH,T2H=CDH*/,17,特制分析,9)sbit可尋址位,sbit是C51中的一種擴充數(shù)據(jù)類型,利用它可以訪問芯片內(nèi)部RAM中的可尋址位或特殊功能寄存器中的可尋址位。,18,特制分析,9)sbit可尋址位,sbit 的用法

8、有三種: (1) sbit 位變量名 = 位地址 例如:sbit P1_1 = 0 x91; (2) sbit 位變量名 = 特殊功能寄存器名 位位置 例如:sfr P1 = 0 x90; sbit P1_1 = P1 1;/*P1_1 為P1中的P1.1 引腳*/ (3)sbit 位變量名字節(jié)地址 位位置(位序號) 例如:sbit P1_1 = 0 x90 1;,19,特制分析,4、C51對內(nèi)部資源的定義,MCS-51內(nèi)部資源定義函數(shù)是MCU中寄存器的地址映射。MCS-51單片機提供128字節(jié)的SFR尋址區(qū),地址為80HFFH,51單片機中,除了程序計數(shù)器PC和4組通用寄存器組之外,其他所有

9、的寄存器均為SFR,并位于片內(nèi)特殊寄存器區(qū)。 這個區(qū)域可位尋址、字節(jié)尋址或字尋址,用來控制定時/計數(shù)器、I/O口、串行口等部件。 特殊功能寄存器在C51語言中的聲明,由幾個關(guān)鍵字來完成。,20,特制分析,4、C51對內(nèi)部資源的定義,MCS-51單片機所有標(biāo)準的寄存器的使用都是已經(jīng)由C51頭文件定義完成,編程人員可以直接使用符號的定義。 在使用C51已定義的寄存器符號時,要用預(yù)編譯命令#include將有關(guān)“頭文件”包括到源文件中。,21,特制分析,4、C51對內(nèi)部資源的定義,Keil軟件中提供實現(xiàn)此功能的頭文件很多,如“reg51.h”、“reg52.h”、“AT89X51.H”、“AT89X

10、52.H”等,可自行選型。使用MCS-51內(nèi)部資源定義時要用到“reg51.h”文件,因此源文件開頭應(yīng)有以下預(yù)編譯命令: #include 或 #include ”reg51.h”。 思考:這兩種格式有何不同?,22,特制分析,4、C51對內(nèi)部資源的定義,尋找頭文件時候的路徑順序不同 使用尖括號,先去找系統(tǒng)庫目錄 使用分號,先去找當(dāng)前目錄 為了更快的找到頭文件,加快編譯速度,建議: 自定義頭文件用引號 系統(tǒng)頭文件用尖括號,23,特制分析,例1:利用MCS-51單片機的P1 引腳P1.0 引接一只LED,送“0”點亮,送“1”滅。則要求點亮,程序如下:,24,特制分析,例1:利用MCS-51單片

11、機的P1 引腳P1.0 引接一只LED,送“0”點亮,送“1”滅。則要求點亮,程序如下: #include “reg51.h” sbit P1_0=P10; void main() P1_0=0; ,main()函數(shù):也稱為主函數(shù)。C語言都是從main()函數(shù)開始執(zhí)行的。前面加了一個void 是說明該函數(shù)是沒有返回值的。,25,特制分析,#include 代表的是加載頭文件,頭文件是C編譯器中帶的已經(jīng)定義的函數(shù)的集合或自定義的一個函數(shù)的集合。 程序中加載一個reg51.h的文件,那么打開reg51.h里邊的內(nèi)容是什么呢? 如編碼器在C盤下C51文件夾內(nèi),則REG51.h文件的路徑是C:Keil

12、C51INCreg51.h。 例如: P1定義為 sfr P1 = 0 x90;,26,特制分析,上例中,符號P1(代表P1鎖存器)已經(jīng)在頭文件“reg51.h”中有定義。 P1_0表示P1.0引腳,它沒有被事先定義好,所以需要使用sbit進行定義。 注意: AT89X51.H 頭文件中有P1_0的位定義。,27,特制分析,例1:利用MCS-51單片機的P1 引腳P1.0 引接一只LED,送“0”點亮,送“1”滅。則要求點亮,程序如下: #include void main() P1_0=0; ,思考:如果點量8個燈,如何編程序。,28,特制分析,5、常量,常量是在程序運行過程中不能改變值的量

13、,而變量是可以在程序運行過程中不斷變化的量。 變量的定義可以使用所有C51編譯器支持的數(shù)據(jù)類型 常量的數(shù)據(jù)類型只有整型、浮點型、字符型、字符串型和位標(biāo)量。,29,特制分析,5、常量,1)整型常量 整型常量可以表示為: 十進制,如123、0、89等。 十六進制則以0 x開頭如0 x34,-0 x3B等。 長整型就在數(shù)字后面加字母L,如104L等。,30,特制分析,5、常量,2)浮點型常量: 可分為十進制和指數(shù)表示形式。 十進制由數(shù)字和小數(shù)點組成,如0.888,3345.345,0.0等,整數(shù)或小數(shù)部分為0,可以省略但必須有小數(shù)點。,31,特制分析,常量可用在不必改變值的場合,如固定的數(shù)據(jù)表,字庫

14、等。常量的定義方式有幾種:#difine False 0 x0; /用預(yù)定義語句可以定義常量#difine True 0 x1; /這里定義False為0,True為1 /在程序中用到False編譯時自動用0替換,同理True替換為1,32,特制分析,unsigned int code a=100; /這一句用code把a定義在程序存儲器中并賦值 const unsigned int c=100; /用const定義c為無符號int常量并賦值 以上兩句它們的值都保存在程序存儲器中,而程序存儲器在運行中是不允許被修改的,所以如果在這兩句后面用了類似a=110,a+這樣的賦值語句,編譯時將會出錯。

15、,33,特制分析,6、變量,變量就是一種在程序執(zhí)行過程中其值能不斷變化的量。要在程序中使用變量必須先用標(biāo)識符作為變量名,并指出所用的數(shù)據(jù)類型和存儲模式,這樣編譯系統(tǒng)才能為變量分配相應(yīng)的存儲空間。,34,特制分析,6、變量,定義一個變量的格式如下: 存儲種類 數(shù)據(jù)類型 存儲器類型變量名表 在定義格式中除了數(shù)據(jù)類型和變量名表是必要的,其它都是可選項。 存儲種類是指變量在程序執(zhí)行過程中的作用范圍。存儲種類有四種: 自動(auto),外部(extern),靜態(tài)(static)和寄存器(register),缺省類型為自動(auto),35,特制分析,6、變量,存儲器類型的說明就是指定該變量在C51硬件系

16、統(tǒng)中所使用的存儲區(qū)域,并在編譯時準確的定位。,36,特制分析,KEIL 所能認別的存儲器類型,37,特制分析,如果省略存儲器類型,系統(tǒng)則會按編譯模式SMALL,COMPACT或LARGE所規(guī)定的默認存儲器類型去指定變量的存儲區(qū)域。 無論什么存儲模式都可以聲明變量在任何的8051存儲區(qū)范圍,然而把最常用的命令如循環(huán)計數(shù)器和隊列索引放在內(nèi)部數(shù)據(jù)區(qū)可以顯著的提高系統(tǒng)性能。 還有要指出的就是變量的存儲種類與存儲器類型是完全無關(guān)的。,38,特制分析,例: 數(shù)據(jù)類型 存儲類型 變量 Char data var1; bit bdata flags; unsigned char xdata vextor10;

17、,39,特制分析,7、數(shù)組,數(shù)組是同一類型變量的有序集合。先定義后使用,一維的定義格式: 數(shù)據(jù)類型 數(shù)組名 常量表達式; unsigned int xcount 10; /定義無符號整形數(shù)組,有10 個數(shù)據(jù)單元 char inputstring 5; /定義字符形數(shù)組,有5 個數(shù)據(jù)單元,40,特制分析,8、運算符,與C語言基本相同: 1)算術(shù)運算: + - * / % : (加 減 乘 除 取余運算符) 2)關(guān)系運算 = = : (大于 大于等于 小于 小于等于) = != :(測試等于 測試不等于),41,特制分析,8、運算符,3)邏輯運算 /*將數(shù)據(jù)3AH寫入地址為0 xffec的存儲單元

18、或I/O端口*/ ,44,特制分析,10、C51的基本語句,與標(biāo)準C語言基本相同: if 選擇語言 switch/case 多分支選擇語言 while 循環(huán)語言 do-while 循環(huán)語言 for 循環(huán)語言,45,特制分析,11、中斷服務(wù)程序,函數(shù)名()interrupt n using m Void int0demo(void) interrupt 0 using 2 /* 外部中斷0的服務(wù)函數(shù)定義,使用第二組工作寄存器組*/,46,特制分析,8051的中斷向量和中斷號,注意:函數(shù)不能直接調(diào)用中斷函數(shù);不能通過形參傳速參數(shù);但中斷函數(shù)允許調(diào)用其它函數(shù),兩者所使用的寄存器組應(yīng)相同。,47,特制

19、分析,三、C程序的規(guī)范化設(shè)計,在單片機C程序設(shè)計中,項目一般按功能進行結(jié)構(gòu)化設(shè)計。將一個項目劃分為多個功能,每個功能的相關(guān)程序放在一個C程序文檔中,稱之為一個模塊(group),對應(yīng)的文件名即為模塊名。 一個模塊通常由兩個文檔組成: 一個為頭文件.h,對模塊中的數(shù)據(jù)結(jié)構(gòu)和函數(shù)原型進行描述; 另一個則為C文件.c ,對數(shù)據(jù)實例或?qū)ο蠖x,以及函數(shù)算法具體實現(xiàn)。,48,特制分析,(1)C51庫函數(shù)與H頭文件,C51編譯器的運行庫中包含有豐富的庫函數(shù),使用庫函數(shù)可以大大簡化用戶的程序設(shè)計工作,提高編程效率。 每個庫函數(shù)都在相應(yīng)的頭文件中給出了函數(shù)原型說明,用戶如果需要使用庫函數(shù),必須在源程序的開始處

20、采用預(yù)處理器指令#include將有關(guān)的頭文件包含進來。,49,特制分析,C51包含的頭文件,常用頭文件有: reg51.h(定義特殊功能寄存器和位寄存器); math.h 數(shù)學(xué)函數(shù)庫(定義常用數(shù)學(xué)運算); absacc.h 絕對地址訪問頭文件 (定義一些宏用來對存儲器空間進行絕對地址訪問) intrins.h 內(nèi)部函數(shù)庫 (包含變量循環(huán)移位、位操作等函數(shù)),50,特制分析,(2) C51的程序結(jié)構(gòu),與一般C語言的結(jié)構(gòu)相同,以main()函數(shù)為程序人口,程序體中包含若干語句還可以包含若干函數(shù)。,51,特制分析,C51的程序結(jié)構(gòu)如下,全局變量說明 函數(shù)聲明 Main() 數(shù)據(jù)說明部分 語句執(zhí)行部

21、分,包括可能的函數(shù)調(diào)用語句等 函數(shù)類型 函數(shù)名(參數(shù)表)/*函數(shù)1*/ 數(shù)據(jù)說明部分 語句執(zhí)行部分,包括可能的函數(shù)調(diào)用語句等 函數(shù)類型 函數(shù)名(參數(shù)表)/*函數(shù)N*/ 數(shù)據(jù)說明部分 語句執(zhí)行部分,包括可能的函數(shù)調(diào)用語句等 ,52,特制分析,編程規(guī)范:,遵循好的C51編程規(guī)范能夠提高可讀性,提高源程序的編寫、調(diào)試和修改的效率,減少開發(fā)過程中的不利因素。 1)注釋 注釋內(nèi)容應(yīng)簡練、清楚、明了,對于一目了然的語句不加注釋。,53,特制分析,編程規(guī)范:,2)符號命名 對于常量、變量和函數(shù)等的命名要有一定的意義,能夠一目了然,反映其功能、作用或數(shù)據(jù)類型。對于常量一般使用大寫字母命名;對于變量一般使用簡寫的類型名作為前綴,反映變量意義的第一個字母大寫,其他小寫;對于函數(shù)名,將組成函數(shù)名的各個單詞的首字母大寫,其他小寫。,54,特制分析,編程規(guī)范:,3)編程風(fēng)格 編程風(fēng)格是在長期的程序編寫過程中遵循并養(yǎng)成的代碼編寫習(xí)慣,它包含了以上注釋的方法和命名的方法的使用習(xí)慣,以及語句格式的編輯風(fēng)格,主要體現(xiàn)在縮進,對齊方式和空格的使用。,55,特制分析,C51開發(fā)技巧,使用一些技巧是C51編譯器能夠從C源程序中產(chǎn)生高度優(yōu)化的代碼,提高單片機的運行效率。,56,特制分析,1)使用短變量 對于51單片機來說,大部分數(shù)據(jù)的處理都是以字節(jié)為

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論