一般來說,單片機的使用要從基礎的匯編語言開始講起,即使使用C語言進行開發,也必須對內部的機器碼實現非常熟悉,才能應付設計和調試中可能出現的各種情況。WINAVR是個免費的AVR 開發程序集,它以著名的自由軟件GCC 為C/C++編譯器。之所以選用WINAVR,是因為它是一組開放源代碼的程序集,也是目前最好的自由軟件之一。 下面是關于WINAVR的使用要點,更詳細的情況建議參考芯藝的《AVR 單片機GCC 程序設計》。開發工具: 更適合采用高級語言開發是AVR 單片機最初設計時的目的之一。目前AVR 單片機高級語言發發工具主要有IAR C、WINAVR、ICCAVR、CodeVision、BASCOM-AVR(BASIC 語言)。IAR 是與AVR 內核協同開發的,很多對AVR 更適合C 語言開發方面的改進是根據IAR開發過程的,它也是ATMEL 公司推薦的C 語言編譯器,但它的價格幾呼讓人難以接受,達到上萬元人民幣。ICCAVR 是國內AVR 主要推廣單位雙龍公司代理的C 編譯器,它價格低廉,友好的界面把很多煩瑣的項目管理和編譯設置隱藏了起來,為此它受部分開發人員的歡迎。CodeVision 也是個很不錯的C 編譯器,目前在國內也有一定數量的用戶。Winavr 是個免費的AVR 開發程序集,它以著名的自由軟件GCC 為C/C++編譯器。下面所有章節我都會介紹如何使用WINAVR 開發AVR 單片機。GCC 編譯器 UNIX 上最原始的C 編譯器叫CC(C Compiler C 編譯器),源于此GNU 的C 編譯器叫作GCC(GNU C Compiler),然而,隨著GCC 支持語言的增加GCC 這個縮寫的意義已演變成了GNU 編譯器集合(GNU Compiler Collection),它是GNU 項目的一個產品,是個開放源代碼軟件。GCC 可編譯多種語言,目前支持的語言有C、C++、Objective-C、Fortran、java 和Ada。這些高級語言程序通過編譯程序前端(front-end)后產生解析樹,之后與器件相關的后端(back-end)程序將它們解釋成實際的可執行指令集。前端與后端是完全分開的,解析樹是它們中間的產物。GCC 這樣的設計使得任何一種語言只要通過合適的語法解析器產生符合格式的解析樹,就可以產生GCC 后端程序所支持的所有器件上的可執行指令集。同樣的,任何一種器件只要將樹結構翻譯成匯編,就可以使用GCC 前端所支持的所有語言。要承認的是,以上描述是理論化的,便于理解,實際操作并沒有想象的那么簡單。事實上前端和后端都不是孤立的。幸運的是AVR 的確得到了GCC 的支持,它也是GCC 支持的唯一一種8 位處理器。不僅如此,我們還可以在WINDOWS 平臺上安裝程序包WINAVR 來使用GCC 的AVR C/C++編譯程序。WINAVR 是一組開放源代碼的程序集,用于ATMEL 公司 AVR 系列單片機的開發,它主要包含: 1. GNU 程序包Binutils GNU Binutils 非常龐大,WINAVR 僅包含與AVR 相關的部分,有AVR 匯編器、連接器以及與機器指令相關的一些工具 2. GNU GCC 的C 和C++編譯器。 3. AVR-LIBC AVR-LIBC 是AVR 單片機C 運行時庫, 它是為應用程序提供標準C 函數的連接時定位庫。
另外WINAVR 還包含軟件調試器、器件編程軟件、文件格式轉換工具等多個有用工具,這里不一一列出, 請參考WINAVR 說明文檔。WINAVR 項目的WEB 地址是http://sourceforge.net/projects/winavr ,這里可以下載最新的版本,并可訂閱郵件組。 郵件組是獲取WINAVR 相關幫助信息的重要途徑。一個簡單的例子文件demo1.c :#i nclude int main( void ) { unsigned char i, j, k,led=0; DDRB=0xFF; while (1) { if(led) PORTB|=0X01; else PORTB&=0XFE; led=!led; //延時 for (i=0; i<255; i++) for(j=0; j<255;j++) k++; } }這是一個使接在PB0 口的LED 發光管閃爍的程序。使用Mfile 生成合適的makefile然后運行make all即可生成hex文件。
|