AT-mega系列單片機(jī)原理及應(yīng)用第9章-編譯器和集成開發(fā)環(huán)境課件_第1頁
AT-mega系列單片機(jī)原理及應(yīng)用第9章-編譯器和集成開發(fā)環(huán)境課件_第2頁
AT-mega系列單片機(jī)原理及應(yīng)用第9章-編譯器和集成開發(fā)環(huán)境課件_第3頁
AT-mega系列單片機(jī)原理及應(yīng)用第9章-編譯器和集成開發(fā)環(huán)境課件_第4頁
AT-mega系列單片機(jī)原理及應(yīng)用第9章-編譯器和集成開發(fā)環(huán)境課件_第5頁
已閱讀5頁,還剩109頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、內(nèi)容提要隨著AVR單片機(jī)的日益普及,目前有多種編譯及下載軟件提供對(duì)AVR系列單片機(jī)的支持。在本章中,介紹了SL-ISP1.518和PonyProg2000兩種下載程序軟件,詳細(xì)講解軟件的使用方法,說明如何操作軟件進(jìn)行單片機(jī)軟件編寫下載。對(duì)于AVR單片機(jī)的編譯器也作了詳細(xì)的介紹,簡單描述了如何使用編譯器建立一個(gè)新工程,以及各個(gè)功能的使用方法,最后還介紹一些常用的單片機(jī)小工具。9.1 單片機(jī)程序下載及集成開發(fā)環(huán)境9.1.1單片機(jī)下載方式簡介AVR單片機(jī)支持普通串口方式、STK500方式、并口(SPI)方式及USB方式等多種下載方式。普通串口方式的速度快,但支持的軟件不多。連ATmel公司的AVRS

2、tudio內(nèi)的AVRpro也停止了更新。因此,普通串口方式不支持最新的芯片。STK500下載為ATmel公司官方推薦的下載方式。與并口下載方式和USB下載方式相對(duì)比,STK500具有速度快,AVR Studio直接支持該下載方式等優(yōu)點(diǎn)。并且,只要AVRstudio發(fā)布新版本,該下載方式支持的器件就同步更新,不會(huì)發(fā)生不支持新器件的情況。STK500方式也有其缺點(diǎn):價(jià)格較高。目前仿造ATmel公司的STK500下載線的售價(jià)也在百元以上。因此,該方法不適合在教學(xué)中使用。 并口下載方式利用PC機(jī)的并口(俗稱打印口)進(jìn)行程序下載。其下載速度要明顯慢于STK500方式。但在教學(xué)應(yīng)用中,由于選用的芯片fla

3、sh容量不大,并且對(duì)下載速度要求不高,并口下載線是一個(gè)很好的選擇。較之串口下載方式和STK500下載方式,并口下載線成本低,有較多軟件支持,適合大范圍推廣。并口下載線的制作方法有很多,讀者可以在網(wǎng)絡(luò)上下載到多個(gè)版本的原理圖。這里,推薦一種簡單實(shí)用的接線方式,其原理圖如圖9.1所示:圖9.1 并口下載線原理圖支持并口下載線的軟件很多。比較常用的有ProgPony及雙龍公司的SL-ISP等。由于對(duì)軟件的支持不足,并口下載軟件通常不能像STK500那樣對(duì)新的器件立即支持。以ProgPony為例,作為一個(gè)免費(fèi)的下載軟件,ProgPony2000之后還未見新版本出現(xiàn)。但用于教學(xué)中的主流芯片,各個(gè)版本的并

4、口下載軟件均給予較好的支持。因此,在教學(xué)中,使用并口下載軟件和并口下載線是一個(gè)較好的選擇。筆者通過對(duì)比使用,認(rèn)為目前較好的并口下載軟件是雙龍公司的SL-ISP最新版本SL-ISP1.518。作為一個(gè)免費(fèi)的軟件,讀者可以到雙龍公司的主頁:進(jìn)行免費(fèi)下載。圖9.2為SL-ISP1.518的主界面。在主界面中,可以設(shè)置芯片型號(hào)、通信接口、下載速度、程序存儲(chǔ)器文件、數(shù)據(jù)存儲(chǔ)器文件、編程選項(xiàng)、加密模式等。通過主界面還可以對(duì)芯片進(jìn)行擦除、編程、校驗(yàn)、讀取等操作。只要在編程選項(xiàng)中進(jìn)行相應(yīng)的設(shè)置,通過按鍵便可以實(shí)現(xiàn)一鍵編程,不需每次更改程序后都重載程序。圖9.2 SL-ISP1.518的主界面在對(duì)AVR單片機(jī)進(jìn)

5、行編程的時(shí)候,首先要對(duì)熔絲位進(jìn)行相應(yīng)的配置。熔絲位的配置決定了單片機(jī)工作的頻率。如果熔絲位配置錯(cuò)誤造成單片機(jī)工作頻率與給定頻率不一致,會(huì)引起單片機(jī)工作不穩(wěn)定甚至鎖死的現(xiàn)象發(fā)生。SL-ISP1.518版本中,增添了STK500的熔絲位配置界面,可以不必記憶熔絲位配置組合,直接選定所需的頻率范圍進(jìn)行熔絲位配置。如圖93所示,在編程選項(xiàng)中的前打勾,便會(huì)彈出 “配置熔絲設(shè)置”對(duì)話框。圖9.3 配置熔絲位配置熔絲設(shè)置對(duì)話框如圖9.4所示。通過該對(duì)話框可以對(duì)單片機(jī)的熔絲位直接進(jìn)行設(shè)置,也可以點(diǎn)擊“設(shè)置導(dǎo)航”按鍵開啟類似STK500的熔絲位設(shè)置界面對(duì)熔絲位進(jìn)行設(shè)置。建議初學(xué)者選擇第二種配置方式。圖9.4 配

