- AVR單片機菜鳥進階
- 沈添國主編
- 2178字
- 2019-01-09 15:47:40
第2章 AVR開發利器——菜鳥的裝備
古人云,工欲善其事,必先利其器。因此,在開始學習AVR之前,先來了解一下AVR開發利器,也就是AVR的軟件開發工具。本章將為讀者介紹3款軟件,其中2款是編程設計軟件,1款是軟件仿真工具。介紹這3款軟件目的是讓讀者熟悉AVR的軟件開發工具,以及一些常運用的工具或軟件。
2.1 ICCAVR——AVR軟件開發工具一
ICCAVR,對于已經接觸過AVR單片機的工程師來說決不陌生。ICCAVR也是筆者第一個接觸到的AVR編程軟件。
2.1.1 ICCAVR的簡介
ICCAVR是用一種符合ANSI標準的C語言開發MCU(單片機)程序的一個工具,其功能合適、使用方便、技術支持好。它主要有以下幾個特點。
(1)它是一個綜合了編輯器和工程管理器的集成工作環境(IDE)。
(2)其源文件全部被組織到工程之中,文件的編輯和工程的構筑也在這個環境中完成;錯誤顯示在狀態窗口中,并且當單擊編譯錯誤時,光標會自動跳轉到錯誤的那一行。
(3)該工程管理器還能直接產生INTEL HEX格式的燒寫文件(該格式的文件可被大多數編程器所支持,可以直接下載到芯片中使用)和符合AVR Studio(AVR Studio是AVR的另一款編程軟件,將在2.2節介紹)的調試文件(COFF格式)。
(4)它是一個32位的程序,支持長文件名。
(5)它可在Win 95、Win 98、Win ME、Win NT、Win 2000、Win XP和Win 7環境下運行。
在互聯網上下載到的很多樣例工程都是基于ICCAVR軟件開發的,因此讀者有必要對其進行了解。
2.1.2 ICCAVR的安裝
ICCAVR的安裝比較簡單,沒有什么需要特殊設置的地方。對于ICCAVR的安裝包,讀者可以從ICCAVR的官網https://www.imagecraft.com/下載,其最新的版本為ICCV8 FOR AVR。本節介紹的版本是6.3 1 A。
打開軟件所在的文件夾,雙擊iccavr6.3 1 A.exe應用程序,運行后,會出現如圖2.1所示的ICCAVR安裝界面。

圖2.1 ICCAVR安裝界面
根據提示一直單擊“Next”即可完成安裝。安裝完成后單擊開始菜單,會出現這樣的一個圖標,由此說明該軟件安裝成功。打開軟件,如果發現軟件上方出現圖2.2中所示字樣“WARNING:45 Days EVALUATION version”,說明你使用的是有限制的試用版,其試用期為45天。單擊工具欄的“Help”菜單,再單擊“Register Software”(如圖2.3所示),會彈出如圖2.4所示的“License ICCAVR”提示框。

圖2.2 ICCAVR軟件工具欄(軟件未注冊)

圖2.3 Help菜單

圖2.4 “License ICCAVR”提示框
將圖2.4中框選的硬件地址碼復制后直接發郵件到license@imagecraft.com便可獲得解鎖碼(Unlock Code)。注冊完成后的軟件界面如圖2.5所示。

圖2.5 ICCAVR軟件工具欄(軟件已注冊)
到此,ICCAVR算是真正安裝成功了。
2.1.3 ICCAVR工程的建立
接下來試著在ICCAVR中建立一個新工程。打開軟件,單擊“Project”菜單下的“New”,會彈出如圖2.6所示的提示框,將其命名為first_project,單擊“保存”即可。此時的工程是無任何文件的,在新建文件之前,讓我們先來設置工程選項。單擊“Project”菜單下的“Options”或工具欄上的圖標就可以進行工程選項的設置了,如圖2.7所示。

圖2.6 新建工程提示框

