已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第9章 單片機(jī)C語言程序設(shè)計(jì) 9.1 Keil C簡(jiǎn)介與環(huán)境設(shè)置 9.2 Cx51簡(jiǎn)介 9.3 Cx51開發(fā)工具簡(jiǎn)介 9.4 Cx51應(yīng)用程序設(shè)計(jì)舉例,隨著單片機(jī)應(yīng)用的深入發(fā)展和強(qiáng)盛的社會(huì)需求,應(yīng)用高級(jí)語言進(jìn)行單片機(jī)程序設(shè)計(jì)正在逐漸增多,本章主要介紹如何用C語言開發(fā)單片機(jī)應(yīng)用程序。 一般情況下單片機(jī)常用的程序設(shè)計(jì)語言有兩種: 匯編語言: 匯編語言具有執(zhí)行速度快、占存儲(chǔ)空間少、對(duì)硬件可直接編程等特點(diǎn),因而特別適合在對(duì)實(shí)時(shí)性能要求比較高的情況下使用。 C語言: C語言克服了匯編語言的不足之處,同時(shí)又增加了代碼的可讀性,語言大多數(shù)代碼被翻譯成目標(biāo)代碼后,其效率和匯編語言相當(dāng)。特別是C語言的內(nèi)嵌匯編功能,使C語言對(duì)硬件操作更加方便。 9.1 Keil C簡(jiǎn)介與環(huán)境設(shè)置 Keil C Vision2 開發(fā)環(huán)境是德國(guó)Keil Software,Inc.and Keil Elektro nik GmbH開發(fā)的微處理器開發(fā)平臺(tái),可以開發(fā)多種8051兼容單片機(jī)程序。其界面如圖9-1所示。,圖9-1:Keil C Vision2,Cx51有兩種使用方式。第一種方式是在Vision2 IDE中使用,不用進(jìn)行設(shè)置;第二種方式是在命令提示符下使用。如果使用命令方式,需要設(shè)置如下變量: PATH=E:KeilcC51BIN TMP=E:KeilcTmp C51INC=E:KeilcC51INC C51LIB=E:KeilcC51LIB 在Windows NT環(huán)境下設(shè)置方式為:我的電腦-屬性-高級(jí)-環(huán)境變量-新建 設(shè)置好運(yùn)行環(huán)境后就可以在命令提示符下編譯C語言源程序,其格式如下: C51 源文件名 控制命令 . 9.2 Cx51簡(jiǎn)介 9.2.1 Cx51的擴(kuò)展 Cx51編譯器兼容ANSI C標(biāo)準(zhǔn),又?jǐn)U展支持了8051微處理,器,其擴(kuò)展內(nèi)容如下: 存儲(chǔ)區(qū); 存儲(chǔ)區(qū)類型; 存儲(chǔ)模型; 存儲(chǔ)類型說明符; 變量數(shù)據(jù)類型說明符; 位變量和位可尋址數(shù)據(jù); SFR; 指針; 函數(shù)屬性。 9.2.2 存儲(chǔ)區(qū) 8051單片機(jī)支持程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器的分離,存儲(chǔ)器根據(jù)讀寫情況可以分為:程序存儲(chǔ)區(qū)(ROM)、快速讀寫存儲(chǔ)器(內(nèi)部RAM)、隨機(jī)讀寫存儲(chǔ)器(外部RAM)。,1. 程序存儲(chǔ)器(code) 在8051中程序存儲(chǔ)器是只讀存儲(chǔ)器,其空間為64K 。 2. 內(nèi)部數(shù)據(jù)存儲(chǔ)器 在8051單片機(jī)中,內(nèi)部數(shù)據(jù)存儲(chǔ)器屬于快速可讀寫存儲(chǔ)器,與51兼容的擴(kuò)展型單片機(jī)最多有256字節(jié)內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)。 3. 外部數(shù)據(jù)存儲(chǔ)器 外部數(shù)據(jù)存儲(chǔ)器又稱隨機(jī)讀寫存儲(chǔ)器,訪問存儲(chǔ)空間為64KB。其訪問速度要比內(nèi)部RAM慢。訪問外部RAM的數(shù)據(jù)要使用指針進(jìn)行間接訪問。 9.2.3 存儲(chǔ)模式 在Cx51中,存儲(chǔ)器模式可以確定一些變量在缺省情況下的存儲(chǔ)器類型。程序中可用編譯器控制命令SMALL、COMPACT、LARGE指定存儲(chǔ)器模式。,1. SMALL模式 SMALL模式中所有的變量在缺省的情況下位于單片機(jī)的內(nèi)部數(shù)據(jù)區(qū),這和用data存儲(chǔ)類型標(biāo)識(shí)符聲明的變量是相同的。在本模式中變量訪問非常有效,然而所有對(duì)象和堆棧必須適和內(nèi)部RAM。 2. COMPACT模式 COMPACT模式中所有變量在缺省的情況下都存放在外部數(shù)據(jù)區(qū)的一頁(256B)中,這和用pdata存儲(chǔ)類型標(biāo)識(shí)符聲明的變量是相同的。 3. Large模式 LARGE模式下所有變量在缺省情況下存放在外部數(shù)據(jù)存儲(chǔ)區(qū)(范圍為64k字節(jié)),這和用xdata存儲(chǔ)類型標(biāo)識(shí)符聲明的變量是一致的,該模式使用數(shù)據(jù)指針DPTR尋址。 9.2.4 數(shù)據(jù)類型 在Cx51中不僅支持所有的C語言標(biāo)準(zhǔn)數(shù)據(jù)類型,而且還對(duì)其進(jìn)行了擴(kuò)展,增加了專用于訪問8051硬件的數(shù)據(jù)類型,使其對(duì)單片機(jī)的操作更加靈活。,1. bit類型 bit用于聲明位變量,其值為1或0。 2. sbit類型 sbit類型用于聲明可位尋址變量中的某個(gè)位變量,其值為1或0。 3. sfr類型 sfr類型用于聲明特殊功能寄存器(8位),位于內(nèi)部RAM地址為0x80-0xFF的128字節(jié)存儲(chǔ)單元,這些存儲(chǔ)器一般用作對(duì)計(jì)時(shí)器、計(jì)數(shù)器、串口、并口和外圍使用。 4. sfr16類型 sfr16類型用于聲明兩個(gè)連續(xù)地址的特殊功能寄存器(地址范圍為065 535)。 9.2.5 指針 所謂指針就是存儲(chǔ)單元的地址,指針變量就是存放地址的變量。 在Cx51編譯器中指針可以分為兩種類型:通用指針和指定存儲(chǔ)區(qū)地址指針。,1. 通用指針 所謂通用指針是指未對(duì)指向的對(duì)象(變量)存儲(chǔ)空間進(jìn)行說明的指針。通用指針可以訪問8051存儲(chǔ)空間中與位置無關(guān)的任何變量。 2. 存儲(chǔ)區(qū)域的指針 所謂存儲(chǔ)區(qū)域的指針是指在指針聲明中包含存儲(chǔ)器類型。 程序中使用指定存儲(chǔ)區(qū)域的指針?biāo)俣纫韧ㄓ弥羔樋欤ㄖ付ù鎯?chǔ)區(qū)域指針在編譯時(shí)Cx51編譯器已知道其存儲(chǔ)區(qū)域,而通用指針直到運(yùn)行時(shí)才確定存儲(chǔ)區(qū)域),在實(shí)時(shí)控制系統(tǒng)中應(yīng)盡量使用指定存儲(chǔ)區(qū)域的指針。 9.2.6 函數(shù) 函數(shù)是C程序的基本單元,全部C都是由一個(gè)個(gè)函數(shù)組成的。在結(jié)構(gòu)化程序設(shè)計(jì)中,函數(shù)作為獨(dú)立的模塊存在,增加了程序的可讀性,為解決復(fù)雜問題提供了方便。C語言中的函數(shù)包括:主函數(shù)(main)、庫函數(shù)和自定義函數(shù)。,1. Cx51自定義函數(shù) Cx51具有自定義函數(shù)的功能,其自定義函數(shù)語法格式如下: return_type function_name(args,) small|compact|large reentrant interrupt n using n return_type: 指返回類型,在默認(rèn)情況下為int。 function_name:函數(shù)的名字。 args:函數(shù)的形式參數(shù)列表。 small compact large:函數(shù)的存儲(chǔ)模式。 reentrant:函數(shù)是否可重入,要注意可重入函數(shù)中的變量的同步。 interrupt:可以用interrupt告訴計(jì)算機(jī)這個(gè)函數(shù)是中斷服務(wù)函數(shù)。 using:指定函數(shù)所使用的寄存器組。 2. 中斷函數(shù) 在Cx51中提供了中斷支持函數(shù),中斷服務(wù)程序在Cx51中是,以中斷函數(shù)的形式出現(xiàn)的。此類型函數(shù)用interrupt關(guān)鍵字進(jìn)行描述。 3. 再入函數(shù) Cx51在調(diào)用函數(shù)時(shí),函數(shù)的形式參數(shù)及函數(shù)內(nèi)的局部變量將會(huì)動(dòng)態(tài)地存儲(chǔ)在固定的存儲(chǔ)單元中,一旦函數(shù)在執(zhí)行時(shí)被中斷,若再次調(diào)用該函數(shù)時(shí),函數(shù)的形式參數(shù)及函數(shù)內(nèi)的局部變量將會(huì)被覆蓋,導(dǎo)致程序不能正常運(yùn)行,為此,可在定義函數(shù)時(shí)用reentrant屬性引入再入函數(shù)。 再入函數(shù)可以被遞歸調(diào)用,也可以被多個(gè)程序調(diào)用。 9.3 Cx51開發(fā)工具簡(jiǎn)介 Cx51是專用于8051等嵌入式應(yīng)用的開發(fā)工具套件。該軟件可以對(duì)C源文件、匯編源文件進(jìn)行編譯、連接、生成并調(diào)試目標(biāo)程序。 Cx51以工程的形式組織各類資源文件,其程序開發(fā)步驟如下: 1. 創(chuàng)建工程,選擇Cx51開發(fā)環(huán)境Project菜單,選擇New Project菜單項(xiàng)來建立一個(gè)新的工程。 2. 選擇目標(biāo)芯片 在工程建立完成后,器件選擇窗口便會(huì)彈出,從器件庫選擇單片機(jī)應(yīng)用系統(tǒng)所使用的8051芯片 。 3. 創(chuàng)建并編寫C51源文件 選擇Cx51開發(fā)環(huán)境的File菜單的New菜單項(xiàng),這時(shí)會(huì)出現(xiàn)新建源程序編輯窗口,新建一個(gè)C語言源文件 。 4. 把源程序文件加入到工程中 在建立了源程序文件后,必須把源程序文件添加到工程中,以構(gòu)成一個(gè)完整的工程項(xiàng)目。 5. 為目標(biāo)芯片添加啟動(dòng)代碼 在main()函數(shù)執(zhí)行前,首先應(yīng)復(fù)位單片機(jī)內(nèi)部RAM、完成對(duì)硬件初始化等操作,即執(zhí)行一段初始化代碼。在Cx51中,STARTUP.A51文件是啟動(dòng)代碼文件,該文件適合大多數(shù)8051及其派生系列的目標(biāo)芯片。,6. 設(shè)置編譯、連接環(huán)境 7. 對(duì)工程進(jìn)行編譯和連接 選擇Cx51開發(fā)環(huán)境的Project菜單中的Build target菜單項(xiàng),則對(duì)工程中的文件進(jìn)行編譯、匯編和連接,生成二進(jìn)制代碼的目標(biāo)文件(.obj)、列表文件(.lst)、絕對(duì)地址目標(biāo)文件、絕對(duì)地址列表文件(.m51)、連接輸入文件(.imp)。 8. 調(diào)試程序 選擇Debug菜單的Start/stop Debug Session菜單項(xiàng),即可進(jìn)入調(diào)試狀態(tài)。在調(diào)試狀態(tài)下,目標(biāo)文件自動(dòng)轉(zhuǎn)換為HEX文件。在調(diào)試中可以對(duì)單片機(jī)的寄存器、內(nèi)存、所產(chǎn)生的匯編代碼、串口的輸出情況等進(jìn)行監(jiān)視 9.4 Cx51應(yīng)用程序設(shè)計(jì)舉例 9.4.1 輸入 單片機(jī)中的I/O口(即P0,P1,P2,P3)可以單獨(dú)的作為輸入/輸出口使用。在實(shí)際的開發(fā)過程中輸入輸出是單片機(jī)最基本的功能。,【例9-11】根據(jù)圖9-9所示實(shí)驗(yàn)電路,要求如下: 用輸入電路中接入的4個(gè)按鍵分別控制對(duì)應(yīng)的4個(gè)發(fā)光二極管的點(diǎn)亮。 判斷按鍵是否被按下(進(jìn)行去抖處理),如果按下判斷按的是哪個(gè)鍵,如果沒有鍵按下返回0xff。 根據(jù)所按下的按鍵點(diǎn)亮相應(yīng)的發(fā)光二極管。 在程序中for(j=0;j #include sbit CLK=P11; sbit DATA=P10;,圖9-9 單片機(jī)實(shí)驗(yàn)電路,sbit CONTROL=P12; void delay() unsigned int m; for(m=0;m500;m+); unsigned int GetPressKey() unsigned int j; unsigned int key; P0=0xff; key=P0; for(j=0;j100;j+); if(key=P0),void Process() unsigned int lsdata; unsigned int keycode; lsdata=0xff; keycode=GetPressKey(); CONTROL=0; if(keycode=0xfe) lsdata=0x7f; WriteData(lsdata); if(keycode=0xfd) unsigned char i; for(i=0;i8;i+), CLK=1; lsdata=lsdata1; DATA=CY; CLK=0; CLK=1; else return 0xff; ,void WriteData(unsigned int lsdata) lsdata=0xbf; WriteData(lsdata); if(keycode=0xfb) lsdata=0xdf; WriteData(lsdata); if(keycode=0xf7) ,lsdata=0xef; WriteData(lsdata); CONTROL=1; int main(void) while(1) Process(); return 0; 9.4.2 輸出 實(shí)現(xiàn)單片機(jī)的輸出操作就是將數(shù)據(jù)寫入I/O口。,【例9-12】如圖9-9所示,同時(shí)點(diǎn)亮4個(gè)發(fā)光二極管時(shí),對(duì)74LS164的完整控制程序。 源程序代碼如下: #include #include sbit CLK=P11; sbit DATA=P10; sbit CONTROL=P12; void delay() unsigned int m; for(m=0;m500;m+); void WriteData(unsigned int lsdata) unsigned char i;,for(i=0;i8;i+) CLK=1; lsdata=lsdata1; DATA=CY; CLK=0; CLK=1; int main(void) unsigned int lsdata; lsdata=0x00; while(1), CONTROL=0; /*所有發(fā)光二極管處于不發(fā)光狀態(tài)*/ WriteData(lsdata); delay(); CONTROL=1; return 0; 9.4.3 定時(shí)器/計(jì)數(shù)器 【例9-13】用定時(shí)器來控制發(fā)光二極管的亮/滅,間隔時(shí)間為2秒。 源程序代碼如下: #include #include,sbit CLK=P11; sbit DATA=P10; sbit CONTROL=P12; unsigned char count; void InitTimer() TMOD=0x01; TH0=0x3c; TL0=0xB0; EA=1; ET0=1; TR0=1; void Timer0(void) interrupt 1 using 1 ,TR0=0; TH0=0x3c; TL0=0xB0; if(count40) count+; else count=0; CONTROL=!CONTROL; TR0=1; ,void WriteData(unsigned int lsdata) unsigned char i; for(i=0;i8;i+) CLK=1; lsdata=lsdata1; DATA=CY; CLK=0; CLK=1; void InitData() ,c
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 貴州大學(xué)《電動(dòng)汽車動(dòng)力電池與能源管理》2023-2024學(xué)年第一學(xué)期期末試卷
- 貴陽學(xué)院《中法跨文化交際》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025天津市建筑安全員-C證(專職安全員)考試題庫
- 2025年河南建筑安全員《B證》考試題庫
- 2025年四川建筑安全員B證考試題庫附答案
- 2025江西省安全員考試題庫
- 廣州幼兒師范高等??茖W(xué)校《公共管理與服務(wù)課程開發(fā)與教材分析》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣州新華學(xué)院《軟件工程與實(shí)踐》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025湖南建筑安全員《C證》考試題庫
- 2025年江蘇省建筑安全員知識(shí)題庫附答案
- 貸款咨詢服務(wù)協(xié)議書范本
- 教務(wù)處主任批評(píng)與自我批評(píng)
- 氟馬西尼完整
- 合同-勞動(dòng)主體變更三方協(xié)議
- 挪用公款還款協(xié)議書范本
- 煤礦巷道噴涂技術(shù)方案
- 新版中國(guó)腦出血診治指南
- 高校搬遷可行性方案
- 充電樁選址優(yōu)化與布局規(guī)劃
- 科技產(chǎn)業(yè)園項(xiàng)目投資計(jì)劃書
- 苗木采購?fù)稑?biāo)方案(技術(shù)標(biāo))
評(píng)論
0/150
提交評(píng)論