- 單片機(jī)原理與嵌入式系統(tǒng)設(shè)計(jì)
- 張齊 朱寧西 畢盛編著
- 6579字
- 2018-12-27 05:43:27
3.3 Keil C51高級(jí)語言集成開發(fā)環(huán)境—μVision2 IDE
單片機(jī)系統(tǒng)的編程語言有匯編語言和高級(jí)語言兩種。每一種類型的單片機(jī)都有與其指令系統(tǒng)對(duì)應(yīng)的匯編語言,優(yōu)點(diǎn)是可直接操作硬件,可執(zhí)行文件比較小,而且執(zhí)行速度很快,缺點(diǎn)是軟件的維護(hù)性和可移植性差。
單片機(jī)的高級(jí)語言包括:BASIC語言、PL/M語言和C語言。BASIC語言主要應(yīng)用在MCS-51系列單片機(jī)上,使用效果不是很理想,現(xiàn)在已經(jīng)不再使用。PL/M語言對(duì)硬件的控制能力和代碼效率都很好,但局限于Intel公司的微處理器系列,可移植性差。
Keil C51軟件是目前開發(fā)80C51系列單片機(jī)最流行的軟件工具,這從近年來各單片機(jī)仿真機(jī)廠商紛紛宣布全面支持Keil C51即可看出。Keil C51提供了包括C語言編譯器、宏匯編、連接器、庫管理和一個(gè)功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,通過一個(gè)集成開發(fā)環(huán)境(μVision2 IDE)將這些部分組合在一起。掌握這一軟件的使用對(duì)于使用80C51系列單片機(jī)的愛好者來說是十分必要的,即使不使用C語言而僅使用匯編語言編程,其方便易用的集成環(huán)境、強(qiáng)大的軟件仿真調(diào)試工具也會(huì)讓開發(fā)者事半功倍。
3.3.1 μVision2 IDE主要特性
μVision2 IDE基于Windows的開發(fā)平臺(tái),包含一個(gè)高效的編輯器、一個(gè)項(xiàng)目管理器和一個(gè)MAKE工具。μVision2 IDE支持所有的Keil C51工具,包括C語言編譯器、宏匯編器、連接/定位器、目標(biāo)代碼到 HEX的轉(zhuǎn)換器。
μVision2 IDE內(nèi)嵌有多種符合當(dāng)前工業(yè)標(biāo)準(zhǔn)的開發(fā)工具,可以完成工程建立、管理、編譯連接、目標(biāo)代碼的生成、軟件仿真、硬件仿真等完整的開發(fā)流程。尤其C語言編譯工具在產(chǎn)生代碼的準(zhǔn)確性和效率方面達(dá)到了較高的水平,而且可以附加靈活的控制選項(xiàng),在開發(fā)大型項(xiàng)目時(shí)非常理想。它的主要特性如下。
(1)集成開發(fā)環(huán)境
μVision2 IDE包括一個(gè)工程管理器、一個(gè)功能豐富并有交互式錯(cuò)誤提示的編輯器、選項(xiàng)設(shè)置、生成工具及在線幫助。可以使用μVision2 IDE創(chuàng)建源文件,并組成應(yīng)用工程加以管理。μVision2 IDE可以自動(dòng)完成編譯、匯編和鏈接程序的操作,使用戶可以只專注開發(fā)工作的效果。
(2)C51 編譯器和A51匯編器
由μVision2 IDE創(chuàng)建的源文件,可以被C51編譯器或A51匯編器處理,生成可重定位的object文件,Keil C51編譯器遵照ANSI C語言標(biāo)準(zhǔn),支持C語言的所有標(biāo)準(zhǔn)特性。另外還增加了幾個(gè)可以直接支持80C51結(jié)構(gòu)的特性。Keil A51宏匯編器支持80C51及其派生系列的所有指令集。
(3)LIB51庫管理器
LIB51庫管理器可以從由匯編器和編譯器創(chuàng)建的目標(biāo)文件建立目標(biāo)庫。這些庫是按規(guī)定格式排列的目標(biāo)模塊,可在以后被鏈接器所使用。當(dāng)鏈接器處理一個(gè)庫時(shí),僅僅使用了庫中程序使用的目標(biāo)模塊而不是全部加以引用。
(4)BL51鏈接器/定位器
BL51鏈接器使用從庫中提取出來的目標(biāo)模塊和由編譯器、匯編器生成的目標(biāo)模塊,創(chuàng)建一個(gè)絕對(duì)地址目標(biāo)模塊。絕對(duì)地址目標(biāo)文件或模塊包括不可重定位的代碼和數(shù)據(jù)。所有的代碼和數(shù)據(jù)都被固定在具體的存儲(chǔ)器單元中。絕對(duì)地址目標(biāo)文件可以用于:
編程 EPROM 或其他存儲(chǔ)器設(shè)備;
由μVision2 IDE調(diào)試器對(duì)目標(biāo)進(jìn)行調(diào)試和模擬;
使用在線仿真器進(jìn)行程序測(cè)試。
(5)μVision2軟件調(diào)試器
μVision2 IDE軟件調(diào)試器能十分理想地進(jìn)行快速、可靠的程序調(diào)試。調(diào)試器包括一個(gè)高速模擬器,可以使用它模擬整個(gè)80C51系統(tǒng),包括片上外圍器件和外部硬件。當(dāng)從器件數(shù)據(jù)庫選擇器件時(shí),這個(gè)器件的屬性會(huì)被自動(dòng)配置。
(6)μVision2 IDE硬件調(diào)試器
μVision2 IDE調(diào)試器提供了幾種在實(shí)際目標(biāo)硬件上測(cè)試程序的方法。
安裝 MON51目標(biāo)監(jiān)控器到用戶的目標(biāo)系統(tǒng),并通過Monitor-51接口下載程序。
使用高級(jí)GDI接口將μVision2 IDE調(diào)試器同第三方仿真器系統(tǒng)相連接,通過μVision2 IDE的人機(jī)交互環(huán)境完成仿真操作。
(7)RTX-51實(shí)時(shí)操作系統(tǒng)
RTX-51實(shí)時(shí)操作系統(tǒng)是針對(duì)80C51微控制器系列的一個(gè)多任務(wù)內(nèi)核。RTX-51實(shí)時(shí)內(nèi)核簡化了需要對(duì)實(shí)時(shí)事件進(jìn)行反應(yīng)的復(fù)雜應(yīng)用的系統(tǒng)設(shè)計(jì)、編程和調(diào)試。這個(gè)內(nèi)核完全集成在C51編譯器中,使用非常簡單。任務(wù)描述表和操作系統(tǒng)的一致性由BL51鏈接器/定位器自動(dòng)進(jìn)行控制。
3.3.2 μVision2 IDE集成開發(fā)環(huán)境
安裝完成后,用戶可以雙擊桌面上的“μVision2”圖標(biāo)進(jìn)入IDE環(huán)境,μVision2 IDE軟件有菜單欄、可以快速選擇命令按鈕的工具欄、一些源代碼文件窗口、對(duì)話框、信息顯示窗口。μVision2 IDE界面如圖3.5所示,μVision2 IDE允許同時(shí)打開、瀏覽多個(gè)源文件。

