第4章C語(yǔ)言程序設(shè)計(jì)及仿真調(diào)試._第1頁(yè)
第4章C語(yǔ)言程序設(shè)計(jì)及仿真調(diào)試._第2頁(yè)
第4章C語(yǔ)言程序設(shè)計(jì)及仿真調(diào)試._第3頁(yè)
第4章C語(yǔ)言程序設(shè)計(jì)及仿真調(diào)試._第4頁(yè)
第4章C語(yǔ)言程序設(shè)計(jì)及仿真調(diào)試._第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、於鉅屈園血囪息1/89第4章C語(yǔ)言程序設(shè)計(jì)及仿真調(diào)試4. 2 Keil C4. 3旖言程序設(shè)計(jì)及調(diào)試實(shí)例5:01:31權(quán)權(quán)所有。http:/www.mcuOO2/89/8051寄存器定義頭文件 /定義P1.0引腳/延時(shí)函數(shù)【例4-1】編程實(shí)現(xiàn)通過(guò)延時(shí)函數(shù),由P1.0輸出方波信號(hào)。 解;C語(yǔ)言程序如下:include ureg51. hwsbit P10=Pr0;void delay(long ent)main (void)while(cnt>0) ent; voidP10=l;whiled) 主程序循環(huán)delay (1000);P10=P10;5:01:31由Pl2口輸出信號(hào),如何修改程

2、序?3/89【例42】單片機(jī)Pl 口的Pl0和Pll各接一個(gè)開關(guān)KI、 K2, Pl.4. Pl.5. Pl6和Pl7各接一只發(fā)光二極管。有 K1和K2的不同狀態(tài)來(lái)確定哪個(gè)發(fā)光二極管被點(diǎn)亮。K2KI亮的二極管|00Ll|01L210L3i11L4|PI?+5VA5:01:31#include "rcg51 h" void main()MCS-51Pl!P15P14ttp:/w 4/89-Ll ”-HL2 ;"尸H-L3尸尸-LAchar a;a=Pl ;a=a&0x03 ;/屏蔽高6位if (a=0)P 1=0x83;else if (a= 1) P1 =

3、0x43 ;else if (a=2) Pl =0x23;else P l=0x 13 ;Pl?LL ”I 一+5VAMCIP1IP15P145:01:31*L3 ”5/89將例2用while循環(huán)實(shí)現(xiàn)。/include “ieg51.h"void main() tchar a;while (1)吐 Pl;a=a&0x03 ;屏蔽高6位switch (a)icaseO: Pl =0x83;case 1: Pl =0x43;case2: Pl=0x23;break;case3: P1 =0x 13 ;5:01:31權(quán)權(quán)所有。http:/www.mcu001 .com6/894.2

4、 Keil一、C51數(shù)據(jù)類型與運(yùn)算1.C51數(shù)據(jù)類型bit 位變量bit位變量是可定義一個(gè)位標(biāo)量,但不能定義位指針,也不能定義位數(shù)組。它的值是一個(gè)二進(jìn)制位,不是0就是1。bit lock;將lock定義為位變量bit direction;將direction定義為位變量5:01:31權(quán)權(quán)所有。http:/www.mcu001 .com7/89sbit可獨(dú)立尋址的位變量利用它能訪問(wèn)芯片內(nèi)部的RAM中的可尋址位或特殊功能寄存 器中的可尋址位。sbit CY=0xD7;定義進(jìn)位標(biāo)志CY的地址為D7HsbitAC=0xD0A6;定義輔助進(jìn)位標(biāo)志AC的地址為D6Hsbit RS0=0xD0A3; 定義