6、置熔絲設(shè)置對(duì)話框SL-ISP1.518的STK500的熔絲位設(shè)置如圖9.5所示。只需選中相應(yīng)的配置組合即可。目前還有較為流行的一款并口下載軟件PonyProg2000,同樣作為一款免費(fèi)的軟件,讀者可以從http:/www.LancOS.com下載。該軟件操作簡單,人機(jī)界面比較直觀,對(duì)于新學(xué)者來說比較容易上手,下面具體來介紹下該軟件的應(yīng)用方法。圖9.6為PonyProg2000的主界面。在主界面中,與雙龍相似,同樣可以設(shè)置芯片型號(hào)、通信接口、下載速度、程序存儲(chǔ)器文件、數(shù)據(jù)存儲(chǔ)器文件、編程選項(xiàng)、加密模式等。通過主界面還可以對(duì)芯片進(jìn)行擦除、編程、校驗(yàn)、讀取等操作。只要在編程選項(xiàng)中進(jìn)行相應(yīng)的設(shè)置,通過

7、按鍵便可以實(shí)現(xiàn)一鍵編程,不需每次更改程序后都重載程序。圖9.6 PonyProg2000的主界面如圖所示的打開文件一欄,點(diǎn)擊后輸入目標(biāo)程序地址,再將單片機(jī)的類型選擇成所用的類型,一般習(xí)慣上先擦寫一次CPU,將原來的程序擦除,再點(diǎn)擊圖中下載程序的按鍵,就可以將程序下載入單片機(jī)內(nèi)了。這里我們來介紹下一鍵編程的操作,點(diǎn)擊主頁面菜單中的功能欄中的鍵,會(huì)出現(xiàn)如圖9.7一鍵編程的操作界面界面。如圖所示,點(diǎn)擊陰影命令后會(huì)出現(xiàn)右邊的界面,用來設(shè)置一鍵編程的操作指令,圖中所勾選的為一般設(shè)置的指令,先調(diào)取程序、擦除舊程序、寫入新程序。設(shè)置后,以后再編程時(shí)就可以只點(diǎn)擊就可以完成程序的下載工作了,非常簡便,推薦讀者使

8、用。點(diǎn)擊會(huì)出現(xiàn)如圖9.8所示的界面,可以參照?qǐng)D9.5進(jìn)行設(shè)置。9. 2單片機(jī)編譯器和集成環(huán)境的介紹作為一種當(dāng)前應(yīng)用較廣泛的單片機(jī),有多種集成開發(fā)環(huán)境支持對(duì)AVR單片機(jī)的程序開發(fā)。由于C語言在單片機(jī)設(shè)計(jì)中具有直觀、可讀性強(qiáng)、程序移植容易等優(yōu)點(diǎn),在本書中,將著重介紹AVR單片機(jī)基于C語言的編譯器和集成環(huán)境。 由于WinAVR脫胎于GCC,因此不可避免的一些操作會(huì)與大部分用戶熟悉的Windows的操作方式有所不同。為了解決這個(gè)問題,晶士電子(Atman Electronics)開發(fā)了一個(gè)基于WinAVR的中文集成開發(fā)環(huán)境AtmanAvr。通過AtmanAvr C IDE用戶可以以熟悉的Windows

9、操作界面及操作方式對(duì)AVR單片機(jī)進(jìn)行開發(fā)。讀者可以通過登錄晶士電子的主頁:/下載到最新版本的AtmanAvr的30天試用版本。AtmanAvr C IDE除了集成中文的Windows操作界面外,筆者認(rèn)為其最大的優(yōu)點(diǎn)在于其幫助文件。在AtmanAvr C IDE的主界面中,可以通過按“F1”鍵調(diào)用該幫助文件。通過該幫助文件,可以獲取關(guān)于AtmanAvr C IDE的全部信息,其中甚至包括C語言的介紹。同時(shí),該幫助文件對(duì)每個(gè)函數(shù)的用法都以實(shí)例演示,方便用戶使用。相信讀者通過該幫助文件能很快的掌握AtmanAvr C IDE的使用。就C語言而言,目前常見的集成開發(fā)環(huán)境有WinAVR、AtmanAvr

10、、ICCAVR及IARAVR等多種。其中,WinAVR是將Unix操作系統(tǒng)中的GCC移植到Windows操作系統(tǒng)中的一個(gè)AVR單片機(jī)的集成編譯環(huán)境。WinAVR是一個(gè)一個(gè)完全免費(fèi)的軟件,在AVR用戶中是使用最多的。讀者可以通過下面的鏈接免費(fèi)下載最新版本的WinAVR集成開發(fā)環(huán)境:/projects/winavr/1. ATMANAVR編譯器的安裝可以直接運(yùn)行光盤上setup.exe安裝程序進(jìn)行安裝,有以下幾種方法: 方法1: (l)打開“我的電腦”; (2)打開光盤驅(qū)動(dòng)器所對(duì)應(yīng)的盤符; (3)雙擊光盤中文件“setup.exe”的圖標(biāo); (4)按照屏幕提示選定一個(gè)安裝路徑后進(jìn)行安裝。默認(rèn)的安裝

11、路徑為“C:ATMAN”,一般情況選默認(rèn)的安裝位置。方法2: (l)在開始菜單中選擇“運(yùn)行”命令; (2)在運(yùn)行對(duì)話框中輸入“drive:Setupexe; 注意,“drive”對(duì)應(yīng)機(jī)器中的光盤驅(qū)動(dòng)器盤符,如果光盤為F盤,則填入“f:setupexe”; (3)按“確定”鍵開始安裝; (4)按照屏幕提示,選定一個(gè)安裝路徑后進(jìn)行安裝。方法3: 由于ATMANAVR升級(jí)較快,光盤中的安裝文件并不一定是最新的,可以到晶士公司的網(wǎng)站上(/ChineseSite/SoftwareChinese.htm)或國內(nèi)總代理雙龍電子公司網(wǎng)站(http:/.on)下載最新版,將安裝文件下載到電腦內(nèi)一個(gè)子目錄中再安裝