圖2.7 工程選項的設置1
在“Target”標簽下,“Device Configuration”的下拉菜單用于選擇所要開發的芯片型號,這里選擇的是ATmega88。在這里還有一個選項值得注意,就是“String in Flash only”,其意思是字符串只存儲在Flash里,在后續的開發中會遇到這樣的情況,到時再詳細介紹。
如圖2.8所示,在“Paths”標簽下可以進行庫文件的路徑及輸出路徑等的設置。當把工程復制到其他計算機上時,可能會出現路徑錯誤的提示,這是因為該計算機中的ICCAVR安裝目錄與之前的計算機中的ICCAVR安裝目錄不一致,只需要單擊圖2.8中各選項后面的“Add”或“Browse”按鈕,查找到本機的安裝目錄,選擇該目錄后單擊“確定”即可。還有另一種方法是直接復制安裝路徑,然后粘貼到對話框中。假設ICCAVR的安裝路徑是D:\icc,在圖2.8中的“Include Path(s)”和“Library Path”兩項中分別添加安裝路徑下對應文件夾,添加后內容分別為“c:\icc\include\;d:\icc\include\”和“c:\icc\lib\;d:\icc\lib\”。另外2個標簽可以不用設置,選擇默認設置即可。

圖2.8 工程選項的設置2
單擊“Files”菜單下的“New”,分別新建2個文件,命名并保存為main.c和main.h。
在main.h中添加如下內容:
#ifndef_MAIN__H_ #define _MAIN__H_ #include <iom88v.h> #include <macros.h> //-------------------------------TYPEDEF----------- //使用typedef重定義類型,更方便代碼移植 typedef unsigned char uchar; typedef unsigned int uint; typedef unsigned long ulong; typedef signed char schar; typedef signed int sint; typedef signed long slong; #endif
說明:
(1)如果是軟件自帶的H文件,可以使用<>將其包含;如果是自定義的H文件,則可以使用""將其包含;
(2)使用typedef重定義類型更方便代碼移植,而且可以減少輸入量。
在main.c中添加如下內容:
/********************************************** project:first project IDE:ICC AVR device:atmega88 author:lg date:2012-07-05 21:10 goal:在ICCAVR平臺上新建一個工程 ***********************************************/ #include "main.h" //----------------------MAIN----------------------- void main(void) { DDRD| =0X0F; //設置PD口的0~3口方向為輸出 PORTD=0X0F; //設置PD口的0~3口電平為高 //-----------循環----------- while(1); }

圖2.9 工程文件界面
在這里簡單設置了幾個I/O為高電平輸出。注意,新建一個工程時,最好在文件開頭做上記錄并在代碼后增加注釋,以便于以后代碼的修改和移植。
新建操作完成后,在ICCAVR軟件界面的右邊可以看到新建工程時給工程命名的名字,然后選中“Files”菜單,用鼠標右鍵單擊“Add File(s)”添加C文件到該目錄下,再選中“Headers”將H文件添加進去,如圖2.9所示。
之后,單擊“Make Project”或編譯工程(工程文件界面下方的編譯輸出窗口如圖2.10所示)。編譯成功后,在工程目錄下便生成了可燒錄的HEX文件。

圖2.10 編譯輸出窗口
2.2 AVR Studio——AVR軟件開發工具二
下面一起來了解一下AVR編程開發的另一款工具——AVR Studio,該軟件也是筆者至今都在使用的一款。
2.2.1 AVR Studio的簡介及AVR Studio 4的安裝
AVR Studio是ATMEL公司開發的AVR單片機的集成環境匯編級開發調試軟件,完全免費。ATMEL AVR Studio集成開發環境(IDE)包括AVR Assembler編譯器、AVR Studio調試功能、AVR Prog串行、并行下載功能和JTAG ICE仿真等功能。它集匯編語言編譯、軟件仿真、芯片程序下載、芯片硬件仿真等一系列基礎功能于一體,與任一款高級語言編譯器配合使用即可完成高級語言的產品開發調試。
對于使用匯編的工程師來說,AVR Studio是直接可以運用開發的;而對于使用C語言開發的朋友來說,就需要多安裝一個插件了,那就是WinAVR。WinAVR也是一個開源免費的工具,其特點是優化效率高,有利于平臺移植。
AVR Studio及WinAVR的安裝包都是可以直接從其官網上下載的。這里推薦給讀者一個運用比較廣的版本,即AVR Studio 4及WinAVR-20070525。對于兩者的安裝,這里簡單介紹如下。
雙擊AvrStudio4Setup.exe,會出現如圖2.1 1所示的界面,如果你對軟件安裝在你的系統盤無異議,就可以一直單擊“Next”按鈕,直至最后單擊“Finish”按鈕結束整個AVR Stu-dio 4的安裝。

