国产成人av人人爽人人澡-亚洲国产日韩欧美一区-好吊日视频这里只有精品-日本高清精品视频在线

您好,歡迎進(jìn)入深圳市穎特新科技有限公司官方網(wǎng)站!

您現(xiàn)在的位置:首頁 新聞資訊 >> 新聞?lì)^條 >> Keil MDK從未有過的詳細(xì)使用講解(轉(zhuǎn))
新聞資訊
NEWS INFORMATION

Keil MDK從未有過的詳細(xì)使用講解(轉(zhuǎn))

發(fā)布時(shí)間:2019-05-22

這博主關(guān)于MDK 的使用的文章,寫的得TM的好  TM的實(shí)用! 真心收藏!發(fā)火

 

      熟悉Keil C 51的朋友對(duì)于Keil MDK上手應(yīng)該比較容易,畢竟界面是很像的。但ARM內(nèi)核畢竟不同于51內(nèi)核,因此無論在設(shè)置上還是在編程思想上,都需要下番功夫研究的。本文以MDK V4.03為例,詳細(xì)的寫一下MDK的設(shè)置、界面、工具。可能會(huì)有些雜亂,但我想所涉及的東西都是最常用的;可能不是那么的嚴(yán)謹(jǐn)清晰,我想誰也沒把我期望成專家!哈,有問題歡迎留言。正式開始。

    首先啟動(dòng)MDK.當(dāng)然要先安裝好MDK,如果找不到在哪里下載,可以翻翻我以前的博文。啟動(dòng)后的MDK界面如圖1所示。

 

圖1 MDK界面

第二.新建一個(gè)工程。

單擊Project ->New µVision Project...菜單項(xiàng),µVision 4將打開一個(gè)標(biāo)準(zhǔn)對(duì)話框,見圖2,輸入希望新建工程的名字即可創(chuàng)建一個(gè)新的工程,建議對(duì)每個(gè)新建工程使用獨(dú)立的文件夾。例如,這里先建立一個(gè)新的文件夾,然后選擇這個(gè)文件夾作為新建工程的目錄,輸入新建工程的名字Project1,µVision將會(huì)創(chuàng)建一個(gè)以Project1.uvproj2為名字的新工程文件,它包含了一個(gè)缺省的目標(biāo)(target)和文件組名。這些內(nèi)容在Project Workspace->Files中可以看到。

 

第三.選擇設(shè)備

在創(chuàng)建一個(gè)新的工程時(shí),µVision要求為這個(gè)工程選擇一款CPU。選擇設(shè)備對(duì)話框顯示了µVision的設(shè)備數(shù)據(jù)庫,只需要選擇用戶所需的微控制器即可。例如,選擇 Philips LPC2114微控制器,這個(gè)選擇設(shè)置了LPC2114設(shè)備的必要工具選項(xiàng)、簡化了工具的配置。

 

注意:

  • 當(dāng)創(chuàng)建一個(gè)新的工程時(shí),µVision會(huì)自動(dòng)為所選擇的CPU添加合適的啟動(dòng)代碼。
  • 對(duì)于一些設(shè)備而言,µVision需要用戶手動(dòng)地輸入額外的參數(shù)。請(qǐng)仔細(xì)閱讀這個(gè)對(duì)話框右邊的信息,因?yàn)樗赡馨x設(shè)備的額外配置要求。

無語了,一個(gè)鐘頭寫的東西上傳之后竟然丟失了一大段。吐血中,繼續(xù)寫。

到這里一個(gè)工程就新建完成,下面就需要編寫代碼,然后設(shè)置目標(biāo)配置,編譯調(diào)試等等。在這之前,我們先來了解一下MDK編譯器的常用工具按鈕,工欲善其事,必先利其器!

1.編譯快捷按鈕:

(1)編譯當(dāng)前文件

(2)編譯已經(jīng)修改的文件(僅編譯已修改的文件,這樣可以節(jié)省編譯時(shí)間)

(3)編譯所有文件(一般使用這個(gè)即可,當(dāng)設(shè)置過目標(biāo)配置選項(xiàng)后,必須使用它來重新編譯。)

(4)停止編譯當(dāng)前文件

2.程序下載快捷按鈕:

具體使用參見我的博文:http://blog.csdn.net/zhzht19861011/archive/2010/10/06/5924218.aspx

3.查找快捷按鈕:

(1)在文件中查找。這是我最常用的查找方式,特別是有多個(gè)模塊時(shí),當(dāng)你要找到一個(gè)函數(shù)或變量是在那個(gè)文件中定義的,就可以單擊這個(gè)圖標(biāo)來在全工程文件中查找。