12、。 (1)打開“我的電腦”; (2)打開存放下載升級(jí)版的文件夾; (3)雙擊文件夾中的“atmanAVRdem.exe”的圖標(biāo);(4)選定一個(gè)安裝路徑后進(jìn)行安裝。圖9.9 電腦屏幕上的圖標(biāo)圖9.10 演示版的標(biāo)題欄按上述方法安裝后,在電腦屏幕上生成如圖9.9的“AtmanAvr.exe”圖標(biāo)。雙擊后得到的只是一個(gè)演示版(標(biāo)題欄如圖9.10所示),演示版只能使用30天,在30天之內(nèi)沒有使用限制(等同于標(biāo)準(zhǔn)版),超過30天后,要注冊(cè)才能使用,正版用戶還要進(jìn)行注冊(cè)才可以得到一個(gè)無使用時(shí)間限制的正式版。 注意: 1舊版ATMANAVR有安裝路徑的限制(即安裝路徑中不能有空格或中文,否則不能正常編譯),

13、在ATMANAVR5.8.1版及更新的版本中,對(duì)安裝的路徑則沒有任何限制,可以安裝在任意文件夾中。 2如果硬盤上原先已安裝過ATMANAVR演示版且尚未到期(30天免費(fèi)試用期),此時(shí)重新安裝ATMANAVR,則軟件會(huì)自動(dòng)終止免費(fèi)試用,因此在演示版30天的有效期內(nèi)不能重裝ATMANAVR。如果演示版到期后還需要繼續(xù)使用演示版軟件,只要格式化硬盤后重裝Windows和ATMANAVR,又可以再使用30天。9.3 ATMANAVR編譯器簡介AtmanAvr C 是為 Atmel 公司的 AVR 系列單片機(jī)應(yīng)用 AVRGCC 編譯器而開發(fā)的集成開發(fā)環(huán)境 IDE 。包括向?qū)А⑽谋揪庉嬈骱驼{(diào)試器等。它有下

14、幾個(gè)主要特點(diǎn): 1ATMANAVR是一個(gè)綜合了編輯器和工程管理器的集成工作環(huán)境(IDE),是一個(gè)純32位的程序,可在Windows 95Windows 98Windows MEWindows NTWindows 2000Windows XP下運(yùn)行。 2源文件全部被組織到工程之中,文件的編輯和工程的構(gòu)筑也在IDE的環(huán)境中完成。3ATMANAVR是一個(gè)32位的程序,支持長文件名。 4ATMANAVR提供了全部的庫源代碼及一些簡單的應(yīng)用實(shí)例供初學(xué)者參考,特別是提供庫源代碼,對(duì)于用戶理解庫函數(shù)的參數(shù)及返回值等是非常有益的,并且用戶能夠根據(jù)庫源代碼對(duì)ATMANAVR提供的庫函數(shù)進(jìn)行剪裁和擴(kuò)充。ATMAN

15、AVR中的文件類型及擴(kuò)展名文件類型是由它們的擴(kuò)展名決定的,ATMANAVR的IDE和編譯器可以使用以下幾種類型文件: 1. 輸入文件類型 .c擴(kuò)展名,表示是C語言源文件; .s擴(kuò)展名,表示是匯編語言源文件; .h擴(kuò)展名,表示是C語言的頭文件; .prj擴(kuò)展名,表示是工程文件,這個(gè)文件保存由IDE所創(chuàng)建和修改與整個(gè)工程的有關(guān)信息; .a擴(kuò)展名,表示是庫文件,它可以由幾個(gè)庫封裝在一起,也可以創(chuàng)建或修改自定義的庫。2. 輸出文件類型 .s擴(kuò)展名,對(duì)應(yīng)每個(gè)C語言源文件,由編譯器在編譯時(shí)產(chǎn)生的同名匯編輸出文件; .o擴(kuò)展名,匯編產(chǎn)生的同名目標(biāo)文件,多個(gè)目標(biāo)文件可以鏈接成一個(gè)可執(zhí)行文件; .hex擴(kuò)展名,

16、INTEL HEX格式文件,其中包含了程序的全部可執(zhí)行代碼; .eep擴(kuò)展名,INTEL HEX格式文件,包含了EEPROM的初始化數(shù)據(jù); .cof擴(kuò)展名,COFF格式輸出文件,用于在ATMEL的AVR Studio環(huán)境下進(jìn)行程序調(diào)試; .lis擴(kuò)展名,列表文件,列舉出了源文件中的全部語句對(duì)應(yīng)的匯編代碼,但變量和代碼沒完成絕對(duì)定位。說明:如果使用文件編譯方式,則生成該文件的.1is文件,如果對(duì)整個(gè)工程進(jìn)行編譯,則每一個(gè)源文件均生成一個(gè)與該源文件同名的.lis文件。 .lst擴(kuò)展名,列表文件,列舉了含啟動(dòng)文件一起編譯生成的全部匯編代碼,是整個(gè)工程組對(duì)定位后的完整列表文件。說明,如果使用文件編譯方

17、式,則生成該文件的lst文件,如果對(duì)整個(gè)工程進(jìn)行編譯,則只生成一個(gè)與工程同名的lst文件。 .mp擴(kuò)展名,內(nèi)存映像文件,它包含了程序中有關(guān)符號(hào)及其所占內(nèi)存大小的信息; .cmd擴(kuò)展名,NoICE 2.xx調(diào)試命令文件; .noi擴(kuò)展名, NoICE 2.xx調(diào)試命令文件; .dbg擴(kuò)展名,ImageCraft調(diào)試命令文件。9.4 AVR存儲(chǔ)器的使用ATMANAVR共包含三種不同類型的存儲(chǔ)器空間,下面分別對(duì)其進(jìn)行介紹。 1程序存儲(chǔ)器(Flash) 程序存儲(chǔ)器是用于保存程序代碼以及常數(shù)表和數(shù)據(jù)的初始值等的空間。ATMANAVR編譯器可以生成一個(gè)對(duì)應(yīng)程序存儲(chǔ)器映像的輸出文件(INTEX HEX文件)

18、,大部分編程器均支持用這個(gè)格式的文件對(duì)芯片編程。由于 AVR中的 X、Y、Z指針為16位,有效的訪問空間為 64KB,因此在ATMANAVR編譯器中,使用普通的C程序不能直接訪問大于64KB的程序存儲(chǔ)器,為了訪問64KB以上的存儲(chǔ)器(如在Megal28中),應(yīng)選中“Use RAMPZELPM”(Project-Option-Target)前的復(fù)選框,并且在設(shè)定RAMPZ寄存器后直接調(diào)用ELPM指令來訪問Flash存儲(chǔ)器。編譯器生成代碼分配到不同的區(qū)域“areas”,區(qū)域按照程序存儲(chǔ)器地址增高的順序被使用,共分為以下區(qū)域: interrupt vectors:這個(gè)區(qū)域包含中斷向量 func-li

19、t:函數(shù)表區(qū)。這個(gè)區(qū)的每個(gè)字保存了函數(shù)入口的地址,為了與代碼壓縮完全兼容,所有間接的函數(shù)索引必須進(jìn)行額外對(duì)準(zhǔn)。如果在C中通過函數(shù)指針調(diào)用函數(shù),編譯器可自動(dòng)完成對(duì)準(zhǔn)的操作。 在匯編中,這個(gè)對(duì)準(zhǔn)必須在用戶程序中進(jìn)行,舉例如下: area func-1it ;假設(shè)-foo是函數(shù)的名稱 PL-foo:Word-foo ; 創(chuàng)建函數(shù)表入口 area text; ldi R30,PL-foo; ldi R31, PL- foo rcall xicall; 編程人員應(yīng)把函數(shù)表入口地址先送入R30、R31寄存器后,才可以使用庫函數(shù)xicall間接調(diào)用這個(gè)函數(shù)。 lit:這個(gè)區(qū)域包括了整型數(shù)和浮點(diǎn)數(shù)常量。 id

20、ata:全局變量和字符串的初始值保存在這個(gè)區(qū)域,在啟動(dòng)時(shí),由程序復(fù)制到數(shù)據(jù)存儲(chǔ)器的data區(qū)。 text:這個(gè)區(qū)域包括程序代碼。2內(nèi)部數(shù)據(jù)存儲(chǔ)器(SRAM) 這個(gè)數(shù)據(jù)存儲(chǔ)器是用于保存變量、堆棧和動(dòng)態(tài)內(nèi)存分配的堆棧,通常它們不出現(xiàn)在輸出文件中,但在程序運(yùn)行時(shí)被使用。圖9.11 數(shù)據(jù)內(nèi)存的使用一個(gè)沒有使用外部擴(kuò)展數(shù)據(jù)存儲(chǔ)器的程序使用數(shù)據(jù)內(nèi)存如圖9-11所示,在該圖中,從地址0開始的96個(gè)字節(jié)(0 x60)是CPU寄存器和IO寄存器,編譯器從96往上放置全局變量和字符串,在變量區(qū)域的頂部是用戶可以利用的分配動(dòng)態(tài)內(nèi)存,在高端地址,硬件堆棧開始于SRAM的最高字節(jié),在它的下面是軟件堆棧,硬件堆棧和軟件堆

21、棧均為向下生長型。要求程序員在設(shè)計(jì)程序時(shí)要確保硬件堆棧不生長進(jìn)軟件堆棧,而軟件堆棧不生長進(jìn)已分配數(shù)據(jù)的動(dòng)態(tài)分配區(qū)中,否則將會(huì)導(dǎo)致意外的結(jié)果。 編譯器生成數(shù)據(jù)分配到不同的區(qū)域“areas”,區(qū)域按照數(shù)據(jù)存儲(chǔ)器的地址增高的順序使用,共分為以下區(qū)域: data:是包含全局變量、靜態(tài)變量和字符串的數(shù)據(jù)區(qū)域。全局變量和字符串的初始值保存在程序存儲(chǔ)器的“ idata”區(qū)域內(nèi),在啟動(dòng)時(shí)被復(fù)制進(jìn)data數(shù)據(jù)區(qū)的。 bss:這個(gè)區(qū)域包含末初始化的 C全局變量,按 ANSIC標(biāo)準(zhǔn)這些變量在啟動(dòng)時(shí)將初始化為0。3外部數(shù)據(jù)存儲(chǔ)器(SRAM) 如果選擇帶有外部SRAM(32K或64KB)的目標(biāo)器件,那么堆棧是放置在內(nèi)部

22、SRAM的頂部并且朝低端內(nèi)存地址生長,數(shù)據(jù)內(nèi)存(圖9.8中的動(dòng)態(tài)分配內(nèi)存區(qū)域)是開始于硬件堆棧的頂部(即外部SRAM的底部)并且向上生長,這樣分配的原因是在多數(shù)場合訪問內(nèi)部SRAM比訪問外部SRAM的速度要快,分配堆棧到較快的內(nèi)存有很多好處。 EEPROM:這個(gè)區(qū)域包含EEPROM數(shù)據(jù),ATMANAVR編譯器將需要置于EEPROM數(shù)據(jù)寫進(jìn)擴(kuò)展名為.eep的輸出文件中,在對(duì)AVR芯片編程時(shí)將該文件寫入芯片的EEPROM存儲(chǔ)器中。4EEPROM存儲(chǔ)器9.5啟動(dòng)文件在一些特殊的應(yīng)用中,如用戶需判斷單片機(jī)是上電復(fù)位還是由其他原因引起復(fù)位(如看門狗等),并且針對(duì)不同的復(fù)位情況采取不同的對(duì)策,這時(shí)用戶可能

23、需要使用自己的啟動(dòng)文件,在IAR中需要修改相應(yīng)的XCL文件才能實(shí)現(xiàn)改變啟動(dòng)文件的目的,ATMANAVR和CodeVsionAVR在工程屬性窗口中可以直接指定使用外部的啟動(dòng)文件。 根據(jù)目標(biāo)MCU的種類和功能,ATMANAVR編譯器將從下面默認(rèn)的啟動(dòng)文件中選擇一個(gè)。 crtavr:o:非ATmega類芯片默認(rèn)的啟動(dòng)文件。 crtatmega.o:AT mega類芯片默認(rèn)的啟動(dòng)文件。 ATMANAVR也提供了下面四種常用的啟動(dòng)文件,用戶可以在工程選項(xiàng)對(duì)話框中(Project-OPhtions-Target-Non Default startup)指定一個(gè)啟動(dòng)文件(或用戶自定義的啟動(dòng)文件),應(yīng)注意必須

24、指定啟動(dòng)文件的絕對(duì)路徑,如果沒有指出啟動(dòng)文件的路徑,則默認(rèn)啟動(dòng)文件位于工程選項(xiàng)庫路徑所指定的目錄中(默認(rèn)為c:atmanavrlib)。 crtavrram.c:與 crtavr.o相比,增加了初始化外部 SRAM。 crtatmgaram.o:與 crtatmega.o相比,增加了初始化外部 SRAM。 crtboot.o:與crtavr.o相比,增加了bootloader的內(nèi)容,只有ATmega類的芯片才能選用。 Crtboothi.o:與 crtboot。相比,增加了使用ELPMRAMPZ內(nèi)容,一般在需要讀取大于64KB字節(jié)存儲(chǔ)器中的常數(shù)表格或字符串時(shí)才用。上面的非ATmega類芯片的每

25、一個(gè)中斷入口地址使用一個(gè)字(2個(gè)字節(jié)),而ATmega類的每個(gè)中斷入口地址使用2個(gè)字(4個(gè)字節(jié)),因此兩種芯片的啟動(dòng)文件不能混用。 啟動(dòng)文件的功能有: 1初始化硬件和軟件堆棧指針。 2從idata區(qū)復(fù)制初始化數(shù)據(jù)到直接尋址數(shù)據(jù)區(qū)data區(qū)。 3將bss區(qū)全部初始化為零。 4啟動(dòng)文件定義了一個(gè)全局符號(hào)“-start”,它是程序的起點(diǎn)。 5調(diào)用用戶主程序。 6定義一個(gè)退出點(diǎn),即定義為一個(gè)無限循環(huán)。如果主函數(shù) (main)一旦退出,它將進(jìn)入這個(gè)退出點(diǎn)進(jìn)行無限循環(huán)。下面簡單介紹如何修改和創(chuàng)建一個(gè)新的啟動(dòng)文件:使用ATMANAVR的IDE或UlterEdit32打開需要修改的啟動(dòng)文件(crtavr.s、

26、crtatmega.s或其他文件),對(duì)啟動(dòng)文件進(jìn)行相應(yīng)的修改并保存,如果用UlterEdit32軟件編輯,應(yīng)退出UlterEdit32軟件并用IDE調(diào)用修改后的啟動(dòng)文件,在IDE中選擇“File”菜單的“Compile File To-Stmp File To Object”,生成相應(yīng)的目標(biāo)文件(crtavr.o、crtatmega.o或其他的文件名)。9.6 ATMANAVR菜單解釋本章的菜單是按ATMANAVR5.8.1介紹的,其他版本的菜單可能會(huì)與本章介紹的略有不同。在介紹某單前,讀者應(yīng)先了解以下關(guān)于文件的幾種說法: 活動(dòng)的文件:是指打開的當(dāng)前正在編輯的文件; 打開的文件:是指已調(diào)入ID

27、E環(huán)境中的文件??梢允腔顒?dòng)的文件(正在編輯),也可以是放在后臺(tái)的文件; 沒有打開的文件:是指該文件保存在硬盤上,沒有調(diào)入IDE環(huán)境。1、文件 菜單文件 菜單如圖 9.12 所示。新建: 創(chuàng)建一個(gè)新文件或新工程,使用此命令,會(huì)彈出對(duì)話框由用戶選擇是建立文件還是工程,及文件或工程的類型和創(chuàng)建位置等。打開: 打開一個(gè)已存在的文件,如果是 .aws 文件,將打開整個(gè)工程。關(guān)閉: 關(guān)閉當(dāng)前被打開的文件。打開工作區(qū): 打開一個(gè)已存在的工作區(qū)(.aws 文件)。保存工作區(qū): 保存當(dāng)前被打開的工作區(qū)。工作區(qū)另存為:把當(dāng)前被打開的工作區(qū)另存為一個(gè)新的版本保存到一個(gè)新的目錄,同時(shí)打開該新工作區(qū)。關(guān)閉工作區(qū): 關(guān)閉