圖2.1 1 AVR Studio的軟件安裝開始界面
接下來安裝WinAVR。雙擊WinAVR-20070525.exe,會出現如圖2.12所示的界面,一直單擊“下一步”按鈕即可完成安裝。
它們的安裝都是比較簡單的,沒有什么需要進行特殊設置的。

圖2.12 WinAVR的安裝向導界面
2.2.2 AVR Studio 4的第一個工程
雖然AVR Studio建立工程的過程與ICCAVR類似,但是也存在軟件上的差異,而且兩者使用的編譯器也是不一樣的。下面開始建立AVR Studio的第一個工程。
雙擊運行AVR Studio 4,界面如圖2.13所示(有一個歡迎界面提示,也可取消掉)。再單擊“New Project”按鈕新建一個AVR Studio工程,然后會跳出另一個提示框,如圖2.14所示。

圖2.13 AVR Studio 4的啟動界面

圖2.14 新建工程界面
在圖2.14中先選擇編譯工具:使用匯編編程的可以選擇Atmel AVR Assembler;使用C語言編程的可以選擇AVR GCC。而這個AVR GCC就是前面安裝的WinAVR。如果沒有安裝WinAVR,是不會有AVR GCC這一項的。這里選擇的是AVR GCC,此時界面的右邊部分由不可操作變為可操作,然后輸入工程名first_prj及初始化文件名main。界面下方是工程的路徑。此處要注意的是,工程的路徑一定要是全英文的,不然工程無法編譯成功。
單擊“Next”按鈕,進入仿真器和器件類型的選擇界面(如圖2.15所示),這里選擇的是JTAGICE mkII和ATmega88。單擊“Finish”按鈕,此時工程已經建立起來,可以開始添加文件了。

圖2.15 仿真器與器件類型的選擇界面
往工程中添加文件與ICCAVR中的操作相似。在main.h中添加如下內容:
/******************************************************* main.h包含一些庫文件,以及用戶的自定義文件、宏定義等 只需在.c文件包含該文件就可以了 ******************************************************/ #ifndef_MAIN_H_ #define _MAIN_H_ #include <avr/io.h> #include <stdio.h> #include <string.h> #include <avr/interrupt.h> //-------------------------------TYPEDEF----------- //使用typedef重定義類型,更方便代碼移植 typedef unsigned charuchar; typedef unsigned int uint; typedef unsigned long ulong; typedef signed char schar; typedef signed int sint; typedef signed long slong; #endif
此處與ICCAVR不一樣的地方為:不管你選擇的是什么型號的器件,只要添加#include<avr/io.h>即可將其包含在里面。
在main.c中添加如下內容:
/********************************************** project:first project IDE:AVR Studio 4+Winavr20070525 device:atmega88 author:lg date:2012-07-05 21:10 goal:在AVR Studio4平臺上新建一個工程 ***********************************************/ #include "main.h" //----------------------MAIN----------------------- int main(void) { DDRD| =0X0F; //設置PD口的0~3口方向為輸出 PORTD=0X0F; //設置PD口的0~3口電平為高 //-----------循環----------- while(1); }
此處與ICC AVR不同的地方為:main函數的返回類型一定要是int類型的,不然編譯后會出現警告信息。對于工程,最好做到無警告,以防編譯漏掉一些細節的東西,導致出現不可意料的結果。按下F7或單擊“Build”按鈕,彈出的編譯輸出窗口如圖2.16所示。從編譯輸出窗口可以得到一些相關信息,如所選擇的器件型號,flash和sram的使用情況等。

