21天學(xué)51單片機(jī)開發(fā):第11章 C51的預(yù)處理_第1頁
21天學(xué)51單片機(jī)開發(fā):第11章 C51的預(yù)處理_第2頁
21天學(xué)51單片機(jī)開發(fā):第11章 C51的預(yù)處理_第3頁
21天學(xué)51單片機(jī)開發(fā):第11章 C51的預(yù)處理_第4頁
21天學(xué)51單片機(jī)開發(fā):第11章 C51的預(yù)處理_第5頁
已閱讀5頁,還剩16頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

21天學(xué)51單片機(jī)開發(fā)第十一講:C51的預(yù)處理課程安排預(yù)處理命令概述宏定義指令文件包含指令條件編譯指令其他預(yù)處理指令預(yù)處理命令概述預(yù)處理命令,顧名思義,便是在程序編譯和執(zhí)行前首先執(zhí)行的命令。預(yù)處理命令在功能上有點(diǎn)類似于單片機(jī)匯編語言的偽指令。C51語言中的預(yù)處理命令包括文件包含指令、宏定義指令、條件編譯指令以及一些程序調(diào)試指令。預(yù)處理命令前要加一個(gè)“#”。預(yù)處理命令單片機(jī)C51語言中的預(yù)處理命令包括以下幾個(gè):#define#error#include#if#else#elif#endif#ifdef#ifndef#undef#line#pragma分類

這里,按照功能來講:#define和#undef屬于宏定義類指令#if、#else、#ifdef、#ifndef和#endif屬于條件編譯類指令#include屬于文件包含類指令#line、#error和#pragma用于其他用途的預(yù)處理指令。宏定義指令

宏定義指令是采用用戶自定義的標(biāo)識(shí)符來代替一些符號(hào)、常量以及表達(dá)式等。C51語言的宏定義指令包括#define和#undef,具體可以分為如下幾個(gè):#define指令帶參數(shù)的#define指令#undef指令#define指令

#define指令的使用格式如下:#define標(biāo)識(shí)符替換對(duì)象

宏定義指令一般放在程序的開頭,典型的宏定義指令示例如下:#defineTURE 1#defineFALSE 0#definestr hello!#definePI 3.14也就是說,如果在源代碼中,遇到TURE就用1代替,F(xiàn)ALSE就用0代替,str用hello!代替,PI就用3.14代替。宏定義指令的好處在程序中使用宏定義指令的好處是:可以采用較短的字符串來代替較長(zhǎng)的字符串,從而減少程序中字符串輸入的工作量??梢蕴岣叱绦虻目梢浦残浴1阌谡w修改一個(gè)程序中經(jīng)常使用的常量或者字符串,方便了程序的調(diào)試和修改。宏定義可以表示數(shù)組的大小,這樣便于程序的修改。示例如下:#defineSIZE10intch[SIZE];宏定義指令的注意事項(xiàng)

在程序中使用宏定義指令時(shí),應(yīng)注意以下幾點(diǎn):宏定義指令應(yīng)該放到程序文件的開始處。宏定義指令后面不需要加分號(hào)。如果程序中宏定義指令較多,可將其放到獨(dú)立的文件中,保存為*.h文件,然后用#include指令來訪問。宏名的定義需要滿足C51標(biāo)識(shí)符的命名規(guī)則。可以分為多行來書寫。宏定義的宏名可以嵌套使用。帶參數(shù)的#define指令宏定義指令#define還可以帶參數(shù)表,其一般形式如下:#define標(biāo)識(shí)符(參數(shù)表)替換對(duì)象帶參數(shù)的宏定義和函數(shù)的作用很相似。#undef指令#undef指令的一般形式如下:#undef宏名01 #include<stdio.h> //頭文件02 #definePI 3.14159 //宏定義PI=3.1415903 #defineL(R) 2*PI*R //帶參數(shù)的宏定義,用于計(jì)算周長(zhǎng)04 #defineS(R) PI*R*R //帶參數(shù)的宏定義,用于計(jì)算面積05 voidmain() //主函數(shù)06 {07 intr;08 r=2;09 printf("r=%d,L=%f\n",r,L(r)); //輸出周長(zhǎng)10 printf("r=%d,S=%f\n",r,S(r)); //輸出面積11 #undefPI //取消宏定義12 #undefL //取消宏定義13 #undefS //取消宏定義14 printf("r=%d,L=%f\n",r,L(r)); //輸出周長(zhǎng)15 printf("r=%d,S=%f\n",r,S(r)); //輸出面積16 }文件包含指令#include指令的一般形式如下:#include"頭文件.h"#include<頭文件.h>#include宏定義標(biāo)識(shí)符一個(gè)#include命令只能包含一個(gè)文件。

#include命令末尾不需要分號(hào)“;”結(jié)束。兩種使用區(qū)別

使用#include時(shí),文件的包含可以采用兩種方式:文件的包含采用雙引號(hào)文件的包含采用尖括號(hào)常用的頭文件absacc.hasscert.hctype.hintrins.hmath.hreg51.hsetjmp.hstdarg.hstdlib.hstdio.hstring.h條件編譯指令條件編譯指令提供了一種根據(jù)一定的條件來對(duì)程序中的語句段進(jìn)行編譯的功能。C51的條件編譯指令有:#if#else#ifdef#ifndef#endif雙分支條件編譯指令雙分支條件編譯指令的一般形式如下:#if表達(dá)式 語句段;#else

語句段;#endif

注意:跟在#if后面的表達(dá)式必須僅含常量及已定義過的標(biāo)識(shí)符

多分支條件編譯指令多分支條件編譯指令的一般形式如下:#if表達(dá)式0

語句段;#elif表達(dá)式1

語句段;#elif表達(dá)式2

語句段;#elif表達(dá)式3

語句段;…#elif表達(dá)式n

語句段;#endif

宏名判斷指令宏名判斷指令用于判斷宏名是否被定義,包括#ifdef指令與#ifndef指令。#ifdef宏名 語句段;#endif

#ifndef宏名 語句段;#endif

#line指令#line指令用于改變當(dāng)前行的行號(hào),也就是__LINE__的內(nèi)容。其一般形式如下:#line數(shù)字01 #include<stdio.h> //頭文件02 voidmain() 03 { 04 #line100 //初始化行計(jì)數(shù)器05 printf("LineNumber=%d\n",__LINE__); //行號(hào)10006 }#error指令#error指令用來強(qiáng)制停止編譯并輸出錯(cuò)誤信息。#error指令使用的一般形式如下:#error“message”

01 #include<stdio.h> //頭文件02 voidmain() //主函數(shù)03 {04 #ifdefSCORE05 if(SCORE>90) //如果宏SCORE存在,則執(zhí)行該語句 06 printf("VeryGood!\n"); 07 elseif(SCORE>80) 08 printf("Good!");09 elseif(SCORE>60)10 printf("Pass!");11 else12 printf("Lost!");13 #else14 #error"NoSCORE!\n" //如果宏SCORE不存在,則執(zhí)行該語句15 #endif16 }#pragma指令該指令提供了用戶程序和編譯器之間的交互。典型的#pragma指令示例如下:#pragmasfr //在C51語言中使用SFR#pragmaaccess //使用絕對(duì)地址#pragmaasm //在C51語言中插入?yún)R編語句01 #include<REG51.h> //頭文件02 voidmain() //主函數(shù)03 {04 while(1)05 {06 P1=0x00; //P1端口輸出07

溫馨提示

  • 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)論