28、當(dāng)前被打開的工作區(qū)。保存: 保存當(dāng)前文件。另存為: 當(dāng)前文件另存為新文件。全部保存: 保存當(dāng)前所有打開的文件,包括工作區(qū)。打印: 打印當(dāng)前文件的全部或選定部分。頁面設(shè)置: 設(shè)置打印文件頁面。最近的文件: 最近打開的文件列表,利于用戶查看和重新打開。最近的工作區(qū): 最近打開的工作區(qū)列表,利于用戶查看和重新打開。退出: 退出 AtmanAvr C。2. 編輯 菜單 編輯 菜單如圖 9.13 所示。撤消: 撤消上一次編輯操作。重復(fù): 重復(fù)上一次編輯操作。剪切: 剪切當(dāng)前選中的文檔內(nèi)容或項(xiàng)目。復(fù)制: 復(fù)制當(dāng)前選中的文檔內(nèi)容。粘貼: 在當(dāng)前位置插入剪切板中的內(nèi)容。全部選擇: 選中當(dāng)前文檔的全部內(nèi)容。查找

29、: 在當(dāng)前文檔中查找字符串。 在文件中查找: 在多個(gè)文檔中查找字符串。查找過程中再次使用此命令可中斷當(dāng)前查找。替換: 用一個(gè)新字符串替換當(dāng)前文檔中的字符串。書簽: 添加或清除標(biāo)簽。到下一個(gè)書簽: 轉(zhuǎn)到下一個(gè)標(biāo)簽。到上一個(gè)書簽: 轉(zhuǎn)到上一個(gè)標(biāo)簽。清除所有書簽: 清除所有標(biāo)簽。Breakpoints:顯示斷點(diǎn)對(duì)話框。參數(shù)提示信息: 顯示函數(shù)參數(shù)提示信息。完成關(guān)鍵字: 顯示相關(guān)關(guān)鍵字的全稱。3. 查看 菜單 查看 菜單如圖 9.14 所示。工具欄: 彈出子菜單,顯示或隱藏相關(guān)工具欄狀態(tài)欄: 顯示或隱藏狀態(tài)欄。工作區(qū): 顯示或隱藏工作區(qū)窗口。輸出: 顯示或隱藏輸出窗口。調(diào)試窗口:彈出子菜單,顯示或隱藏