圖3.5 μVision2 IDE界面圖
μVision2 IDE提供下拉菜單和工具條按鈕兩種操作方式。下拉菜單提供多種選項(xiàng),根據(jù)不同需要選用,工具條按鈕實(shí)際上是下拉菜單中一些重要選項(xiàng)功能的快捷方式。表3.1~表3.7從μVision2 IDE的下拉菜單著手介紹它的具體功能。
表3.1 File(文件)菜單和命令
表3.2 Edit(編輯)菜單和編輯器命令
表3.3View(視圖)菜單
表3.4 Project(項(xiàng)目)菜單和命令
表3.5 Debug(調(diào)試)菜單和命令
表3.6 Peripherals(外圍器件)菜單*
* 外圍器件菜單顯示內(nèi)容引與選擇的MCU型號(hào)有關(guān)。
表3.7 Window(窗口)菜單
3.3.3 μVision2 IDE的使用
μVision2 IDE安裝后自帶了一些幫助文檔,位于安裝目錄的Keil\C51\HLP文件夾,包括A51.pdf、C51.pdf、C51lib.chm、DBG51.CHM、errors.chm、GS51.pdf等,可以通過μVision2開發(fā)環(huán)境Project Window的Books標(biāo)簽頁中的鏈接來打開這些文檔。GS51.pdf是一個(gè)入門教程“Getting Started with μVision2”。這些資料詳細(xì)介紹了集成開發(fā)環(huán)境使用、偵錯(cuò)、匯編語言編程(A51)、C語言編程(C51)等。在互聯(lián)網(wǎng)上,有“μVision2入門教程”、“μVision2 調(diào)試命令”、“Keil Software-Cx51編譯器用戶手冊(cè)中文完整版”和“Keil C51使用詳解”等中文資料。
μVision2 IDE包括一個(gè)項(xiàng)目管理器,它可以使基于8x51的嵌入式系統(tǒng)的設(shè)計(jì)變得簡單。要?jiǎng)?chuàng)建一個(gè)應(yīng)用,需要按下列步驟進(jìn)行操作:
① 啟動(dòng)μVision2 IDE,新建一個(gè)項(xiàng)目文件,并從器件庫中選擇一個(gè)CPU器件;
② 新建一個(gè)源文件并把它加入到項(xiàng)目中;
③ 增加并設(shè)置選擇的器件的啟動(dòng)代碼;
④ 針對(duì)目標(biāo)硬件設(shè)置工具選項(xiàng);
⑤ 編譯項(xiàng)目并生成可以編程ROM的HEX文件。
下面通過一個(gè)創(chuàng)建項(xiàng)目實(shí)例介紹在μVision2中的軟件開發(fā)流程。
下面將逐步描述,指引讀者創(chuàng)建一個(gè)簡單的μVision2項(xiàng)目。示例程序調(diào)用C51基本輸入/輸出庫stdio.h中的printf函數(shù)從串口輸出“Hello World!”,printf函數(shù)支持帶格式的輸出,整個(gè)程序只包含一個(gè)源文件HelloWorld.c,這個(gè)小型應(yīng)用程序幫助讀者確定Keil μVision2可以編譯、鏈接和調(diào)試一個(gè)應(yīng)用程序。
設(shè)項(xiàng)目名為HelloWorld,采用標(biāo)準(zhǔn)AT89C52芯片,程序使用的硬件資源是AT89C52片內(nèi)的并行I/O口P2和串行口,不需要一個(gè)實(shí)際的單片機(jī)系統(tǒng),因?yàn)棣蘓ision2 IDE可以模擬程序所需要的硬件并行I/O口和串行口。
(1)選擇Project→New Project選項(xiàng),如圖3.6所示。
(2)在彈出的Create New Project對(duì)話框中選擇要保存項(xiàng)目文件的路徑,比如保存到HelloWorld目錄里,在“文件名”文本框中輸入項(xiàng)目名為HelloWorld,如圖3.7所示,然后單擊“保存”按鈕。