(2)在當(dāng)前文件中查找。在編輯框中輸入要查找的關(guān)鍵字,按回車即可查到,連續(xù)按回車會(huì)跳到下一處。

(3)在當(dāng)前文件中查找。單擊后會(huì)彈出查找對(duì)話框,能進(jìn)行一些設(shè)置,比如大小寫區(qū)分等。

4.設(shè)置書簽快捷按鈕: (從左向右依次為標(biāo)簽1、2、3、4)

這個(gè)功能還是很實(shí)用的,想象一下,當(dāng)你的一個(gè)文件有很多代碼的時(shí)候,尋找你需要的代碼行就變得很不容易,這個(gè)時(shí)候,設(shè)置書簽快捷鍵就派上了用場(chǎng)!

(1)設(shè)置書簽。將鼠標(biāo)定位到要標(biāo)記的代碼行,單擊該圖標(biāo)則在代碼行的左側(cè)設(shè)下一個(gè)書簽,再次單擊該按鈕,取消該代碼行的書簽。

(2)跳到上一書簽。

(3)跳到下一書簽。

(4)取消所有書簽

5.調(diào)試快捷按鈕:

(1)點(diǎn)擊此按鈕進(jìn)入調(diào)試界面

(2)設(shè)置斷電。單擊要設(shè)計(jì)斷電的代碼行,再單擊此按鈕,則為該代碼行設(shè)置了斷點(diǎn),再次單擊,取消所設(shè)的斷點(diǎn)。通常設(shè)置斷點(diǎn)是在debug窗口的要設(shè)斷點(diǎn)代碼處雙擊,再次雙擊取消設(shè)置斷點(diǎn)。

(3)使能/禁止斷點(diǎn)。將鼠標(biāo)定位到一個(gè)已經(jīng)設(shè)置了斷點(diǎn)的代碼行處,單擊此按鈕,該斷點(diǎn)被禁止,再次單擊該按鈕,斷點(diǎn)使能。

(4)使能/禁止所有斷點(diǎn)。

(5)取消所有斷點(diǎn)。

 

6.工程視圖和配置快捷按鈕:

(1)工程視圖快捷按鈕。這相當(dāng)于一個(gè)下拉菜單,里面有絕大多說的工程窗口。這個(gè)按鈕用來顯示/禁止工程內(nèi)的窗口。比如常常會(huì)有人把工程空間窗口或者編譯輸出窗口不小心關(guān)掉卻又不能把它再顯示出來,這個(gè)時(shí)候就可以通過單擊這個(gè)快捷按鈕的相應(yīng)內(nèi)容來顯示。另外,該按鈕實(shí)現(xiàn)的功能都可以在菜單view 中設(shè)置。

(2)配置快捷按鈕。點(diǎn)擊一下出現(xiàn)圖4所示的界面:

 

 圖4

(1)編輯選項(xiàng)卡。用來設(shè)置一些編輯信息,比如縮進(jìn)的設(shè)置,顯示行號(hào)設(shè)置,界面顯示效果等等。

(2)設(shè)置代碼、關(guān)鍵的顏色和字體。如果默認(rèn)的關(guān)鍵字顏色,代碼顏色,代碼字體、大小不符合你的習(xí)慣,可以在這里進(jìn)行更該,在這里還可以更改用戶自定義關(guān)鍵字。

(3)設(shè)置用戶關(guān)鍵字。非常非常好用的一個(gè)功能,它可以使你自己定義的關(guān)鍵字像系統(tǒng)關(guān)鍵字一樣高亮顯示。假如你有想寫一個(gè)移植性比較高的程序,通常一些和編譯器無關(guān)的變量類型需要這樣定義:

typedef unsigned char  uint8;                  /*  無符號(hào)8位整型變量  */ 
typedef signed   char  int8;                      /* 有符號(hào)8位整型變量  */ 
typedef unsigned short uint16;                /* 無符號(hào)16位整型變量 */

然后在其它模塊中都是這樣定義一個(gè)無符號(hào)8位整形變量:

uint8 test;     //定義變量

這樣有一個(gè)什么問題呢?就是uint8這個(gè)雖然是用戶定義的關(guān)鍵字,但是它并不能像系統(tǒng)關(guān)鍵字那樣高亮顯示。怎么辦呢?完全有辦法解決,而且就是在這個(gè)標(biāo)簽卡中就可完成。方法如下:

a.打開User Keywords標(biāo)簽卡。在左側(cè)窗口選擇文件類型,比如ARM:Editor C File;在右側(cè)窗口點(diǎn)擊 按鈕,新建一個(gè)用戶關(guān)鍵字編輯框,輸入用戶定義的關(guān)鍵字,比如uint8,這樣在程序代碼中,所有的uint8都會(huì)高亮顯示。