30、各調(diào)試窗口。圖 9.144. 工程 菜單 工程 菜單如圖 9.15 所示。添加工程: 彈出子菜單,向工程添加相關(guān)項(xiàng)目。打開: 打開工程。設(shè)置: 設(shè)置工程相關(guān)屬性。添加工程 彈出的子菜單如圖9.16所示。如圖 9.15如圖9.16新建: 創(chuàng)建一個(gè)新文件或新工程,使用此命令,會(huì)彈出對(duì)話框由用戶選擇是建立文件還是工程,及文件或工程的類型和創(chuàng)建位置等。如果是文件,可以指定是否插入到當(dāng)前工程中。文件: 添加文件到當(dāng)前工程中。使用此命令,會(huì)彈出對(duì)話框由用戶選擇添加哪些文件,如果某些文件在工程中已存在,則自動(dòng)濾除。5. 編譯 菜單 編譯 菜單如圖 9.17 所示。編譯文件: 編譯源代碼文件。構(gòu)件: 編譯和連

31、接工程,生成工程屬性中指定的輸出文件。重建全部: 重新編譯和連接工程。開始調(diào)試: 彈出子菜單,啟動(dòng)調(diào)試器。AVR Studio:調(diào)用 AVR Studio 調(diào)試。編程: 調(diào)用芯片編程程序。如圖 9.176. 工具 菜單工具 菜單如圖9.18 所示。代碼向?qū)? 啟動(dòng) 代碼向?qū)?,這是一個(gè)對(duì)工程項(xiàng)目動(dòng)態(tài)維護(hù)的工具。AtmanAvr Online:打開 AtmanAvr 主頁。用戶自定義工具示例。AtmanAvr Update:下載 AtmanAvr C 升級(jí)軟件包 AtmanAvrUpdate.exe ,升級(jí) AtmanAvr 。用戶自定義工具示例。如圖9.18AVR Studio: 設(shè)定 AVR