圖2.16 編譯輸出窗口
2.2.3 ICCAVR過渡到AVR Studio——不同平臺的移植
對于一些編程開發來說,一種產品在不同軟件平臺上運行是十分常見的事。但是不同平臺下的程序一般是不能直接移植到另一個平臺使用的,需要將該平臺特有的東西轉換為另一個平臺的東西。
下面針對前面介紹過的2個軟件,說明從ICCAVR過渡到AVR Studio需要注意的幾個地方。
1.頭文件的更改
在ICCAVR中使用不同的AVR,其工程的頭文件是不同的。如果使用ATmega88V,則添加的頭文件是iom88v.h;當更換成ATmega168V時,其頭文件應該替換為iom168v.h。而在AVR Studio中,avr/io.h包含了不同MCU的頭文件。因此,從ICCAVR過渡到AVR Stu-dio時,只需將“#include <iom88v.h>”更改為“#include <avr/io.h>”即可。
2.中斷函數不同
中斷函數有兩個地方不同:一個是中斷服務程序的寫法不同;另一個是中斷向量號不同。先來看一下ICCAVR的中斷服務程序和中斷向量表。
ICCAVR的中斷服務程序的模板如下:
#pragma interrupt_handler user_fuc:Interrupt vector number
如表2.1所示為ATmgea88V在ICCAVR軟件中的中斷向量表。
表2.1 ATmgea88V在ICCAVR軟件中的中斷向量表

舉個例子,如果要在ICCAVR軟件中編寫定時器2的比較中斷服務程序,則內容如下:
#pragma interrupt_handler Time2:iv_TIMER2_COMP //iv_TIMER2_COMP為向量號 void Time2(void) //定時器2的比較中斷服務程序 { ;/ /添加自己的程序 }
對于AVR Studio,先來看一下中斷服務程序和中斷向量表,再對平臺進行比較。
AVR Studio的中斷服務程序的模板如下:
ISR(Interrupt vector number) //Interrupt vector number為中斷向量號 { //添加自己的程序 }
如表2.2所示為ATmgea88V在AVR Studio軟件中的中斷向量表。
表2.2 ATmgea88V在AVR Studio軟件中的中斷向量表

從中斷服務程序模板和中斷向量表可以看出ICCAVR和AVR Studio在編寫中斷函數時的不同之處,因此在進行平臺的移植時,需要對對應的地方進行修改,并且在AVR Studio軟件中需要添加“#include <avr/interrupt.h>”頭文件,才能使用AVR的中斷。
3.一些宏定義
表2.3列舉了ICCAVR與AVR Studio中幾個比較常用的宏定義的比較。
表2.3 兩軟件中常用宏定義的比較

在這里,可以在原來的宏定義的基礎上再使用一次宏定義,以減少程序的改動量。
2.3 Proteus——軟件仿真工具
本節介紹一個軟件仿真工具——Proteus,該軟件比較受軟件工程師的青睞。雖然該軟件模擬的硬件環境與實際環境存在差異,但是基本上在該軟件中調試通過的程序運用到實際的硬件環境后的改動不是很大。
2.3.1 Proteus的簡介
Proteus是英國Labcenter electronics公司出版的EDA工具軟件。它不僅具有其他EDA工具軟件的仿真功能,還能仿真單片機及外圍器件。它是目前最好的仿真單片機及外圍器件的工具。Proteus從原理圖布圖、代碼調試到單片機與外圍電路協同仿真、一鍵切換到PCB設計,真正實現了從概念到產品的完整設計。它是目前世界上將電路仿真軟件、PCB設計軟件和虛擬模型仿真軟件三合一的設計平臺軟件之一,其處理器模型支持805 1、HC1 1、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列處理器,并持續增加了其他系列的處理器模型。在編譯方面,它也支持IAR、Keil和MPLAB等多種編譯器。
這款軟件主要用來進行軟件仿真。在實際開發過程中,都是硬件和軟件同時進行的,但如果硬件調試板還未完成,則可以使用這個軟件進行仿真。你需要多少個電流表、電壓表、示波器,它都可以滿足你。
2.3.2 Proteus的安裝
雙擊Proteus 75SP3 Setup.exe進行安裝,當彈出如圖2.17所示的界面后,選擇“Use a locally installed Licence Key”(使用本地許可證)這一項,然后單擊“Next”按鈕,會提示有沒有可使用的許可證存在,若沒有,則單擊“Next”按鈕瀏覽本地許可證,然后單擊提示框中的“Install”即可,如圖2.18所示。接下來繼續單擊“Next”按鈕,此時真正開始安裝軟件,最后單擊“Finish”按鈕即可完成整個安裝過程。