(4)設(shè)置快捷鍵。這個(gè)我沒有用過,所以不多說明。

(5)模板代碼。這又是一個(gè)比較實(shí)用的功能,模板既有軟件自帶的,也可以自己編輯模板?梢栽谀銜鴮懗绦虻臅r(shí)候使用這一功能加快代碼的輸入。使用方法:

a.先在該選項(xiàng)卡中編輯自己的代碼模板,也可以之用軟件自帶的模板。

b.使用上面6-(1)所說的工程視圖快捷按鈕,保證該按鈕下拉菜單中Templates被選中;選中后會(huì)在工程工作空間(Project WorkSpace)中出現(xiàn): 標(biāo)簽。

c.在編寫代碼時(shí),應(yīng)用即可。

7.目標(biāo)工具選項(xiàng)(Target Options …):

這個(gè)是最常用而且最重要的快捷按鈕和設(shè)置點(diǎn)。這里以LPC2114為例詳細(xì)做講述,其它CPU與之類似。

µVision可以設(shè)置目標(biāo)硬件的選項(xiàng)。通過上面的工具欄按鈕或Project - Options for Target菜單項(xiàng)打開Options for Target對(duì)話框,如圖5所示。在Target頁中設(shè)置目標(biāo)硬件及所選CPU片上組件的參數(shù)。

(1)設(shè)備選項(xiàng)卡(device )。

 

 圖5

在這里可以在圖中2區(qū)域更改所使用的CPU,圖中3區(qū)域是該cpu 的一些描述。

(2)硬件目標(biāo)設(shè)置選項(xiàng)卡(Target),見圖6所示。

 

圖6

1:選擇硬件目標(biāo)設(shè)置選項(xiàng)卡

2:指定用于的晶振頻率

3:在應(yīng)用中可以選擇實(shí)時(shí)操作系統(tǒng)(RTOS)。Keil 提供:

  • RTX Kernel: 它是一個(gè)非常有效的 RTOS,支持搶占式的任務(wù)調(diào)度、 消息和信號(hào)傳送、信號(hào)量等等。 完整的版本帶有源代碼和包含一個(gè)Flash文件系統(tǒng)和TCP/IP協(xié)議棧。

4:指定選擇 ARM 或者 Thumb 模式進(jìn)行代碼生成。

5:利用 Cross-Module優(yōu)化為全局代碼優(yōu)化創(chuàng)建一個(gè)鏈接反饋文件。

6:使用MicroLib庫。為進(jìn)一步改進(jìn)基于ARM處理器的應(yīng)用代碼密度,RealView MDK采用了新型microlib C庫(用于C的ISO標(biāo)準(zhǔn)運(yùn)行時(shí)庫的一個(gè)子集),并將其代碼鏡像降低最小以滿足微控制器應(yīng)用的需求。Microlib C庫可將運(yùn)行時(shí)庫代碼大大降低。

7:選擇大端模式。編譯器默認(rèn)都是小端模式,NXP的LPC2114處理器只支持小端模式,所以該項(xiàng)變成了灰色。三星的S3C2440既支持大端也支持小端,這樣的處理器該項(xiàng)就可以選擇了。

8:利用交叉模塊優(yōu)化創(chuàng)建一個(gè)鏈接反饋文件以實(shí)現(xiàn)全局代碼優(yōu)化。

11:片外ROM設(shè)置,最多支持3塊ROM(Flash),在Start一欄輸入起始地址,在Size一欄輸入大小。若是有多片片外ROM,需要在13區(qū)域設(shè)置一個(gè)作為啟動(dòng)存儲(chǔ)塊,程序從該塊啟動(dòng);有幾塊ROM需要選中對(duì)應(yīng)的9區(qū)域。

12:片內(nèi)ROM設(shè)置。設(shè)置方法同片外ROM,只是程序的存儲(chǔ)區(qū)在芯片內(nèi)集成。

17:片外RAM設(shè)置。基本同片外ROM,只是若選中19、20區(qū)域后,對(duì)應(yīng)的RAM不會(huì)被默認(rèn)初始化為0。

18:片內(nèi)RAM設(shè)置。設(shè)置方法與片外RAM相同,只是數(shù)據(jù)的存儲(chǔ)區(qū)域在芯片內(nèi)集成。

(3)輸出選項(xiàng)卡(Output),見圖7所示。

 

圖7

1:選擇輸出選項(xiàng)卡

2:指定輸出文件的文件夾,這樣做可以減少工程文件夾文件的數(shù)目。

3.可執(zhí)行文件的名字。可執(zhí)行文件指生成的.hex文件,因此應(yīng)先使能4區(qū)域。