5、RSO 的地址為 D3H5:01:31權(quán)權(quán)所有。8/89sfr8位特殊功能寄存器sfr占用一個(gè)內(nèi)存單元,值域?yàn)?255。利用它能 訪問(wèn)51單片機(jī)內(nèi)部的所有特殊功能寄存器。例如:sfr PSW=0xD0;定義程序狀態(tài)字PSW的地址為D0Hsfr TMOD=Ox89;定義定時(shí)器/計(jì)數(shù)器方式控;別寄存器TMOD的地址為89Hsfr P 1=0x90 ;定義P1 口的地址為90H5:01:31權(quán)權(quán)所有。專機(jī)刪國(guó)雲(yún)型風(fēng)壯19/89sfrl6 16位特殊功能寄存器sfrl6占用兩個(gè)內(nèi)存單元,值域?yàn)?65535。sfrl6和sfr 一樣用于操作特殊功能寄存器,不同的是它用于操作占兩 個(gè)字節(jié)的寄存器,如定時(shí)器

6、T2。sfrl6 T2=0xCC;定義8052定時(shí)器2,低8位地址為/T2L=CCH,高8位T2H=CDH5:01:312. C51數(shù)據(jù)存儲(chǔ)類型權(quán)權(quán)所有。10/89存儲(chǔ)類型與存儲(chǔ)空間的對(duì)應(yīng)關(guān)系5:01:31權(quán)權(quán)所有。5:01:31權(quán)權(quán)所有。databdataidatapdataxdatacode直接尋址片內(nèi)數(shù)據(jù)存儲(chǔ)區(qū),訪問(wèn)速度快(128字節(jié))可位尋址片內(nèi)數(shù)據(jù)存儲(chǔ)區(qū),允許位與字節(jié)混合訪問(wèn)(16字 節(jié)),間接尋址片內(nèi)數(shù)據(jù)存儲(chǔ)區(qū),可訪問(wèn)片內(nèi)全部RAM地址空 間(256字節(jié))分頁(yè)尋址片外數(shù)據(jù)存儲(chǔ)區(qū)(256字節(jié)),由MOVX Ri訪問(wèn)尋址片外數(shù)據(jù)存儲(chǔ)區(qū)(64K字節(jié)),有MOVX DPTR訪問(wèn)尋址代碼存儲(chǔ)

7、區(qū)(64K字節(jié)),有MOVC DKIR訪問(wèn)5:01:31權(quán)權(quán)所有。11/89char data varl;字符變量char varl被定義為data存儲(chǔ)類型 ,定位在片內(nèi)RAM中bit bdata flags;位變Mflags被定義為bdata存儲(chǔ)類型,定位 在片內(nèi)RAM中的位尋址區(qū)(20H2FH)float idata x, y, z;浮點(diǎn)變量X, y, Z被定義為idata存儲(chǔ)類型 ,定位在片內(nèi)RAM中,并只能用間接尋址 的方法進(jìn)行訪問(wèn)unsigned int pdata無(wú)符號(hào)整型變最dimension被定義為pdatadimension;存儲(chǔ)類型,定位在片外數(shù)據(jù)存儲(chǔ)區(qū),并用 MOVX R

8、i訪問(wèn)unsigned char xdata無(wú)符號(hào)字符二維數(shù)組變量unsigned charvector1044;vector1044定義為xdata吞儲(chǔ)類型,定 位在片外RAM中,占據(jù)10X4X4=160個(gè)字 節(jié)空間unsigned char code數(shù)組歸被定義為code存儲(chǔ)類型,定位在程a=0x00,0x01;序存儲(chǔ)器中5:01:31權(quán)權(quán)所有。12/89C51運(yùn)算符表達(dá)式及其規(guī)則位運(yùn)算符及其表達(dá)式位運(yùn)算的操作對(duì)象只能是整型和字符型數(shù)據(jù),不能是實(shí)型數(shù)據(jù)。C51提供以下六種位運(yùn)算。& (按位與)相當(dāng)于ANL指令I(lǐng) (按位或)相當(dāng)于ORL指令八(按位異或)相當(dāng)于XRL指令(按位取反)相