32、Studio 的路徑。編程工具: 指定芯片編程程序。定制:通過“定制”對(duì)話框,用戶可以自定義 AtmanAvr C IDE 的界面、菜單、工具欄、快捷鍵和其他工具軟件。AtmanAvr Online 和 AtmanAvr Update 就是兩個(gè)用戶自定義工具的示例,用戶最多可以自定義 10 個(gè)工具。選擇:通過“選擇”對(duì)話框,用戶可以自定義 AtmanAvr C IDE 的界面、窗口字體、格式及操作行為等。7. Window 菜單窗口 菜單如圖 9.19 所示。新建窗口: 為當(dāng)前文件打開一個(gè)新窗口。層疊窗口: 以重疊方式顯示窗口。橫向平鋪: 以水平排列方式顯示窗口。排列圖標(biāo): 排列最小化窗口圖標(biāo)

33、。Windows: 顯示當(dāng)前所有打開窗口列表。如圖 9.198. 幫助 菜單幫助 菜單如圖 9.20 所示。幫助: 顯示幫助文件。關(guān)于 AtmanAvr: 顯示 AtmanAvr C 的版本信息。如圖 9.209.7 工程的建立下面將簡單介紹使用AtmanAvr C IDE的向?qū)Чδ芙⒁粋€(gè)工程的步驟。在AtmanAvr C IDE的菜單欄點(diǎn)擊“工程-添加工程-新建”建立一個(gè)新的工程。彈出圖9.21所示的窗口。圖9.21建立新工程界面 在該窗口中選擇AVR C語言向?qū)ВˋVR C Wizard),指工程存放目錄及工程名稱,點(diǎn)擊“確定”進(jìn)入下一頁面。 圖9.22新工程設(shè)置界面 在如圖9.23所示

34、的ProjectWizard-Step 1的“設(shè)置MCU”窗口中可以設(shè)置芯片的型號(hào)、時(shí)鐘頻率及看門狗的設(shè)置。在本節(jié)中,將以ATmega8單片機(jī)為例簡要介紹工程向?qū)У氖褂?。其它芯片的設(shè)置在參考本設(shè)置的基礎(chǔ)上,通過閱讀AtmanAvr C IDE的幫助文件和芯片的數(shù)據(jù)手冊(cè),可以快速地建立一個(gè)AVR單片機(jī)的工程。芯片型號(hào)、時(shí)鐘頻率及看門狗設(shè)置完畢后,單擊“下一步”進(jìn)入下一窗口。 9.23 MCU設(shè)置界面9.24 I/O端口設(shè)置界面圖9.24 所示為第二步:I/O端口的設(shè)置。在該窗口中,可以設(shè)置I/O端口每位的輸入或輸出狀態(tài)、輸出電平為高電平或低電平、是否有上拉電阻等參數(shù)。AVR單片機(jī)的I/O端口配置