4:使能后會(huì)產(chǎn)生可執(zhí)行文件。

5.創(chuàng)建批文件

6.生成庫文件

(4)列表選項(xiàng)卡(Listing),見圖8。

 

圖8

1:選擇列表選項(xiàng)卡

2: 指定輸出文件的文件夾,這樣做可以減少工程文件夾文件的數(shù)目。

3:設(shè)置生成/禁止一些.lst、.txt文件。

4.設(shè)置生成/禁止一些.map文件(生成的代碼詳細(xì)信息就在這個(gè)文件里)

(5)用戶程序選項(xiàng)卡(User),見圖9。

 

圖9

1:選擇用戶選項(xiàng)卡。

2:編輯源文件前運(yùn)行用戶程序。

3:編譯前運(yùn)行用戶程序。

4:編譯后運(yùn)行用戶程序。圖中所示的是運(yùn)行fromelf.exe程序生成.bin文件,詳細(xì)方法見博客:http://blog.csdn.net/yx_l128125/article/details/9145695

(6)C/C++選項(xiàng)卡,見圖10。

 

 

圖10

1:選擇C/C++選項(xiàng)卡。

2:定義預(yù)處理符號(hào)。假如有一段代碼使用了條件編譯,如下所示:

#if ABC 
void  delay_tus(uint32  dly) 

    uint8 i;

    for (; dly>0; dly--) 
        for (i=0; i<4; i++); 

#endif

如果你想讓編譯器編譯這段代碼,有兩種方法:

第一種方法:使用#define ABC

第二種方法:在圖中2區(qū)域所示的編輯框中輸入ABC。多個(gè)符號(hào)用逗號(hào)隔開。

3:使能/禁止ARM狀態(tài)與Thumb狀態(tài)交互。為了更好的優(yōu)化存儲(chǔ)空間,請(qǐng)使能該選項(xiàng)。

4:設(shè)置優(yōu)化級(jí)別,共4級(jí)。Level 0為不優(yōu)化,Level 3為最高級(jí)別優(yōu)化。一般選擇default ,即Level 2級(jí)優(yōu)化。

5:附加的優(yōu)化選項(xiàng)。

6:輸出警告信息設(shè)置。為了更好的檢查程序,設(shè)置成All即可。

7:頭文件路徑設(shè)置。

(7)Asm選項(xiàng)卡,見圖11。與C/C++選項(xiàng)卡。

 

 圖11

該選項(xiàng)卡與C/C++選項(xiàng)卡十分類似。這里重點(diǎn)說說圖中紅色區(qū)域條件匯編控制符號(hào)的應(yīng)用,因?yàn)檫@個(gè)在啟動(dòng)代碼中可能會(huì)用到的。

摘錄一段啟動(dòng)代碼:

IF      :DEF:EXTERNAL_MODE 
               LDR     R0, =PINSEL2 
               LDR     R1, =PINSEL2_Val 
               STR     R1, [R0] 
ENDIF

在這段代碼中,如果在圖中1區(qū)域的編輯框中輸入了符號(hào):EXTERNAL_MODE,則本段代碼被編譯。

(8)連接選項(xiàng)卡(Linker)

對(duì)于不是特別大或者特殊的程序,選項(xiàng)卡的內(nèi)容默認(rèn)即可,編譯器會(huì)自動(dòng)按照你的設(shè)置生成連接選項(xiàng)。

(9)調(diào)試選項(xiàng)卡(Debug),見圖12。

 

 圖12

1:打開調(diào)試選項(xiàng)卡。

2:使用軟件仿真。