9、當(dāng)于CPL指令« (左移)相當(dāng)于RL指令» (右移)相當(dāng)于RR指令5:01:31權(quán)權(quán)所有。C51流程控制語(yǔ)句13/891、選擇語(yǔ)句 if語(yǔ)句 switch/case 語(yǔ)句2、循環(huán)語(yǔ)句 while語(yǔ)句 dowhile語(yǔ)句 for語(yǔ)句5:01:31權(quán)權(quán)所有。爲(wèi)鉅屈霄剛虱1如89數(shù)組、數(shù)組是相關(guān)數(shù)據(jù)的一個(gè)有序集合,數(shù)組中的每個(gè) 元索都是同一類型的數(shù)據(jù)。-維數(shù)組由具有-個(gè)下標(biāo)的數(shù)組元素組成的數(shù)組稱為-維數(shù)組 例如:inta5:=l, 2, 3, 4, 5; 給全部元素賦值, a0=l, al=2, a2=3» a3=4, a4=5例 15:v15/892.二維數(shù)組由具有兩

10、個(gè)下標(biāo)的數(shù)組元素組成的數(shù)組稱為 二維數(shù)組。int a34= 1, 2, 3, 4, 5, 6, 7, 8, 9,10, II, 12; 全部初始化5:01:31權(quán)權(quán)所有。型諭i屈逼剛藏辰L> 6/89指針關(guān)于指針的基本概念請(qǐng)參閱有關(guān)資料 、當(dāng)定義一個(gè)指針變量時(shí),若未指定它所指向口壑寸 彖的存儲(chǔ)類型,則該指針變量被認(rèn)為是般抬針;反之若指定了它所指對(duì)象的存儲(chǔ)類型,則該指 針被認(rèn)為是基于存儲(chǔ)器的指針。5:01:31虹權(quán)所有。17/89基于存儲(chǔ)器的指針基于存儲(chǔ)器的指針是在說(shuō)明一個(gè)指針時(shí),指定它所 指向的對(duì)象的存儲(chǔ)類型。例如:char xdata *px;px為指向一個(gè)定義在xdata存儲(chǔ)器中的字

11、符變量的 指針變量。px本身在默認(rèn)的存儲(chǔ)器區(qū)域(由編譯模 式?jīng)Q定),其長(zhǎng)度為2字節(jié)。例 16:、一般指針在函數(shù)的調(diào)用中,函數(shù)的指針參數(shù)需要用一般指 針。一般指針的說(shuō)明形式如下:char *pz;5j 01: 31權(quán)權(quán)所有。http:/www.mcuOO 1 .com團(tuán)騷屈趣魴_1S/S9C5i函數(shù)k函數(shù)的嵌套函數(shù)的定義與分類函數(shù)的調(diào)用調(diào)用與遞歸調(diào)用 C51的庫(kù)函數(shù)5:01:31權(quán)權(quán)所有。9s9/C51的庫(kù)函數(shù)C51編譯器提供了豐富的庫(kù)函數(shù),使用這些庫(kù)函數(shù)人大提 髙了編程效率,用戶可以根據(jù)需要隨時(shí)調(diào)甬、每個(gè)庫(kù)函數(shù) 都在相應(yīng)的頭文件中給出了函數(shù)的原型,使用時(shí)只需在源 程序的開頭用編譯預(yù)處理命令in

12、clude將相關(guān)的賣文件包含 進(jìn)來(lái)即可。胃數(shù)學(xué)函數(shù)庫(kù)m ath.h標(biāo)準(zhǔn)函數(shù)庫(kù)stdlib.h絕對(duì)地址訪問(wèn)頭文件absacc.h內(nèi)部函數(shù)庫(kù)intrins.h5心:匸訪問(wèn)SFR和SFR_bit地址頭文件"戢滋屯20/89預(yù)處理(P126)包含命令#込。lude,宏定義命令#define等«在源程序中這些命令都放在函數(shù)之外,而且一般 都放在源文件的前面,它們稱為預(yù)處理部分。C語(yǔ)言提供了多種預(yù)處理功能,如宏定義、 文件包含、條件編譯等。合理地使用預(yù)處理功能 編寫的程序便于閱讀、修改、移植和調(diào)試,也有 利于模塊化程序設(shè)計(jì)。下面介紹常用的幾種預(yù)處 理功能。5:01:31工權(quán)所 有。ht