35、寄存器的關(guān)系可以在各個(gè)型號(hào)單片機(jī)的數(shù)據(jù)手冊(cè)中獲得.單擊“下一步”進(jìn)入定時(shí)器/計(jì)數(shù)器配置界面如圖9.25定時(shí)器設(shè)置界面. 在第三步定時(shí)計(jì)數(shù)器窗口中,如圖9.25所示??梢苑謩e配置定時(shí)器/計(jì)數(shù)器0、定時(shí)器/計(jì)數(shù)器1及定時(shí)器/計(jì)數(shù)器2的狀態(tài)??梢栽凇爸袛唷贝翱谥羞x擇中斷的類型。Overflow表示的是定時(shí)器溢出中斷選擇,其中還有比較A中斷,比較B中斷以及外部時(shí)間中斷。輸入捕獲是T1所特有的功能,外部引腳為ICP,可選擇上升沿觸發(fā)中斷。下面的輸出A,輸出B則是你根據(jù)要求來設(shè)置比較值,當(dāng)定時(shí)器的值等于比較值時(shí),會(huì)產(chǎn)生一個(gè)比較中斷。以定時(shí)器溢出中斷“Overflow”為例,選中定時(shí)器溢出中斷后,單擊“計(jì)算

36、”,可在如圖9.26所示的彈出窗口中設(shè)置定時(shí)器溢出中斷的設(shè)定值,并將顯示實(shí)際值和TCNT寄存器的初始值。設(shè)置完畢后,單擊“確定”并在步驟三的主窗口中單擊“下一步”進(jìn)入下一窗口。9.26 定時(shí)器間隔時(shí)間溢出設(shè)置9.27 外部中斷設(shè)置界面圖9.28所示為步驟五模數(shù)轉(zhuǎn)換器的設(shè)置窗口。在該窗口中,可對(duì)模數(shù)轉(zhuǎn)換的相關(guān)參數(shù)加以設(shè)定。通過“時(shí)鐘頻率”的下拉菜單可以選擇模數(shù)轉(zhuǎn)換的時(shí)鐘頻率。需要注意的是:在“時(shí)鐘頻率”的值改變的同時(shí),“轉(zhuǎn)換時(shí)間”中的值也隨之改變。當(dāng)該值為紅色時(shí),會(huì)造成模數(shù)轉(zhuǎn)換錯(cuò)誤,應(yīng)避免該情況的發(fā)生。通過“基準(zhǔn)電源”的下拉菜單,可以選擇模數(shù)轉(zhuǎn)換的基準(zhǔn)電源。 9.28 ADC設(shè)置界面 單擊“下一

37、步”進(jìn)入圖9.29所示的模擬比較器配置窗口。通過該窗口可對(duì)模擬比較器進(jìn)行初始化的配置。 9.29 模擬比較器配置界面單擊“下一步”進(jìn)入如圖9.30所示的“同步串行接口SPI”的配置窗口。在該窗口中可設(shè)置SPI通信的中斷方式、主從機(jī)模式、時(shí)鐘速率、時(shí)鐘相位、時(shí)鐘極性及數(shù)據(jù)順序等參數(shù)。 9.30 “同步串行接口SPI”的配置窗口步驟8為“通用串行接口UART”設(shè)置窗口,如圖9.31所示。在該窗口中可以設(shè)置通用串行接口的收發(fā)模式、波特率、傳輸字符位數(shù)及是否帶有奇偶校驗(yàn)和停止位等參數(shù)。同時(shí),在該窗口中還顯示出在當(dāng)前時(shí)鐘與波特率下的誤碼率。9.31 “通用串行接口UART”設(shè)置窗口單擊“下一步”進(jìn)入如圖

38、9.32所示的“雙總線串行接口TWI”配置窗口。在該窗口內(nèi)可以使能TWI及TWI中斷、設(shè)定SCL頻率,并可顯示實(shí)際的SCL頻率。 9.32“雙總線串行接口TWI”配置窗口單擊“下一步”進(jìn)入如圖9.33所示的“液晶顯示器LCD”配置窗口。AtmanAvr C IDE為用戶提供了一個(gè)液晶顯示器控制的頭文件,用戶可以直接使用該窗口對(duì)端口進(jìn)行配置,利用其提供的液晶控制函數(shù),可以容易的對(duì)液晶顯示器進(jìn)行讀、寫等操作。具體的控制函數(shù)及用法可以從AtmanAvr C IDE的幫助文件中獲得。9.33“液晶顯示器LCD”配置窗口單擊“完成”實(shí)現(xiàn)對(duì)一個(gè)工程的初始化配置。在如圖9.34所示的資源窗口,顯示了經(jīng)過初始

39、化配置后生成的全部資源文件和頭文件。其中,主文件與項(xiàng)目名稱相同;其他文件名的自動(dòng)命名原則為工程名后加對(duì)應(yīng)功能名稱。 至此,我們已經(jīng)完成了一個(gè)工程的初始化。 9.34 資源窗口9. 8 ATMANAVR 5.8.1支持的庫函數(shù)介紹C語言一般都提供很多庫函數(shù)供用戶調(diào)用,在ATMANAVR的安裝文件夾中有一個(gè)LIB文件夾,就提供了標(biāo)準(zhǔn)C庫和AVR專用的庫供用戶調(diào)用,用戶也可以創(chuàng)建或修改自定義的庫。如果一個(gè)庫中的函數(shù)被引用,鏈接器會(huì)將該相關(guān)代碼鏈接到模塊或生成的輸出文件中。 下面對(duì) ATMANAVR 9.8.1所提供的庫函數(shù)作簡單的介紹。9.8.1 C 標(biāo)準(zhǔn)庫函數(shù)由于 AVR 處理器具有多種存儲(chǔ)器空間