3:使用硬件仿真。(使用H-JTAG仿真參見我的博客:http://blog.csdn.net/zhzht19861011/archive/2010/08/28/5846510.aspx或者使用L-LINK仿真參見我的博客:http://blog.csdn.net/zhzht19861011/archive/2010/10/06/5924218.aspx

4,5:選中后,點(diǎn)擊調(diào)試按鈕自動(dòng)運(yùn)行到main函數(shù)。

要去睡覺了,明天是周末,爭取把它寫完。

(10)工具選項(xiàng)卡(Utilities),見圖13。

 

圖13

1:點(diǎn)擊進(jìn)入工具選項(xiàng)卡。

2.配置Flsah下載按鈕(即: )

使用J-LINK下載詳情見我的博文:http://blog.csdn.net/zhzht19861011/archive/2010/10/06/5924218.aspx

8.維護(hù)工程組件、配置工具環(huán)境及管理書:

點(diǎn)擊該快捷按鈕。彈出圖14所示界面。

(1)工程組建選項(xiàng)卡(Project Components)。

 

 圖14

1:點(diǎn)擊進(jìn)入工程組建選項(xiàng)卡.

2:工程目標(biāo)組建。

3:添加/刪除文件組。重點(diǎn)講述一下這個(gè),應(yīng)用比較多。使用New (Insert)按鈕(圖3區(qū)域紅色劃線處)可在目標(biāo)工程中設(shè)置文件組,方便文件歸類,圖中創(chuàng)建了兩個(gè)文件組:H-File和User。在工程工作空間中,新建的文件組會(huì)體現(xiàn)出來,如下圖15所示:

 

4:該區(qū)域頁面會(huì)列出用戶工程的文件組織結(jié)構(gòu)。用戶可以通過用鼠標(biāo)拖拉的方式來重新組織工程的源文件。

好啦,快捷按鈕終于告一段落!下面開始創(chuàng)建源文件,不過我先去玩一下。哎呀,我的周末,我來啦!

回來繼續(xù),其實(shí)就去吃個(gè)飯,昨晚舍友們胡扯,很晚才睡覺。今天早晨,呃~應(yīng)該是今天上午起床就晚了點(diǎn),然后打開電腦不一會(huì)的時(shí)間就到該吃飯的時(shí)間。

第四。創(chuàng)建源文件。

選擇菜單選項(xiàng)File – New以創(chuàng)建一個(gè)新的源文件,選項(xiàng)會(huì)打開一個(gè)空的編輯窗口,用戶可以在此窗口里輸入源代碼。如果以擴(kuò)展名*.C保存文件,µVision4將以彩亮字體顯示C源代碼。至于代碼,還是用一個(gè)適合軟件仿真的吧(不需要硬件就能全部模擬仿真),這個(gè)程序主要使用了定時(shí)器0并定時(shí)1S鐘,然后在中斷服務(wù)程序中翻轉(zhuǎn)I/O口P0.17的電平。如下所示:(本示例保存文件為MAIN.C)

其中,cpu.h為自定義頭文件,內(nèi)容如下:(保存為cpu.h)

[cpp] view plaincopy
 
  1. /* 
  2. ********************************Copyright (c)****************************** 
  3. ** File name:           main.c 
  4. ** Last modified Date:  2010-09-26 
  5. ** Last Version:        1.0 
  6. ** By:                  瓶蓋 
  7. ** 
  8. **************************************************************************** 
  9. */  
  10. #include <LPC21xx.H>   
  11. #include "cpu.h"   
  12. #define   BEEPCON  (1<<17)        /* P0.17引腳控制B1,低電平蜂鳴 */  
  13.   
  14.   
  15.   
  16. /**************************************************************************** 
  17. * 名稱:IRQ_Time0() 
  18. * 功能:定時(shí)器0中斷服務(wù)程序,取反BEEPCON控制口。 
  19. * 入口參數(shù):無 
  20. * 出口參數(shù):無 
  21. ****************************************************************************/  
  22. void __irq  IRQ_Time0(void)  
  23. {    
  24.     if( (IO0SET&BEEPCON) == 0 )     //使I/O口P0.17每隔1秒翻轉(zhuǎn)一次  
  25.         IO0SET = BEEPCON;     
  26.     else    
  27.         IO0CLR = BEEPCON;                           
  28.    T0IR = 0x01;                 // 清除中斷標(biāo)志   
  29.    VICVectAddr = 0x00;               // 通知VIC中斷處理結(jié)束  
  30. }  
  31.   
  32.   
  33. /* 
  34. ************************************************************************** 
  35. * 名稱:Time0Init() 
  36. * 功能:初始化定時(shí)器0,定時(shí)時(shí)間為1S,并使能中斷。  
  37. * 入口參數(shù):無 
  38. * 出口參數(shù):無 
  39. *************************************************************************** 
  40. */  
  41. void  Time0Init(void)  
  42. {   /* Fcclk = Fosc*4 = 11.0592MHz*4 = 44.2368MHz 
  43.        Fpclk = Fcclk/4 = 44.2368MHz/4 = 11.0592MHz 
  44.     */  
  45.     T0PR = 99;                // 設(shè)置定時(shí)器0分頻為100分頻,得110592Hz  
  46.     T0MCR = 0x03;            // 匹配通道0匹配中斷并復(fù)位T0TC  
  47.     T0MR0 = 110592;              // 比較值(1S定時(shí)值)  
  48.     T0TCR = 0x03;            // 啟動(dòng)并復(fù)位T0TC   
  49.     T0TCR = 0x01;   
  50.       
  51.     /* 設(shè)置定時(shí)器0中斷IRQ */  
  52.     VICIntSelect = 0x00;        // 所有中斷通道設(shè)置為IRQ中斷  
  53.     VICVectCntl0 = 0x24;    // 定時(shí)器0中斷通道分配最高優(yōu)先級(jí)(向量控制器0)  
  54.     VICVectAddr0 = (uint32)IRQ_Time0;   // 設(shè)置中斷服務(wù)程序地址向量   
  55.     VICIntEnable = 0x00000010;           // 使能定時(shí)器0中斷  
  56. }  
  57.   
  58. */  
  59. /********************************************************************** 
  60. * 名稱:main() 
  61. * 功能:初始化I/O及定時(shí)器,然后等待中斷。  
  62. * 說明:在STARTUP.S文件中使能IRQ中斷(清零CPSR中的I位)。 
  63. ************************************************************************ 
  64. */  
  65. int  main(void)  
  66. {  PINSEL0 = 0x00000000;            // 設(shè)置管腳連接GPIO     
  67.    IO0DIR = BEEPCON;            // 設(shè)置I/O為輸出  
  68.    IO0CLR=BEEPCON;  
  69.    Time0Init();             // 初始化定時(shí)器0及使能中斷  
  70.    while(1);                // 等待定時(shí)器0中斷  
  71.      
  72.    return(0);  
  73. }  
  74.   
  75. /************************************************************************* 
  76. **                            End Of File 
  77. *************************************************************************/  
[cpp] view plain copy
 
  1. /* 
  2. ********************************Copyright (c)****************************** 
  3. ** File name:           main.c 
  4. ** Last modified Date:  2010-09-26 
  5. ** Last Version:        1.0 
  6. ** By:                  瓶蓋 
  7. ** 
  8. **************************************************************************** 
  9. */  
  10. #include <LPC21xx.H>  
  11. #include "cpu.h"  
  12. #define   BEEPCON  (1<<17)        /* P0.17引腳控制B1,低電平蜂鳴 */  
  13.   
  14.   
  15.   
  16. /**************************************************************************** 
  17. * 名稱:IRQ_Time0() 
  18. * 功能:定時(shí)器0中斷服務(wù)程序,取反BEEPCON控制口。 
  19. * 入口參數(shù):無 
  20. * 出口參數(shù):無 
  21. ****************************************************************************/  
  22. void __irq  IRQ_Time0(void)  
  23. {    
  24.     if( (IO0SET&BEEPCON) == 0 )     //使I/O口P0.17每隔1秒翻轉(zhuǎn)一次  
  25.         IO0SET = BEEPCON;     
  26.     else    
  27.         IO0CLR = BEEPCON;                           
  28.    T0IR = 0x01;                 // 清除中斷標(biāo)志  
  29.    VICVectAddr = 0x00;               // 通知VIC中斷處理結(jié)束  
  30. }  
  31.   
  32.   
  33. /* 
  34. ************************************************************************** 
  35. * 名稱:Time0Init() 
  36. * 功能:初始化定時(shí)器0,定時(shí)時(shí)間為1S,并使能中斷。  
  37. * 入口參數(shù):無 
  38. * 出口參數(shù):無 
  39. *************************************************************************** 
  40. */  
  41. void  Time0Init(void)  
  42. {   /* Fcclk = Fosc*4 = 11.0592MHz*4 = 44.2368MHz 
  43.        Fpclk = Fcclk/4 = 44.2368MHz/4 = 11.0592MHz 
  44.     */  
  45.     T0PR = 99;                // 設(shè)置定時(shí)器0分頻為100分頻,得110592Hz  
  46.     T0MCR = 0x03;            // 匹配通道0匹配中斷并復(fù)位T0TC  
  47.     T0MR0 = 110592;              // 比較值(1S定時(shí)值)  
  48.     T0TCR = 0x03;            // 啟動(dòng)并復(fù)位T0TC  
  49.     T0TCR = 0x01;   
  50.       
  51.     /* 設(shè)置定時(shí)器0中斷IRQ */  
  52.     VICIntSelect = 0x00;        // 所有中斷通道設(shè)置為IRQ中斷  
  53.     VICVectCntl0 = 0x24;    // 定時(shí)器0中斷通道分配最高優(yōu)先級(jí)(向量控制器0)  
  54.     VICVectAddr0 = (uint32)IRQ_Time0;   // 設(shè)置中斷服務(wù)程序地址向量   
  55.     VICIntEnable = 0x00000010;           // 使能定時(shí)器0中斷  
  56. }  
  57.   
  58. */  
  59. /********************************************************************** 
  60. * 名稱:main() 
  61. * 功能:初始化I/O及定時(shí)器,然后等待中斷。  
  62. * 說明:在STARTUP.S文件中使能IRQ中斷(清零CPSR中的I位)。 
  63. ************************************************************************ 
  64. */  
  65. int  main(void)  
  66. {  PINSEL0 = 0x00000000;            // 設(shè)置管腳連接GPIO     
  67.    IO0DIR = BEEPCON;            // 設(shè)置I/O為輸出  
  68.    IO0CLR=BEEPCON;  
  69.    Time0Init();             // 初始化定時(shí)器0及使能中斷  
  70.    while(1);                // 等待定時(shí)器0中斷  
  71.      
  72.    return(0);  
  73. }  
  74.   
  75. /************************************************************************* 
  76. **                            End Of File 
  77. *************************************************************************/  


 

[cpp] view plaincopy
 
  1. #ifndef __CPU_H   
  2. #define __CPU_H   
  3.   
  4. /***************************************************** 
  5. *              定義數(shù)據(jù)類型操作符* 
  6. ******************************************************/  
  7. typedef unsigned char  uint8;                   /* 無符號(hào)8位整型變量  */  
  8. typedef signed   char  int8;                    /* 有符號(hào)8位整型變量  */  
  9. typedef unsigned short uint16;                  /* 無符號(hào)16位整型變量 */  
  10. typedef signed   short int16;                   /* 有符號(hào)16位整型變量 */  
  11. typedef unsigned int   uint32;                  /* 無符號(hào)32位整型變量 */  
  12. typedef signed   int   int32;                   /* 有符號(hào)32位整型變量 */  
  13. typedef float          fp32;                    /* 單精度浮點(diǎn)數(shù)(32位長度) */  
  14. typedef double         fp64;                    /* 雙精度浮點(diǎn)數(shù)(64位長度) */  
  15.   
  16.   
  17. /****************************************************** 
  18. *       定義測(cè)試屏蔽語句,書寫測(cè)試代碼時(shí): 
  19. *              #ifdef TEST_CODE 
  20. *              測(cè)試語句... 
  21. *              #endif 
  22. *       正式下載時(shí),將下句:#define TEST_CODE 屏蔽掉。 
  23. ******************************************************/  
  24. #define TEST_CODE   //正式下載時(shí)屏蔽掉該句,防止有測(cè)試代碼帶入正式程序  
  25. /**************************************************************** 
  26.  
  27. ** End Of File  
  28.  
  29. ******************************************************************/  
[cpp] view plain copy
 
  1. #ifndef __CPU_H  
  2. #define __CPU_H  
  3.   
  4. /***************************************************** 
  5. *              定義數(shù)據(jù)類型操作符* 
  6. ******************************************************/  
  7. typedef unsigned char  uint8;                   /* 無符號(hào)8位整型變量  */  
  8. typedef signed   char  int8;                    /* 有符號(hào)8位整型變量  */  
  9. typedef unsigned short uint16;                  /* 無符號(hào)16位整型變量 */  
  10. typedef signed   short int16;                   /* 有符號(hào)16位整型變量 */  
  11. typedef unsigned int   uint32;                  /* 無符號(hào)32位整型變量 */  
  12. typedef signed   int   int32;                   /* 有符號(hào)32位整型變量 */  
  13. typedef float          fp32;                    /* 單精度浮點(diǎn)數(shù)(32位長度) */  
  14. typedef double         fp64;                    /* 雙精度浮點(diǎn)數(shù)(64位長度) */  
  15.   
  16.   
  17. /****************************************************** 
  18. *       定義測(cè)試屏蔽語句,書寫測(cè)試代碼時(shí): 
  19. *              #ifdef TEST_CODE 
  20. *              測(cè)試語句... 
  21. *              #endif 
  22. *       正式下載時(shí),將下句:#define TEST_CODE 屏蔽掉。 
  23. ******************************************************/  
  24. #define TEST_CODE   //正式下載時(shí)屏蔽掉該句,防止有測(cè)試代碼帶入正式程序  
  25. /**************************************************************** 
  26.  
  27. ** End Of File  
  28.  
  29. ******************************************************************/  
第五.在工程里加入源文件

源文件創(chuàng)建完后,可以在工程里加入這個(gè)文件。在工程里加入源文件,µVision 3提供了幾種方式,例如:可以在Project Workspace – Files頁面選擇要加入的文件組,單擊鼠標(biāo)右鍵打開局部菜單,選擇Add Files選項(xiàng)會(huì)打開一個(gè)標(biāo)準(zhǔn)的文件對(duì)話框,在對(duì)話框里選擇上面創(chuàng)建的MAIN.C源文件。

 

     值得注意的是,大多數(shù)初學(xué)者會(huì)忘記這一步驟,假如在MDK中忘記加入文件,編譯器會(huì)給出錯(cuò)誤提示,但在Keil C51(V8.02版)中就沒這么幸運(yùn)了。在C51編譯器中,沒有添加文件編譯器僅有兩個(gè)警告,所以常常有寫人說:我明明都是按照課本上一個(gè)個(gè)字母敲進(jìn)去的,怎么編譯不出可執(zhí)行文件。渴遣皇菚系拇a錯(cuò)了?等等。想想我還在大學(xué)二年級(jí)的時(shí)候,也不止一次的遇到過類似情況 ,現(xiàn)在想起來,還真懷念當(dāng)時(shí)的懵懂無知。

第六.設(shè)置目標(biāo)工具選項(xiàng)

       μVision 4 允許用戶根據(jù)目標(biāo)硬件的實(shí)際情況對(duì)工程進(jìn)行配置。通過點(diǎn)擊目標(biāo)工具欄圖標(biāo)()或單擊菜單項(xiàng)Project->Options for Target,在彈出的Target 頁面可指定目標(biāo)硬件和所選擇設(shè)備片內(nèi)組件的相關(guān)參數(shù),下圖為本示例的相關(guān)設(shè)置。

 

       另外,如果需要生成Intel HEX 文件,用于下載到EPROM 編程器中或仿真器中。在Options for Target->Output中選擇Create HEX file 選項(xiàng),μVision  4會(huì)在編譯過程中同時(shí)產(chǎn)生HEX 文件。

 

第七.配置啟動(dòng)代碼

CPU的啟動(dòng)代碼 (ARM設(shè)備的啟動(dòng)代碼文件名一般為Startup.S) 可在Project Workspace - Files Tab中打開。此外,μVision 4里大部分啟動(dòng)代碼文件都對(duì)應(yīng)有一個(gè)配置向?qū)?Configuration Wizard),它提供了一種菜單驅(qū)動(dòng)方式來配置目標(biāo)板的啟動(dòng)代碼。關(guān)于啟動(dòng)代碼詳情見我的博文:http://blog.csdn.net/zhzht19861011/archive/2010/08/27/5844514.aspx