圖3.6 Project菜單

圖3.7 Create New Project對(duì)話框
(3)這時(shí)會(huì)彈出一個(gè)對(duì)話框,要求選擇單片機(jī)的型號(hào)。讀者可以根據(jù)使用的單片機(jī)型號(hào)來選擇,Keil C51幾乎支持所有的80C51內(nèi)核的單片機(jī),這里以常用的 AT89C52為例來說明。先選擇ATMEL公司,再選擇AT89C52,如圖3.8所示,右邊Description欄中顯示該單片機(jī)的基本說明,然后單擊“確定”按鈕,彈出將8051初始化代碼復(fù)制到項(xiàng)目中的詢問窗口,如圖3.9所示。單擊“是”按鈕,出現(xiàn)圖3.10所示的窗口。如果需要重命名Target1和Source Group1,在左側(cè)Project Workspace區(qū)用鼠標(biāo)左鍵選中Target1,再用鼠標(biāo)左鍵單擊Target1,即可重新命名Target1。用同樣的方法可以修改Source Group1,這里對(duì)此不做修改,使用默認(rèn)名稱。
(4)這時(shí)需要新建一個(gè)源程序文件。建立一個(gè)匯編語言或C語言文件,如果已經(jīng)有源程序文件,可以忽略這一步。選擇File→New選項(xiàng),如圖3.11所示。

圖3.8 選擇單片機(jī)型號(hào)對(duì)話框圖

