




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
21天學(xué)51單片機(jī)開(kāi)發(fā)第十一講:C51的預(yù)處理課程安排預(yù)處理命令概述宏定義指令文件包含指令條件編譯指令其他預(yù)處理指令預(yù)處理命令概述預(yù)處理命令,顧名思義,便是在程序編譯和執(zhí)行前首先執(zhí)行的命令。預(yù)處理命令在功能上有點(diǎn)類(lèi)似于單片機(jī)匯編語(yǔ)言的偽指令。C51語(yǔ)言中的預(yù)處理命令包括文件包含指令、宏定義指令、條件編譯指令以及一些程序調(diào)試指令。預(yù)處理命令前要加一個(gè)“#”。預(yù)處理命令單片機(jī)C51語(yǔ)言中的預(yù)處理命令包括以下幾個(gè):#define#error#include#if#else#elif#endif#ifdef#ifndef#undef#line#pragma分類(lèi)
這里,按照功能來(lái)講:#define和#undef屬于宏定義類(lèi)指令#if、#else、#ifdef、#ifndef和#endif屬于條件編譯類(lèi)指令#include屬于文件包含類(lèi)指令#line、#error和#pragma用于其他用途的預(yù)處理指令。宏定義指令
宏定義指令是采用用戶(hù)自定義的標(biāo)識(shí)符來(lái)代替一些符號(hào)、常量以及表達(dá)式等。C51語(yǔ)言的宏定義指令包括#define和#undef,具體可以分為如下幾個(gè):#define指令帶參數(shù)的#define指令#undef指令#define指令
#define指令的使用格式如下:#define標(biāo)識(shí)符替換對(duì)象
宏定義指令一般放在程序的開(kāi)頭,典型的宏定義指令示例如下:#defineTURE 1#defineFALSE 0#definestr hello!#definePI 3.14也就是說(shuō),如果在源代碼中,遇到TURE就用1代替,F(xiàn)ALSE就用0代替,str用hello!代替,PI就用3.14代替。宏定義指令的好處在程序中使用宏定義指令的好處是:可以采用較短的字符串來(lái)代替較長(zhǎng)的字符串,從而減少程序中字符串輸入的工作量??梢蕴岣叱绦虻目梢浦残浴1阌谡w修改一個(gè)程序中經(jīng)常使用的常量或者字符串,方便了程序的調(diào)試和修改。宏定義可以表示數(shù)組的大小,這樣便于程序的修改。示例如下:#defineSIZE10intch[SIZE];宏定義指令的注意事項(xiàng)
在程序中使用宏定義指令時(shí),應(yīng)注意以下幾點(diǎn):宏定義指令應(yīng)該放到程序文件的開(kāi)始處。宏定義指令后面不需要加分號(hào)。如果程序中宏定義指令較多,可將其放到獨(dú)立的文件中,保存為*.h文件,然后用#include指令來(lái)訪(fǎng)問(wèn)。宏名的定義需要滿(mǎn)足C51標(biāo)識(shí)符的命名規(guī)則??梢苑譃槎嘈衼?lái)書(shū)寫(xiě)。宏定義的宏名可以嵌套使用。帶參數(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ù)一定的條件來(lái)對(duì)程序中的語(yǔ)句段進(jìn)行編譯的功能。C51的條件編譯指令有:#if#else#ifdef#ifndef#endif雙分支條件編譯指令雙分支條件編譯指令的一般形式如下:#if表達(dá)式 語(yǔ)句段;#else
語(yǔ)句段;#endif
注意:跟在#if后面的表達(dá)式必須僅含常量及已定義過(guò)的標(biāo)識(shí)符
多分支條件編譯指令多分支條件編譯指令的一般形式如下:#if表達(dá)式0
語(yǔ)句段;#elif表達(dá)式1
語(yǔ)句段;#elif表達(dá)式2
語(yǔ)句段;#elif表達(dá)式3
語(yǔ)句段;…#elif表達(dá)式n
語(yǔ)句段;#endif
宏名判斷指令宏名判斷指令用于判斷宏名是否被定義,包括#ifdef指令與#ifndef指令。#ifdef宏名 語(yǔ)句段;#endif
#ifndef宏名 語(yǔ)句段;#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指令用來(lái)強(qiáng)制停止編譯并輸出錯(cuò)誤信息。#error指令使用的一般形式如下:#error“message”
01 #include<stdio.h> //頭文件02 voidmain() //主函數(shù)03 {04 #ifdefSCORE05 if(SCORE>90) //如果宏SCORE存在,則執(zhí)行該語(yǔ)句 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í)行該語(yǔ)句15 #endif16 }#pragma指令該指令提供了用戶(hù)程序和編譯器之間的交互。典型的#pragma指令示例如下:#pragmasfr //在C51語(yǔ)言中使用SFR#pragmaaccess //使用絕對(duì)地址#pragmaasm //在C51語(yǔ)言中插入?yún)R編語(yǔ)句01 #include<REG51.h> //頭文件02 voidmain() //主函數(shù)03 {04 while(1)05 {06 P1=0x00; //P1端口輸出07
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 試用期提前轉(zhuǎn)正了合同5篇
- 項(xiàng)目資金預(yù)算表-項(xiàng)目資金籌措與預(yù)算
- 建筑工程合同種類(lèi)
- 2025年淮南資格證模擬考試
- 2025年江西貨運(yùn)從業(yè)資格證考試題答案解析大全
- 云服務(wù)器托管服務(wù)及支持合同
- 個(gè)人酒店承包經(jīng)營(yíng)合同8篇
- 上海員工的勞動(dòng)合同范本5篇
- 課題申報(bào)書(shū)參考文獻(xiàn)格式
- 中國(guó)電建合同范本
- 儲(chǔ)備土地管護(hù)投標(biāo)方案 (技術(shù)方案)
- 學(xué)技能如何打逃生繩結(jié)固定繩結(jié)
- 自驅(qū)型成長(zhǎng):如何培養(yǎng)孩子的自律力
- 特殊教育:康復(fù)訓(xùn)練課程標(biāo)準(zhǔn)(年版)
- DCMM理論知識(shí)考試試題及答案
- 談心談話(huà)記錄100條范文(6篇)
- 中學(xué)生心理輔導(dǎo)-第一章-緒論
- 工業(yè)品買(mǎi)賣(mài)合同(樣表)
- 《教育學(xué)原理》馬工程教材第二章教育與社會(huì)發(fā)展
- 《常見(jiàn)疾病康復(fù)》期中考試試卷含答案
- 地球使用者地樸門(mén)設(shè)計(jì)手冊(cè)
評(píng)論
0/150
提交評(píng)論