




已閱讀5頁,還剩23頁未讀, 繼續免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第9章 單片機C語言程序設計 9.1 Keil C簡介與環境設置 9.2 Cx51簡介 9.3 Cx51開發工具簡介 9.4 Cx51應用程序設計舉例,隨著單片機應用的深入發展和強盛的社會需求,應用高級語言進行單片機程序設計正在逐漸增多,本章主要介紹如何用C語言開發單片機應用程序。 一般情況下單片機常用的程序設計語言有兩種: 匯編語言: 匯編語言具有執行速度快、占存儲空間少、對硬件可直接編程等特點,因而特別適合在對實時性能要求比較高的情況下使用。 C語言: C語言克服了匯編語言的不足之處,同時又增加了代碼的可讀性,語言大多數代碼被翻譯成目標代碼后,其效率和匯編語言相當。特別是C語言的內嵌匯編功能,使C語言對硬件操作更加方便。 9.1 Keil C簡介與環境設置 Keil C Vision2 開發環境是德國Keil Software,Inc.and Keil Elektro nik GmbH開發的微處理器開發平臺,可以開發多種8051兼容單片機程序。其界面如圖9-1所示。,圖9-1:Keil C Vision2,Cx51有兩種使用方式。第一種方式是在Vision2 IDE中使用,不用進行設置;第二種方式是在命令提示符下使用。如果使用命令方式,需要設置如下變量: PATH=E:KeilcC51BIN TMP=E:KeilcTmp C51INC=E:KeilcC51INC C51LIB=E:KeilcC51LIB 在Windows NT環境下設置方式為:我的電腦-屬性-高級-環境變量-新建 設置好運行環境后就可以在命令提示符下編譯C語言源程序,其格式如下: C51 源文件名 控制命令 . 9.2 Cx51簡介 9.2.1 Cx51的擴展 Cx51編譯器兼容ANSI C標準,又擴展支持了8051微處理,器,其擴展內容如下: 存儲區; 存儲區類型; 存儲模型; 存儲類型說明符; 變量數據類型說明符; 位變量和位可尋址數據; SFR; 指針; 函數屬性。 9.2.2 存儲區 8051單片機支持程序存儲器和數據存儲器的分離,存儲器根據讀寫情況可以分為:程序存儲區(ROM)、快速讀寫存儲器(內部RAM)、隨機讀寫存儲器(外部RAM)。,1. 程序存儲器(code) 在8051中程序存儲器是只讀存儲器,其空間為64K 。 2. 內部數據存儲器 在8051單片機中,內部數據存儲器屬于快速可讀寫存儲器,與51兼容的擴展型單片機最多有256字節內部數據存儲區。 3. 外部數據存儲器 外部數據存儲器又稱隨機讀寫存儲器,訪問存儲空間為64KB。其訪問速度要比內部RAM慢。訪問外部RAM的數據要使用指針進行間接訪問。 9.2.3 存儲模式 在Cx51中,存儲器模式可以確定一些變量在缺省情況下的存儲器類型。程序中可用編譯器控制命令SMALL、COMPACT、LARGE指定存儲器模式。,1. SMALL模式 SMALL模式中所有的變量在缺省的情況下位于單片機的內部數據區,這和用data存儲類型標識符聲明的變量是相同的。在本模式中變量訪問非常有效,然而所有對象和堆棧必須適和內部RAM。 2. COMPACT模式 COMPACT模式中所有變量在缺省的情況下都存放在外部數據區的一頁(256B)中,這和用pdata存儲類型標識符聲明的變量是相同的。 3. Large模式 LARGE模式下所有變量在缺省情況下存放在外部數據存儲區(范圍為64k字節),這和用xdata存儲類型標識符聲明的變量是一致的,該模式使用數據指針DPTR尋址。 9.2.4 數據類型 在Cx51中不僅支持所有的C語言標準數據類型,而且還對其進行了擴展,增加了專用于訪問8051硬件的數據類型,使其對單片機的操作更加靈活。,1. bit類型 bit用于聲明位變量,其值為1或0。 2. sbit類型 sbit類型用于聲明可位尋址變量中的某個位變量,其值為1或0。 3. sfr類型 sfr類型用于聲明特殊功能寄存器(8位),位于內部RAM地址為0x80-0xFF的128字節存儲單元,這些存儲器一般用作對計時器、計數器、串口、并口和外圍使用。 4. sfr16類型 sfr16類型用于聲明兩個連續地址的特殊功能寄存器(地址范圍為065 535)。 9.2.5 指針 所謂指針就是存儲單元的地址,指針變量就是存放地址的變量。 在Cx51編譯器中指針可以分為兩種類型:通用指針和指定存儲區地址指針。,1. 通用指針 所謂通用指針是指未對指向的對象(變量)存儲空間進行說明的指針。通用指針可以訪問8051存儲空間中與位置無關的任何變量。 2. 存儲區域的指針 所謂存儲區域的指針是指在指針聲明中包含存儲器類型。 程序中使用指定存儲區域的指針速度要比通用指針快(指定存儲區域指針在編譯時Cx51編譯器已知道其存儲區域,而通用指針直到運行時才確定存儲區域),在實時控制系統中應盡量使用指定存儲區域的指針。 9.2.6 函數 函數是C程序的基本單元,全部C都是由一個個函數組成的。在結構化程序設計中,函數作為獨立的模塊存在,增加了程序的可讀性,為解決復雜問題提供了方便。C語言中的函數包括:主函數(main)、庫函數和自定義函數。,1. Cx51自定義函數 Cx51具有自定義函數的功能,其自定義函數語法格式如下: return_type function_name(args,) small|compact|large reentrant interrupt n using n return_type: 指返回類型,在默認情況下為int。 function_name:函數的名字。 args:函數的形式參數列表。 small compact large:函數的存儲模式。 reentrant:函數是否可重入,要注意可重入函數中的變量的同步。 interrupt:可以用interrupt告訴計算機這個函數是中斷服務函數。 using:指定函數所使用的寄存器組。 2. 中斷函數 在Cx51中提供了中斷支持函數,中斷服務程序在Cx51中是,以中斷函數的形式出現的。此類型函數用interrupt關鍵字進行描述。 3. 再入函數 Cx51在調用函數時,函數的形式參數及函數內的局部變量將會動態地存儲在固定的存儲單元中,一旦函數在執行時被中斷,若再次調用該函數時,函數的形式參數及函數內的局部變量將會被覆蓋,導致程序不能正常運行,為此,可在定義函數時用reentrant屬性引入再入函數。 再入函數可以被遞歸調用,也可以被多個程序調用。 9.3 Cx51開發工具簡介 Cx51是專用于8051等嵌入式應用的開發工具套件。該軟件可以對C源文件、匯編源文件進行編譯、連接、生成并調試目標程序。 Cx51以工程的形式組織各類資源文件,其程序開發步驟如下: 1. 創建工程,選擇Cx51開發環境Project菜單,選擇New Project菜單項來建立一個新的工程。 2. 選擇目標芯片 在工程建立完成后,器件選擇窗口便會彈出,從器件庫選擇單片機應用系統所使用的8051芯片 。 3. 創建并編寫C51源文件 選擇Cx51開發環境的File菜單的New菜單項,這時會出現新建源程序編輯窗口,新建一個C語言源文件 。 4. 把源程序文件加入到工程中 在建立了源程序文件后,必須把源程序文件添加到工程中,以構成一個完整的工程項目。 5. 為目標芯片添加啟動代碼 在main()函數執行前,首先應復位單片機內部RAM、完成對硬件初始化等操作,即執行一段初始化代碼。在Cx51中,STARTUP.A51文件是啟動代碼文件,該文件適合大多數8051及其派生系列的目標芯片。,6. 設置編譯、連接環境 7. 對工程進行編譯和連接 選擇Cx51開發環境的Project菜單中的Build target菜單項,則對工程中的文件進行編譯、匯編和連接,生成二進制代碼的目標文件(.obj)、列表文件(.lst)、絕對地址目標文件、絕對地址列表文件(.m51)、連接輸入文件(.imp)。 8. 調試程序 選擇Debug菜單的Start/stop Debug Session菜單項,即可進入調試狀態。在調試狀態下,目標文件自動轉換為HEX文件。在調試中可以對單片機的寄存器、內存、所產生的匯編代碼、串口的輸出情況等進行監視 9.4 Cx51應用程序設計舉例 9.4.1 輸入 單片機中的I/O口(即P0,P1,P2,P3)可以單獨的作為輸入/輸出口使用。在實際的開發過程中輸入輸出是單片機最基本的功能。,【例9-11】根據圖9-9所示實驗電路,要求如下: 用輸入電路中接入的4個按鍵分別控制對應的4個發光二極管的點亮。 判斷按鍵是否被按下(進行去抖處理),如果按下判斷按的是哪個鍵,如果沒有鍵按下返回0xff。 根據所按下的按鍵點亮相應的發光二極管。 在程序中for(j=0;j #include sbit CLK=P11; sbit DATA=P10;,圖9-9 單片機實驗電路,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 輸出 實現單片機的輸出操作就是將數據寫入I/O口。,【例9-12】如圖9-9所示,同時點亮4個發光二極管時,對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; /*所有發光二極管處于不發光狀態*/ WriteData(lsdata); delay(); CONTROL=1; return 0; 9.4.3 定時器/計數器 【例9-13】用定時器來控制發光二極管的亮/滅,間隔時間為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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫療大數據管理隱私保護法規的解讀與實施
- 醫療行業創新方向對話式技術在診療中的運用
- 醫療信息技術在商業保險中的價值挖掘
- 醫院信息化建設與流程優化探討
- 銷售人員活動總結
- 醫用廢物處理及環保安全規范
- 帕金森病(早發型青年型)的臨床護理
- 2025年小學教師教育技術能力培訓總結模版
- 2025年春季預防性試驗工作總結模版
- 義齒公司員工合同范例
- 第二十九節 商業模式創新及案例分析
- 小紅書搜索推廣營銷師認證考試題庫(附答案)
- 石材養護報價單
- 世界各地的建筑·小學生課件
- 試題-醫療器械質量管理培訓
- 圍術期護理常規及技術規范
- 微笑曲線中文版課件
- 船舶修造行業安全風險監控與應急措施
- GB/T 30595-2024建筑保溫用擠塑聚苯板(XPS)系統材料
- 《智能家居系統》課件
- 2024高考物理一輪復習第63講光的波動性電磁波(練習)(學生版+解析)
評論
0/150
提交評論