圖3.9 選擇是否加入初始化代碼詢問信息
圖3.10 新建項(xiàng)目后μVision2界面圖
圖3.11 新建源程序文件對(duì)話框圖
(5)在彈出的程序文本框中輸入一個(gè)簡單的程序,如圖3.12所示,具體內(nèi)容見本節(jié)后面的內(nèi)容。
(6)選擇File→SaveAs選項(xiàng)或者單擊工具欄按鈕,保存文件。
在彈出的如圖3.13所示的對(duì)話框中,選擇要保存的路徑,在“文件名”文本框中輸入文件名。注意,一定要輸入擴(kuò)展名,如果是C語言程序文件,擴(kuò)展名為.c;如果是匯編文件,擴(kuò)展名為.asm或.a51;如果是ini文件,擴(kuò)展名為.ini。這里需要存儲(chǔ)C語言源程序文件,所以輸入擴(kuò)展名.c(也可以保存為其他名字,比如new.c等),單擊“保存”按鈕。此處保存文件名為HelloWorld.c。

圖3.12 程序文本框

圖3.13 Save As對(duì)話框
(7)將HelloWorld.c文件加入到項(xiàng)目中,鼠標(biāo)右鍵單擊左邊項(xiàng)目窗口中的Source Group1,在彈出的菜單中選擇Add Files to Group 'Source Group 1',選擇剛才建立的文件 HelloWorld.c,如圖3.14所示,文件類型選擇 C Source file(*.c)。如果是匯編文件,則選擇 Asm Source file;如果是目標(biāo)文件,則選擇 Object file;如果是庫文件,則選擇 Library file。最后單擊Add按鈕,如果要添加多個(gè)文件,可以不斷添加或一并選中添加。添加完畢后單擊Close按鈕,關(guān)閉該窗口。

圖3.14 Add Files to Group 'Source Group 1'菜單
(8)這時(shí)在Source Group 1里就有 HelloWorld.c文件和事先建立項(xiàng)目時(shí)已經(jīng)加入的文件STARTUP.a51了,如圖3.15所示。

圖3.15 HelloWorld.c文件
(9)接下來要對(duì)目標(biāo)進(jìn)行一些設(shè)置。選擇Project→Options for Target 'Target 1'選項(xiàng),或用鼠標(biāo)右鍵單擊Target 1,在彈出的快捷菜單中選擇 Options for Target 'Target 1'選項(xiàng),如圖3.16所示。
(10)在彈出的Options for Target 'Target 1'對(duì)話框中有10個(gè)選項(xiàng)卡,如圖3.17所示。

圖3.16 Options for Target 'Target 1' 選項(xiàng)