本例的啟動(dòng)代碼配置為見下圖:

 

 

 第八.編譯工程 )

如果源程序中存在語法錯(cuò)誤,μVision 則會(huì)在Output Window->Build 窗口中顯示出錯(cuò)誤和警告信息。雙擊提示信息所在行,就會(huì)在μVision4編輯窗口里打開并顯示相應(yīng)的出錯(cuò)源文件,光標(biāo)會(huì)定位在該文件的出錯(cuò)行上,以方便用戶快速定位出錯(cuò)位置。

另外關(guān)于部分警告和錯(cuò)誤詳細(xì)信息可以參見:http://blog.csdn.net/zhzht19861011/archive/2010/08/19/5823537.aspx

 

終于告一段落!

聯(lián)系方式0755-82591179

傳真:0755-82591176

郵箱:vicky@yingtexin.net

地址:深圳市龍華區(qū)民治街道民治大道973萬眾潤豐創(chuàng)業(yè)園A棟2樓A08

国产精品色热综合在线| 国产丝袜美女诱惑一区二区| 久热人妻中文字幕一区二区| 一区二区三区四区亚洲另类| 日本精品啪啪一区二区三区| 国产性色精品福利在线观看| 亚洲av秘片一区二区三区| 偷拍美女洗澡免费视频| 色涩一区二区三区四区| 91精品日本在线视频| 欧美黑人精品一区二区在线| 成人日韩视频中文字幕| 91在线爽的少妇嗷嗷叫| 中文字幕在线五月婷婷| 国产亚洲不卡一区二区| 好吊妞视频免费在线观看| 国产成人精品在线一区二区三区| 日韩成人中文字幕在线一区| 麻豆印象传媒在线观看| 精品熟女少妇av免费久久野外| 日韩av欧美中文字幕| 成人日韩视频中文字幕| 亚洲一区二区亚洲日本| 丁香七月啪啪激情综合| 国产精品免费不卡视频| 91人妻人人澡人人人人精品| 国产丝袜美女诱惑一区二区| 欧美一区二区三区不卡高清视| 日韩国产传媒在线精品| 亚洲伊人久久精品国产| 日本一级特黄大片国产| 91偷拍与自偷拍精品| 欧美人妻免费一区二区三区| 亚洲清纯一区二区三区| 欧美一级黄片欧美精品| 成人亚洲国产精品一区不卡| 在线观看免费无遮挡大尺度视频 | 深夜福利欲求不满的人妻| 亚洲中文字幕在线观看四区 | 婷婷色国产精品视频一区| 国产老熟女超碰一区二区三区|