13、tp:/www.mcuOO 1 .com21/891.宏定義無(wú)參宏定義:無(wú)參宏的宏名后不帶參數(shù)。其定義的一般形式為: #define標(biāo)識(shí)符字符串、其中的表示這是一條預(yù)處理命令。凡是以“#” 開頭的均為預(yù)處理命令?!癲efine”為宏定義命令?!皹?biāo) 識(shí)符”為所定義的宏名?!白址笨梢允浅?shù)、表達(dá)式、 格式串等。符號(hào)常量的定義就是一種無(wú)參宏定義。常對(duì)程序中反復(fù)使用的表達(dá)式進(jìn)行宏定義。例如: #define M (y*y+3*y)是義M 表達(dá)式(y*y+3*y)。在編寫 源程序時(shí),所有的(y*y+3*y)都可由M代替,5:01:31權(quán)權(quán)所有。22/892. 文件包含文件包含是c預(yù)處理程序的另一個(gè)重

14、要功能。文件包含命令行的 一般形式為:ttinclude "文件名"例如:include "stdio. h"#include "math, h"文件包含命令的功能是把指定的文件插入該命令行位置取代該命 令行,從而把指定的文件和當(dāng)前的源程序文件連成一個(gè)源文件。在 程序設(shè)計(jì)中,文件包含是很有用的。一個(gè)大的程序可以分為多個(gè)模塊, 由多個(gè)程序員分別編程。有些公用的符號(hào)常量或宏定義等可單獨(dú)組成 一個(gè)文件,在其它文件的開頭用包含命令包含該文件即可使用。這樣, 可避免在每個(gè)文件開頭都去書寫那些公用量,從而節(jié)省時(shí)間,并減少 出錯(cuò)。5:01:31權(quán)權(quán)

15、所有。http:/www.mcuOO 1 .com妙凈屈23/89對(duì)文件包含命令還要說(shuō)明以下幾點(diǎn):(1)包含命令中的文件名可以用雙引號(hào)括起來(lái),也可以用尖括號(hào) 括起來(lái)。例如以下寫法都是允許的:include "stdio. h"#include <math. h>區(qū)別:使用尖括號(hào)表示在包含文件目錄中去查找(包含目錄是由用戶 在設(shè)置環(huán)境時(shí)設(shè)置的),而不在源文件目錄去査找; _使用雙引號(hào)則表示首先在當(dāng)前的源文件目錄中査找,若未找到 才到包含目錄中去査找。(2)一個(gè)include命令只能指定一個(gè)被包含文件,若有多個(gè)文件 要包含,則需用多個(gè)include命令。(3)文件包

16、含允許嵌套,即在一個(gè)被包含的文件中又可以包含另 一個(gè)文件。5:01:31權(quán)權(quán)所有。卽矗舫屈園更畫24/893. 條件編譯(自行學(xué)習(xí))可以按不同的條件去編譯不同的程序部分,因而產(chǎn)生不同的目 標(biāo)代碼文件。這對(duì)于程序的移植和調(diào)試是很有用的。(1)第一種形式:#def標(biāo)識(shí)符程序段#else程序段2ttendif它的功能是,如果標(biāo)識(shí)符已被define命令定義過(guò),則對(duì)程序段 1進(jìn)行編譯;否則對(duì)程序段2進(jìn)行編譯。如果沒有程序段2 (它為空), 本格式中的#else可以沒有。(2)第二種形式:#ifndef標(biāo)識(shí)符程序段1#else程序段2#endif功能:如果標(biāo)識(shí)符未被define命令定義過(guò)則對(duì)程序段1進(jìn) 行編譯,否則對(duì)程序段2進(jìn)行編譯。這與第一種形式的功 能正相反。權(quán)權(quán)所 有。26/89

溫馨提示

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