圖3.17 Target選項(xiàng)卡
① Target選項(xiàng)卡
Xtal(MHz):設(shè)置單片機(jī)工作的頻率,默認(rèn)是24.0MHz,把此項(xiàng)改為80C51單片機(jī)經(jīng)常使用的晶振頻率11.0592MHz和22.1184MHz之一,即11.0592MHz。Target選項(xiàng)卡中僅修改此項(xiàng),其他默認(rèn)即可。
Use On-chip ROM(0x0-0x1FFF):表示使用片上的Flash ROM。AT89C52有8KB的可重編程的Flash ROM,該選項(xiàng)取決于單片機(jī)嵌入式系統(tǒng),如果單片機(jī)的EA接高電平,則選中這個(gè)選項(xiàng),表示使用內(nèi)部ROM,如果單片機(jī)的EA接低電平,表示使用外部ROM,則不選中該選項(xiàng)。
Off-chip Code memory:表示片外ROM的開始地址和大小,如果沒有外接程序存儲(chǔ)器,那么不需要填任何數(shù)據(jù)。Start表示一個(gè)ROM芯片的開始地址,Size為片外ROM的大小,一般填十六進(jìn)制的數(shù),Size為片外ROM的大小,最多可以外接3塊ROM。
Off-chip Xdata memory:可以填寫外接Xdata外部數(shù)據(jù)存儲(chǔ)器的起始地址和大小。
CodeBanking:使用CodeBanking技術(shù)。Keil可以支持程序代碼超過64KB的情況,最大可以有2MB的程序代碼。如果代碼超過64KB,那么就要使用CodeBanking技術(shù),以支持更多的程序空間。CodeBanking支持自動(dòng)的Bank的切換,這在建立一個(gè)大型系統(tǒng)時(shí)是必需的。例如,要在單片機(jī)里實(shí)現(xiàn)漢字字庫、實(shí)現(xiàn)漢字輸入法,都要用到該技術(shù)。
Memory Model:單擊Memory Model后面的下拉箭頭,會(huì)有3個(gè)選項(xiàng)。
Small:變量存儲(chǔ)在內(nèi)部RAM里。
Compact:變量存儲(chǔ)在外部RAM里,使用8位間接尋址。
Large:變量存儲(chǔ)在外部RAM里,使用16位間接尋址。
一般使用Small來存儲(chǔ)變量,此時(shí)單片機(jī)優(yōu)先將變量存儲(chǔ)在內(nèi)部RAM里,如果內(nèi)部RAM空間不夠,才會(huì)存到外部RAM中。Compact的方式要通過程序來指定頁的高位地址,編程比較復(fù)雜,如果外部RAM很少,只有256B,那么對(duì)該256B的讀取就比較快。
如果超過256B,而且需要不斷地進(jìn)行切換,就比較麻煩,Compact模式適用于比較少的外部RAM的情況。Large模式是指變量會(huì)優(yōu)先分配到外部RAM里。
需要注意的是,3種存儲(chǔ)方式都支持內(nèi)部256B和外部64KB的RAM。因?yàn)樽兞看鎯?chǔ)在內(nèi)部RAM里,運(yùn)算速度比存儲(chǔ)在外部RAM要快得多,大部分的應(yīng)用都選擇Small模式。
使用Small模式時(shí),并不說明變量就不可以存儲(chǔ)在外部,只是需要特別指定,比如:
unsigned char xdata a:變量a存儲(chǔ)在外部的RAM。
unsigned char a:變量存儲(chǔ)在內(nèi)部RAM。
但是使用Large的模式時(shí):
unsigned char xdata a:變量a存儲(chǔ)在外部的RAM。
unsigned char a:變量a同樣存儲(chǔ)在外部RAM。
這就是它們之間的區(qū)別,可以看出這幾個(gè)選項(xiàng)只影響沒有特別指定變量的存儲(chǔ)空間的情況,默認(rèn)存儲(chǔ)在所選模式的存儲(chǔ)空間,比如上面的變量定義unsigned char a。
Code Rom Size:單擊Code Rom Size后面的下拉箭頭,將有3個(gè)選項(xiàng)。
Small: program 2K or less:適用于AT89C2051這些芯片,2051只有2KB的代碼空間,所以跳轉(zhuǎn)地址只有2KB,編譯的時(shí)候會(huì)使用ACALL AJMP這些短跳轉(zhuǎn)指令,而不會(huì)使用LCALL、LJMP指令。如果代碼地址跳轉(zhuǎn)超過2KB,那么會(huì)出錯(cuò)。
Compact:2K functiongs,64K program:表示每個(gè)子函數(shù)的代碼大小不超過2KB,整個(gè)項(xiàng)目可以有64KB的代碼。就是說在mAin()里可以使用LCALL、LJMP指令,但在子程序里只會(huì)使用ACALL、AJMP指令,只有確定每個(gè)子程序不會(huì)超過2KB,才可以使用Compact方式。Large: 64K program:表示程序或子函數(shù)代碼都可以大到64KB,使用CodeBanking還可以更大,通常都選用該方式。選擇Large方式速度不會(huì)比Small慢很多,所以一般沒有必要選擇Compact和Small方式。
這里選擇Large方式。
Operating:單擊Operating后面的下拉箭頭,會(huì)有3個(gè)選項(xiàng)。
None:表示不使用操作系統(tǒng)。
RTX-51 Tiny Real-Time OS:表示使用Tiny操作系統(tǒng)。
RTX-51 Full Real-Time OS:表示使用Full操作系統(tǒng)。
這里選擇 None。
② Output選項(xiàng)卡
Output選項(xiàng)卡如圖3.18所示。