圖2.17 Proteus的安裝向導

圖2.18 Proteus的注冊界面
安裝完成后查看其生成的快捷方式,可知其中的ARES 7 Professional是用來設計PCB的,ISIS 7 Professional是用來進行原理圖設計及軟件仿真的。兩者運行后的界面分別如圖2.19和圖2.20所示。

圖2.19 ARES 7 Professional的運行界面

圖2.20 ISIS 7 Professional的運行界面
2.3.3 Proteus的使用
對于Proteus的使用,這里只介紹運用ISIS 7 Professional工具來進行器件的添加及搭建一個簡單的仿真電路。
運行ISIS 7 Professional,單擊“庫(L)”菜單,選擇“拾取元器件/符號(P)”,會彈出如圖2.21所示的界面。可以通過從圖2.21左側的類別、子類別及制作商中選擇或直接輸入關鍵字來查找我們所需要的器件,這里選中的是ATMEGA88_32PIN。圖2.21右側給出了其原理圖及PCB的預覽圖。單擊圖2.21右下角的“確定”按鈕,器件就添加好了,然后可以從圖2.21左側看到該器件。
現在來搭建一個簡單的電路。首先根據上述方式添加MCU、晶振、LED、電阻和電壓表。然后單擊“元件模式”,放置元件,如圖2.22所示。接著先對電源進行設置:單擊“設計(D)”菜單中的“設定電源范圍”,選擇“VCC/VDD”項,其默認的電壓值為5,這里修改為我們需要的3.3(對于芯片來說,5V電壓也是可以的,電源范圍可以根據實際需要來調整)。接下來需要修改的就是晶振的頻率,這里將其設置為7.3728 MHz(其默認值為1 MHz)。最后需要修改ATMEGA88_32PIN的屬性,這是最難設置的一個地方,需要根據程序的具體要求來設置。
單擊MCU的屬性,彈出如圖2.23所示的界面。首先設置“Program File”,通過瀏覽找到2.1.3節中建立的那個工程的HEX文件,選中它后單擊“確定”按鈕即可。然后設置熔絲位,由于這里使用的是外部晶振7.3728MHz,所以熔絲位的設置也如圖2.23中所示。至此,所有設置完成。

圖2.21 選擇型號界面

圖2.22 電路示例1
2.1.3節的工程是實現將I/O方向設置為輸出并且將電平設置為高電平,搭建的電路中接了4個LED來說明是否達到效果,如圖2.24所示。從圖中可以看到,PD的3個引腳所接的電壓表都顯示為3.29V。
Proteus還提供了很多虛擬儀器,如I2 C調試器、SPI調試器,它們都是單片機工程師經常會使用到的。因此,掌握Proteus的使用對開發很有好處。總的來說,如果能夠多掌握一個工具,對于開發就會多一個解決方法。

圖2.23 “編輯元件”界面

圖2.24 電路示例2
2.4 小結
本章簡單介紹了開發常用工具及AVR的編程開發軟件及其運用,這里主要起一個拋磚引玉的作用,以讓開始學習單片機的朋友大體了解一下開發時需要的工具、一些相關的設置及需要注意的地方。