Keil uVISION2 是眾多微控制器應用開發軟體中優秀的軟體之一,它支援眾多不同公司的 MCS-51 架構的晶片,它集編輯,編譯,模擬等於一體,同時還支援、PLM、彙編和 C 語言的程式設計,介面友好,易學易用,在除錯程式,軟體模擬方面也有很強大的功能。 因此很多開發 51 微控制器 應用的工程師或普通的微控制器愛好者,都對它十分喜歡。
Keil Cx51 是一個商業的軟體,分兩個版本,一個是完全版,使用時對生成的機器程式碼空間不作任何限制,另一個是只能編譯 2K 程式碼空間 的 DEMO 版軟體,基本可以滿足一 般的個人學習和小型應用的開發。廢話少說,言歸正傳。
執行 Keil uVISION2 幾秒後,出現如圖 1-1 的螢幕。
一、建立工程
(1)點選 Project 選單,選擇 New Project,如圖 1-3。彈出的 Windows 檔案對話視窗, 在“檔名”中輸入您的第一個 C 程式專案名稱(只要符合 Windows 檔案規則的檔名都 行),這裡我們用“test”,如圖 1-4。 “儲存”後的副檔名為 uv2,這是 KEILuVision2 專案副檔名,以後我們可以直接點選此檔案以開啟先前做的專案。
( 2)選擇器件,根據需要選擇相應型號的器件,這裡我們選擇常用的 Ateml 公司的AT89C51。此時螢幕如圖 1-5 所示。點選確定後返回主介面。
(3)點選“Target1”前面的“+”號,出現下一層的“ Source Group1”,這時的工程還是一個空的工程,裡面什麼檔案也沒有,需要把編寫好的源程式加入,點選“Source Group1”使其反白顯示 , 然後,點選滑鼠右鍵,出現如圖 3 所示的下拉選單。 選中其中的 “Add file to Group”Source Group1”,出現一個對話方塊,要求尋找原始檔,注意,該對話方塊下面的“檔案 型別”預設為 C source file(*.c),也就是以 C 為副檔名的檔案,如為彙編檔案,需要將檔案 型別改掉。
(4)如需新建檔案,點選圖 1-7 中 1 的新建檔案的快捷按鈕,在 2 中出現一個新的文字編輯視窗,這個操作也可以通過選單 File-New 或快捷鍵 Ctrl+N 來實現。在檔案編輯視窗輸入你的第一個 C 程式。完成後儲存退出。
注意:檔名必須有副檔名,如 c 程式副檔名為.c,彙編程式副檔名為.asm 或.am51。
源程式可在任何文字編輯器中編寫,但要注意全形與半形字元,另外 Keil Cx51 文字編 輯器對漢字支援不好。
二、工程的詳細設定
工程建立好以後,還要對工程進行進一步的設定,以滿足要求。首先點選左邊 Project 視窗的 Target 1,然後使用選單“Project->Option for target ‘target1’”即出現對工程設定的對話方塊,這個對話方塊可謂非常複雜,共有 8 個頁面,要全部搞清可不容易,絕大部份設定項 取預設值就可以了。
Xtal (MHz)-----晶振頻率值,預設值是所選目標 CPU 的最高可用頻率值,根據需要進行設 置。該數值與最終產生的目的碼無關,僅用於軟體模擬除錯時顯示程式執行時間。正確 設定該數值可使顯示時間與實際所用時間一致,一般將其設定成與你的硬體所用晶振頻率 相同,如果沒必要了解程式執行的時間,也可以不設。
Memory Model---選擇編譯模式(儲存器模式)。
Small 是所有變數都在微控制器的內部 RAM 中;
Compact 是可以使用一頁外部擴充套件 RAM;
Larget 則是可以使用全部外部的擴充套件 RAM。
Code Model ---用於設定 ROM 空間的使用。
Small 模式,只用低於 2K 的程式空間;
Compact 模式,單個函式的程式碼量不能超過 2K,整個程式可以使用 64K 程式空間;
Larget 模式,可用全部 64K 空間。
Use on-chip ROM ----是否僅使用片內 ROM 選擇項,注意:選中該項並不會影響最終生成的目的碼量
Operating -----是作業系統選擇項。Keil 提供了兩種作業系統:Rtx tiny 和 Rtx full,通常 我們不使用任何作業系統,即使用該項的預設值:None(不使用任何作業系統);
Off Chip Code memory -----用以確定系統擴充套件 ROM 的地址範圍。
Off Chip xData memory----- 用於確定系統擴充套件 RAM 的地址範圍
這些選擇項必須根據所用硬體來決定,如果是最小應用系統,不進行任何擴充套件,均不重新選擇,按預設值設定。
Select Folder for objects-----選擇最終的目標檔案所在的資料夾,預設是與工程檔案在同一個資料夾中,一般不需要更改。
Name of Executable----- 用於指定最終生成的目標檔案的名字,預設與工程的名字相同,一般不需要更改。
Debug information----- 將會產生除錯資訊。這些資訊用於除錯,如果需要對程式進行除錯,應當選中該項。
Browse information-----是產生瀏覽資訊。該資訊可以用選單 view->Browse 來檢視,這裡取預設值。
Creat Hex file-----用於生成可執行程式碼檔案。可以用程式設計器寫入微控制器晶片的 HEX 格式檔案,檔案的副檔名為.HEX。
其它選預設即可
在彙編或編譯完成後將產生(*.lst)的列表檔案,在連線完成後也將產生(*.m51)的列表檔案,該頁用於對列表檔案的內容和形式進行細緻的調節,其中比較常用的選項是“C
Compile Listing”下的“Assamble Code”項,選中該項可以在列表檔案中生成 C 語言源程式所對應的彙編程式碼。
C51 標籤頁用於對 Keil 的 C51 編譯器的編譯過程進行控制,其中比較常用的是“Code Optimization”組,該組中 Level 是優化等級,C51 在對源程式進行編譯時,可以對程式碼多 至 9 級優化,預設使用第 8 級,一般不必修改,如果在編譯中出現一些問題,可以降低優 化級別試一試。Emphasis (強調、重點)是選擇編譯優先方式,第一項是程式碼量優化(最終 生成的程式碼量小);第二項是速度優先(最終生成的程式碼速度快);第三項是預設。預設的 是速度優先,可根據需要更改。
三、編譯、連線
在工程中加入檔案後即可進行編譯連線。
本專案只學習新建程式專案和編譯執行模擬的基本方法,所以使用軟體預設的編譯設定。在上圖中,各按鈕功能如下:
1 ---用於編譯單個檔案;
2 ---編譯當前專案,如果先前編譯過一次之後檔案沒有做動編輯改動,這時再點選是不會再 次重新編譯的;
3-- 是重新編譯,每點選一次均會再次編譯連結一次,不管程式是否有改動。
4 ---資訊輸出視窗,在視窗中可以看到編譯的錯誤資訊和使用的系統資源情況等。
5 ---是選單中對應的編譯選項,可依據個人習慣選用。
6---是開啟\關閉除錯模式的按鈕,它也存在於選單 Debug-Start\Stop Debug Session,快捷 鍵為 Ctrl+F5。
在 3 右邊的是停止編譯按鈕,只有點選了前三個中的任意一個,停止按鈕才會生效。 在本專案只有一個檔案,按 123 中的任何一個都可以編譯。
四、進入除錯
(一)常用除錯命令
進入除錯狀態,Keil 內建了一個模擬 CPU 用來模擬執行程式,該模擬 CPU 功能強大, 可以在沒有硬體和模擬機的情況下進行程式的除錯,下面將要學的就是該模擬除錯功能。 不過在學習之前必須明確,模擬畢竟只是模擬,與真實的硬體執行程式肯定還是有區別的, 其中最明顯的就是時序,軟體模擬是不可能和真實的硬體具有相同的時序的,具體的表現就是程式執行的速度和各人使用的計算機有關,計算機效能越好,執行速度越快。
進入除錯狀態後,介面與編緝狀態相比有明顯的變化,Debug 選單項中原來不能用的命令現在已可以使用了,工具欄會多出一個用於執行和除錯的工具條,如圖所示,Debug 選單上的大部份命令可以在此找到對應的快捷按鈕。,從左到右依次是復位、執行、暫停、單步、過程單步、執行完當前子程式、執行到當前行、下一狀態、開啟跟蹤、觀察跟蹤、反彙編視窗、觀察視窗、程式碼作用範圍分析、1#序列視窗、記憶體視窗、效能分析、工具按鈕 等命令。
幾個重要的概念:
全速執行-----是指一行程式執行完以後緊接著執行下一行程式,中間不停止,主要是看程式執行的最終結果,如果程式有錯,則難以確認錯誤出現在哪些程式行。
單步執行-----是每次執行一行程式,執行完該行程式以後即停止,等待命令執行下一行 程式,此時可以觀察該行程式執行完以後得到的結果,是否與預期結果相同,藉此可以找 到程式中問題所在。
過程單步-----是指將組合語言中的子程式或高階語言中的函式作為一個語句來全速執行。除錯游標不進入子程式的內部,而是執行完該子程式,然後直接指向下一行。
執行到當前行-----全速執行當前地址行與當前游標行之間和程式。主要看一段程式執行情況,可以加快程式的除錯。
執行完當前子程式-----是指進入子程式後按此按鈕,子程式中其餘沒有執行的指令將一次全部執行完畢,加快程式的執行進度。
程式除錯中,這幾種執行方式都要用到。靈活應用這幾種方法,可以大大提高查錯的效率。
(二)斷點設定
斷點設定的方法有多種,常用的是在某一程式行設定斷點,設定好斷點後可以全速執行程式,一旦執行到該程式行即停止,可在此觀察有關變數值,以確定問題所在。 程式行設定/移除斷點的方法:
(1)將游標定位於需要設定斷點的程式行,使用選單 Debug->Insert/Remove BreakPoint 設定或移除斷點;
Debug->Enable/Disable Breakpoint 是開啟或暫停游標所在行的斷點功能;
Debug->Disable All Breakpoint 暫停所有斷點;
Debug->Kill All BreakPoint 清除所有的斷點設定。
(2)使用工具條
五、程式例項
輸入下面程式:
#include <reg51.h> //包含暫存器標頭檔案 #include <stdio.h> //標準輸入/輸出標頭檔案 void main(void) { //main 函式 SCON = 0x52; //串列埠方式 1,允許接收 TMOD = 0x20; //定時器 1 定時方式 2 TH1 = 0xE8; //11.0592MHz 1200 波特率 TL1 = ; TR1 = ; //啟動定時器 ) { printf ("Hello World!\n"); //顯示 Hello World } }
建立好工程後進入除錯模式,按 4 我們可以開啟 5 中的序列除錯視窗,這個視窗我們
可以看到從 51 晶片的序列口輸入輸出的字元,這裡的第一個專案也正是在這裡看執行結果。 這些功能在選單中有相應的對應。首先按 4 開啟序列除錯視窗,再按執行鍵,這時就可以看到序列除錯視窗中不斷的列印“HelloWorld!”。這樣就完成了您的第一個 C 專案。最後 我們要停止程式執行並回到檔案編輯模式,就要先按停止按鈕再按開啟\關閉除錯模式按鈕。
可以開啟反彙編視窗,看 C 程式所對應的彙編程式碼,游標在那一個視窗,程式將按那一個視窗所對應的程式進行執行。