圖3.18 設(shè)置Output卡
Select Folder for Objects:單擊該按鈕可以選擇編譯后目標(biāo)文件的存儲(chǔ)目錄,如果不設(shè)置,就存儲(chǔ)在項(xiàng)目文件的目錄里。
Name of Executable:設(shè)置生成的目標(biāo)文件的名字,默認(rèn)情況下和項(xiàng)目的名字一樣。目標(biāo)文件可以生成庫或者obj、HEX的格式。
Create Executable:如果要生成OMF和HEX文件,一般選中Debug Information和Browse Information,選中這兩項(xiàng),才有調(diào)試所需的詳細(xì)信息。比如,要調(diào)試C語言程序,如果不選中,調(diào)試時(shí)將無法看到高級(jí)語言寫的程序。而HEX文件為最終目標(biāo)文件,需要寫入目標(biāo)系統(tǒng)的程序存儲(chǔ)器中。
Create HEX File:要生成 HEX文件,一定要選中該選項(xiàng),如果編譯之后沒有生成HEX文件,就是因?yàn)檫@個(gè)選項(xiàng)沒有被選中。默認(rèn)是不選中的。ProteusVSM與μVision2聯(lián)調(diào)時(shí)需要HEX文件(見3.4.3節(jié)),一般選中它。
Create Library:選中該項(xiàng)時(shí)將生成lib庫文件。根據(jù)需要決定是否要生成庫文件,一般的應(yīng)用是不生成庫文件的。
AftermAke欄中有以下幾個(gè)設(shè)置。
- Beep When Complete:編譯完成之后發(fā)出咚的提示聲音。
- Start Debugging:馬上啟動(dòng)調(diào)試(軟件仿真或硬件仿真),根據(jù)需要來設(shè)置,一般不選。為了產(chǎn)生編譯之后馬上運(yùn)行,也可選中它。
- Run User Program #1、Run User Program #2:這兩個(gè)選項(xiàng)可以設(shè)置編譯完之后所要運(yùn)行的其他應(yīng)用程序(比如有些用戶自己編寫了燒寫芯片的程序,編譯完便執(zhí)行該程序,將 HEX文件寫入芯片),或者調(diào)用外部的仿真程序。根據(jù)自己的需要設(shè)置。
③ Listing選項(xiàng)卡
Listing選項(xiàng)卡如圖3.19所示。

圖3.19 設(shè)置Listing選項(xiàng)卡
Keil C51在編譯之后除了生成目標(biāo)文件之外,還生成*.lst、*.m51的文件。這兩個(gè)文件可以告訴程序員程序中所用的idata、data、bit、xdata、code、RAM、ROM、stack等的相關(guān)信息,以及程序所需的代碼空間。
選中Assembly Code會(huì)生成匯編的代碼。這是很有好處的,如果不知道如何用匯編來寫一個(gè)long型數(shù)的乘法,那么可以先用C語言來寫,寫完之后編譯,就可以得到用匯編實(shí)現(xiàn)的代碼。對(duì)于一個(gè)高級(jí)的單片機(jī)程序員來說,往往既要熟悉匯編,同時(shí)也要熟悉C語言,才能更好的編寫程序。某些地方用C語言無法實(shí)現(xiàn),用匯編語言卻容易實(shí)現(xiàn);有些地方用匯編語言很煩瑣,用C語言就很方便。
單擊Select Folder for Listings按鈕,在出現(xiàn)的對(duì)話框中可以選擇生成的列表文件的存放目錄。不做選擇時(shí),使用項(xiàng)目文件所在的目錄。
④ Debug選項(xiàng)卡
Debug選項(xiàng)卡如圖3.20所示。

圖3.20 設(shè)置Debug選項(xiàng)卡
Load Application at Start:選擇這項(xiàng)之后,Keil才會(huì)自動(dòng)裝載程序代碼。
Go tillmAin:調(diào)試C語言程序時(shí)可以選擇這一項(xiàng),PC會(huì)自動(dòng)運(yùn)行到main程序處。
這里有兩類仿真形式可選:Use Simulator和Use: Keil Monitor-51 Driver,前一種是純軟件仿真,后一種是帶有Monitor-51硬件目標(biāo)仿真器的仿真。
因?yàn)槲覀兡壳皼]有硬件系統(tǒng),圖3.20中使用默認(rèn)選擇Use Simulator。
最后單擊OK按鈕關(guān)閉對(duì)話框。
(11)編譯連接程序,按F7或選擇Project→Rebuild all target files選項(xiàng),如圖3.21所示。
如果沒有錯(cuò)誤,則編譯連接成功,開發(fā)環(huán)境下面會(huì)顯示編譯連接成功的信息,如圖3.22所示。
(12)編譯完畢之后,選擇Debug→Start/Stop Debug Session選項(xiàng),即可進(jìn)入Debug調(diào)試環(huán)境,如圖3.23所示。
(13)裝載代碼之后,開發(fā)環(huán)境Output Window(在左下角)顯示如圖3.24所示的裝載成功信息。

圖3.21 Rebuild all target files

圖3.22 編譯連接成功信息

圖3.23 Debug調(diào)試