40、,因此在應(yīng)用中要特別注意傳遞給函數(shù)的參數(shù)的存儲(chǔ)類型。C 庫函數(shù)僅支持一種存儲(chǔ)類型,不能把 EEPROM 和 FLASH 存儲(chǔ)空間變量作為操作數(shù)。#include 符號(hào)常量#define DTOSTR_ALWAYS_SIGN 0 x01 #define DTOSTR_PLUS_SIGN 0 x02 #define DTOSTR_UPPERCASE 0 x04 #define RAND_MAX 0 x7FFF #define RANDOM_MAX 0 x7FFFFFFF abort free abs itoaatoi labs atol ldivbsearch longjmpcalloc ltoa

41、 div mallocdtostre qsortdtostrf rand exit rand_r random strtod random_r strtolsetjmp strtoulsrand ultoasrandom utoa9.8.2數(shù)學(xué)函數(shù)基本數(shù)學(xué)常數(shù)和函數(shù)。#include 常數(shù)#define M_PI 3.141592653589793238462643 #define M_SQRT2 1.4142135623730950488016887 函數(shù)acos isinf asin isnan atan, atan2 ldexp ceil log, log10 Cos modf cosh

42、 pow exp sin fabs sinh floor sqrt fmod square frexp tan inverse tanh 9.8.3字符函數(shù)字符函數(shù)執(zhí)行對(duì)單個(gè)字符的操作。#include isalnum isprint isalpha ispunct isascii isspace isblank isupper iscntrl isxdigit isdigit toascii isgraph tolower islower toupper 9.8.4 字符串函數(shù) 字符串函數(shù)操作以 NULL 結(jié)尾的字符串。如果字符串存儲(chǔ)在程序存儲(chǔ)器空間,使用程序存儲(chǔ)器 API 函數(shù)。#incl

43、ude memccpy strcpymemchr strlcat memcmp strlcpymemcpystrlen strchr strlwrstrcmpstrncasecmp Memmovestrncpymemset strnlen strcasecmp strrchrstrcat strrevStrncatstrstr strncmp strupr9.8.5 存儲(chǔ)器 API 函數(shù)AVR 系列單片機(jī)指令與數(shù)據(jù)使用不同的地址空間。由于寄存器和 RAM 為 8 位,而程序存儲(chǔ)器為 16 位,因此操作上要比使用單一地址空間復(fù)雜一些。另外,EEPROM 與前兩者又處于不同的地址空間。通常指令使用

44、 flash ROM,數(shù)據(jù)使用 SRAM,如果要訪問 EEPROM 或把數(shù)據(jù)放在 ROM 空間,GCC 提供的存儲(chǔ)器 API 函數(shù)封裝了這些底層操作,可以方便地實(shí)現(xiàn)這些目的。1、程序存儲(chǔ)器 API把數(shù)據(jù)放在 ROM 空間的益處在于:數(shù)據(jù)可以隨時(shí)使用,不需要在啟動(dòng)時(shí)進(jìn)行初始化,同時(shí)不會(huì)因?yàn)槌绦蜻\(yùn)行中的錯(cuò)誤而遭到破壞。由于 ROM 處于不同的地址空間,在 ROM 中定義變量使用特別的聲明(參見 變量),訪問 ROM 中變量可以通過程序存儲(chǔ)器 API 函數(shù)。#include _ATTR_CONST_, _ATTR_PROGMEM_, _ATTR_PURE_ _elpm_inlinestrcat_P

45、_lpm_inlinestrcmp_Pmemcpy_P strcpy_Ppgm_read_bytestrcasecmp_Ppgm_read_byte_far strlen_Ppgm_read_byte_near strncasecmp_P pgm_read_word strncmp_Ppgm_read_word_far strncpy_Ppgm_read_word_near PSTRPRG_RDB 2、EEPROM APIAVR 系列單片機(jī)具有非易失的存儲(chǔ)空間 EEPROM,它與靜態(tài) RAM 不在同一地址空間。訪問 EEPROM 單元需要借助 I/O 寄存器。EEPROM API 函數(shù)封裝了底

46、層操作功能,使訪問 EEPROM 簡便易行。使用 EEPROM API 函數(shù),需要包含 eeprom.h 文件。eeprom_is_readeeprom_read_byteeeprom_read_blockeeprom_read_wordeeprom_write_byteeeprom_write_blockeeprom_write_word 9.8.6 中斷 API 函數(shù)中斷 API 函數(shù)封裝了對(duì)中斷的控制功能,包括中斷的使能或禁止,中斷例程的定義等。它們分別定義在 interrupt.h 和 sig-avr.h 文件中。cli enable_external_intINTERRUPTseiS

47、IGNALtimer_enable_int 9.8.7 I/O API 函數(shù)I/O API 函數(shù)提供高層訪問 I/O 寄存器的功能,支持字或字節(jié)讀寫操作,位測(cè)試,位操作等。I/O API 函數(shù)定義在 io.h ,iomacros.h 和 parity.h 文件中。#include BV loop_until_bit_is_clear bit_is_clear loop_until_bit_is_setbit_is_set outp, outb Cbi outw inp, inb _outw inw outw_atomicinw parity_even_bit inw_atomic sbi 9.8.8看門狗 API 函數(shù)看門狗 API 函數(shù)封裝了對(duì)看門狗的操作功能,宏定義在 wdt.h 文件中。#include 符號(hào)常量#define WDTO_15MS 0 #d

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論