圖3.24 Debug調(diào)試界面
(14)示例程序使用串口打印函數(shù)printf輸出“Hello World!”,整個(gè)程序只包含一個(gè)源文件HelloWorld.c。使用串口打印函數(shù)printf需要初始化單片機(jī)串口相關(guān)寄存器,故HelloWorld.c除main函數(shù)外,還有串口初始化函數(shù)initUart。此處我們只關(guān)心μVision2 IDE開發(fā)工具的使用,單片機(jī)串口的具體使用方法會(huì)在后續(xù)章節(jié)介紹。
HelloWorld.c源程序如下:
#include <REG52.H>//片內(nèi)寄存器定義 #include <stdio.h>//輸入/輸出函數(shù)庫 void initUart(void);/*初始化串口波特率,使用定時(shí)器1*/ /***********mAin C **************/ voidmAin (void) { unsigned int ulTimer;//延時(shí)設(shè)定的循環(huán)次數(shù) initUart();//為了使用printf語句,要初始化串口 while (1){ printf ("Hello World!");/* Print "Hello World" */ for (ulTimer=0; ulTimer<1000; ulTimer++){}//延時(shí) } } /********** 初始化串口波特率 ************/ //為了使用串行口帶格式輸出函數(shù)printf,串口必須初始化 void initUart(void)/*初始化串口波特率,使用定時(shí)器1*/ { /* Setup the serial port for 9600Baud at 11.0592MHz */ SCON=0x50;/* SCON: mode 1,8-bit UART,enable rcvr */ TMOD |=0x20;/* TMOD: timer 1,mode 2,8-bit reload */ TH1=0xfd;/* TH1: reloadValue for 9600Baud @ 11.0592MHz */ TR1=1;/* TR1: timer 1 run */ TI=1;/* TI: set TI to send first char of UART */ }
選擇View→Serial Window #1選項(xiàng),查看串口輸出內(nèi)容,如圖3.25示。
選擇Peripherals中選項(xiàng),還可以查看單片機(jī)內(nèi)嵌外設(shè)的變化,如選擇Peripherals→I/O-Ports→Port 2選項(xiàng),則可查看P2口信號(hào)變化,如圖3.26示。

圖3.25 打開Serial Window #1

圖3.26 打開Parallel Port2
按F5鍵啟動(dòng)程序,在串口窗口Serial #1可看到printf的輸出信息和P2端口數(shù)據(jù)的變化情況,如圖3.27所示。串口窗口默認(rèn)字符顯示模式為Ascii Mode,在窗口中單擊鼠標(biāo)右鍵,在彈出的右鍵窗口中可修改顯示模式為Hex Mode。

圖3.27 程序連續(xù)運(yùn)行時(shí)的窗口顯示
3.3.4 Keil C51中printf庫函數(shù)
printf函數(shù)是極為方便的信息輸出函數(shù),能將程序中的各種變量的值快速格式化并輸出到控制臺(tái),在程序調(diào)試和測(cè)試中無處不在,C語言教材的例子程序中經(jīng)常要用到它作為輸出。
在前面介紹μVision2 IDE的使用中我們也用到printf函數(shù),Keil C51的printf使用也極為方便,只要初始化串口后,關(guān)中斷,TI=1,就能使用printf直接將信號(hào)輸出到串口,在μVision2 IDE調(diào)試時(shí),打開串口窗口,就能看到帶格式的輸出。串口的使用方法見第6章內(nèi)容。
- 繪制進(jìn)程圖:可視化D++語言(第1冊(cè))
- 實(shí)時(shí)流計(jì)算系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
- Getting Started with Oracle SOA B2B Integration:A Hands-On Tutorial
- VMware Performance and Capacity Management(Second Edition)
- Hands-On Cybersecurity with Blockchain
- ESP8266 Home Automation Projects
- Visual C++項(xiàng)目開發(fā)案例精粹
- 會(huì)聲會(huì)影X4中文版從入門到精通
- 一步步寫嵌入式操作系統(tǒng)
- Python文本分析
- Flash CS5二維動(dòng)畫設(shè)計(jì)與制作
- PostgreSQL High Performance Cookbook
- 教育創(chuàng)新與創(chuàng)新人才:信息技術(shù)人才培養(yǎng)改革之路(四)
- Flash CS3動(dòng)畫制作
- 三維動(dòng)畫制作(3ds max7.0)