已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
AVR單片機C語言編譯器Win-AVR是流行的GNU編譯器在AVR平臺上的移植。安裝完畢后會在桌面上出現(xiàn)一下七個快捷方式,它們的作用如下:Programmers Notepad源文件的編輯軟件,可提供應(yīng)用程序接口AVR InsightGDB Debug的前端工具,用于仿真調(diào)試TKInfoGNU超文本格式的圖形瀏覽器,用于瀏覽各種說明文檔Avr-libc ManualAVR-GCC編譯器的C語言函數(shù)庫GNU Manuals OnlineGNU在線幫助手冊MFileMakefile編輯軟件READMEWinAVR的readme文件 IDE (Integrated Development Environment)集成開發(fā)環(huán)境 ICE (In Circuit Emulator) 在線仿真器 JTAG (Joint Test Action Group) 聯(lián)合測試行為組織 *.hex 文件用來向單片機下載的16進制文件 *.cof文件用來利用AVRstudio進行在線仿真和調(diào)試的文件l AVR COFF(AVR Studio 3.x)l AVR “Extended” COFF(AVR Studio 4.07+)*.hex和*.cof這兩個文件不能由AVR-GCC本身生成,需要其他輔助工具來完成這一步,這個工具叫avr-objcopy。Makefile文件就是一個描述性質(zhì)的文件,告知make各文件之間的依賴關(guān)系,不需要擴展名。一般在MFile這個程序中生成對應(yīng)的makefile文件,然后將它復(fù)制到PN源文件的文件夾下,就可以進行make all的命令來實現(xiàn)對源文件的編譯了。一般而言,makefile文件只需要修改一下幾個地方。Main file name (不要帶擴展名)和MCU type 以及Default make target,然后點file-save as保存到要編譯的文件的文件夾下。C語言小總結(jié) C語言的標識符是區(qū)分大小寫的,標識符必須以字母或者下劃線開頭,下劃線開頭的標識符一般是編譯器定義的。 一般而言,如果不是需要使用負整數(shù),盡量使用無符號數(shù)整數(shù)來表示,這樣可以減少系統(tǒng)處理符號的工作,從而提高程序的執(zhí)行效率。 凡是耳目運算符,都可以和賦值符一起組成復(fù)合賦值符,C語言中規(guī)定可使用的10中復(fù)合賦值運算符:+=;-=;*=;/=;%=;=;&=;=;|= 逗號運算符是C語言的一種特殊的運算符,其作用是將兩個表達式連接起來,C語言對兩個表達式分別計算,并將后一個表達式的值作為逗號表達式的值。運算優(yōu)先級最低。例如:a=3*6,4*8;其結(jié)果為a=32; C語言規(guī)定了六種關(guān)系運算符:;=;=;!=其中前四個的優(yōu)先級比較高,后兩個的優(yōu)先級比較低。 C語言規(guī)定的位運算共有一下幾種: & 按位與 | 按位或 按位異或 (XOR) 10=1 11=0 取反 右移位翻轉(zhuǎn):令其和一個相應(yīng)位為1,其他位位0的常量做異或運算。位置一:令其和一個相應(yīng)位為1,其他為為0的常量做或運算。PORTA|=(17)位置零:令其和一個相應(yīng)位為0,其他位為1的常量做與運算。PORTA&=(17) 一般的變量和數(shù)組均存儲在系統(tǒng)的RAM中,AVR-GCC還支持存儲在ROM的數(shù)組和字符串,該字符串使用PROGMEM關(guān)鍵字進行聲明。如:Const char str PROGMEM =”hello” ; / 聲明了一個存儲在ROM中的字符串 字符串是不能在程序中用賦值符直接賦值的,但可以借助循環(huán)語句,一個變量一個變量的進行拷貝,如下:char a5=”hello” ;char b5;b=a; /*這樣的操作是非法的*/for(i=0;isex=M;student31.sex=M;student32.score=95.5; 共同體:共同體的所有成員都占有相同的空間,共同體占用的空間的大小等于共同體內(nèi)占用空間最大的變量所占用的空間。共同體類型聲明形式如下:union 共同體名 數(shù)據(jù)類型 成員名1; 數(shù)據(jù)類型 成員名2; 數(shù)據(jù)類型 成員名n;共同體的變量聲明形式為:union 共同體名 共同體變量名共同體變量引用的形式為: 共同體變量.名成員;注意共同體的數(shù)據(jù)是存儲在一個存儲空間的,因此共同體變量所存儲的值等于最后一次對共同體變量所賦的值。不能對共同體變量名賦值,也不能在定義共同體變量時對其初始化,對共同體的操作必須指明其成員。不能把共同體變量作為函數(shù)的參數(shù)和返回值。例如:union length_union Unit16_t word; Unit8_t byte2;length; /定義了一個共同體,有兩個成員,一個是16位的無符號整數(shù),另外一個是一個包含兩個無符號8位整數(shù)的數(shù)組,二者共用存儲空間。在上例中,如果按照length_union.word來操作時,則作為一個16位無符號整數(shù),如果作為length_union.byte0和length_union.byte1操作,則訪問的是該存儲空間的低位字節(jié)和高位字節(jié)。 枚舉類型如果變量只有幾個可能的取值,則可以用枚舉類型表示該變量。枚舉類型定義形式為:enum 枚舉類型標識符 枚舉列表;枚舉變量的定義為:enum 枚舉類型 枚舉變量名;例如: enum color red,green,blue;C語言將枚舉類型中的枚舉元素定義為常量,因此枚舉元素是有值的,C語言自動按照值的順序定義值為0,1,2,枚舉元素的值可以改變enum colorred=5,green,blue; /red代表5,后面的未定值依次加一例如:enum colorred,green,blue;enum color crt;crt=red;crt=2; /錯誤crt=(enum color)2; /將枚舉元素中的值為2的元素賦值給crt變量,強制轉(zhuǎn)換。枚舉變量的賦值必須用枚舉元素,如果直接用整數(shù)賦值是不行的,必須采用強制轉(zhuǎn)換。 用戶自定義類型用戶可以對已存在的C語言類型名重新進行定義,從而方便使用,用戶定義類型一般為: typedef 類型名 標識符使用這些自定義類型是,必須包含inttypes.h頭文件。例如: #include typedef signed char int8_t /八位有符號數(shù) (無分號)typedef unsigned char uint8_t /八位無符號數(shù) 預(yù)處理C語言的預(yù)處理功能主要有一下三方面:l 宏定義l 文件包含l 條件編譯 宏定義宏定義的作用是用指定的標識符代表一個字符串,宏可以參數(shù),也可以不帶參數(shù),不帶參數(shù)的宏定義的一般形式為: #define 標識符 字符串帶參數(shù)的宏定義聲明形式為: #define 宏名(參數(shù)表) 字符串例如:define S(a,b) a*b /定義了一個帶參數(shù)的宏int main(void)int i; i=S(5,6); /該語句與i=5*6完全一樣 return 0; 文件包含文件包含的作用是將一個文件的內(nèi)容包括到另一個文件之中,文件包含的形式為:#include “文件名” #include 第一種首先在當前文件的所在目錄中尋找包含的文件,如果找不到再到系統(tǒng)指定的包含文件的目錄去尋找,第二種則直接在系統(tǒng)指定的包含目錄中去尋找,一般為了保險起見,盡量使用雙引號形式的include指令。 條件編譯條件編譯可以根據(jù)用戶定義的不同條件,選擇使用不同的語句,這在編寫可移植的程序時特別有用。條件編譯有以下幾種形式:l 第一種#ifdef 標識符 程序段 1#else 程序段 2#endif該語句的作用是,如果在此語句前用“#define標識符”定義了標識符,則只在程序中包含程序段1,否則只包含程序段2.l 第二種#ifndef 標識符 程序段1#else 程序段2#endif該語句的作用是,如果在此語句前沒有用“#define 標識符”定義了標識符,則只在程序中包含程序段1,否則只包含程序段2l 第三種#if 表達式 程序段1#else 程序段2#endif該語句的作用是,如果表達式的值為真,則值在程序中包含程序段1,否則,若表達式的值為0,則只在程序中包含程序段2. AVR-LIBC的中斷處理函數(shù)對于不同的編譯器有不同的方法處理中斷,這是因為C語言的目標就是與處理器的細節(jié)無關(guān),因此每個編譯器的作者都不得不使用自己的方法為編譯器添加對中斷的支持。在AVR-LIBC的環(huán)境中,中斷向量表已經(jīng)預(yù)先固定指向具有特定名字的函數(shù),這些函數(shù)用來執(zhí)行中斷操作。使用這些特殊名字的函數(shù)可在相應(yīng)中斷發(fā)生時被調(diào)用。AVR-LIBC中,對中斷處理函數(shù)進行了封裝,通過使用兩個參數(shù)的宏INTERRUPT()和SIGNAL(),程序可正確的處理不同的中斷操作。#include “avr/signal.h”INTERRUPT(SIG_ADC)/用戶代碼或者為#include “avr/signal.h”SIGNAL(SIG_ADC)/用戶代碼 全局中斷標志操作函數(shù):#define sei() _asm_ _volatile_(“sei” :)使用中斷處理函數(shù),必須加入下面的包含語句:#include sei(); /設(shè)置全局中斷標志位允許全局中斷#define cli() _asm_ _volatile_(“cli” :)使用中斷處理函數(shù),必須加入下面的包含語句:#include cli(); /清楚全局中斷標志位來禁止全局中斷上面的兩個函數(shù)實際上只生成一條匯編指令,不會增加用戶程序的負擔。 使用算術(shù)運算函數(shù)avr-libc提供了算術(shù)運算函數(shù),使用數(shù)學的數(shù)學運算函數(shù)請在程序的頭部加入包含語句:#include “math.h”為了使用數(shù)學運算函數(shù),需要鏈接庫libm.a,通常該庫是不鏈接到用戶的程序中的,為了鏈接庫,請在自己的GCC編譯選項的結(jié)尾加入-lm選項。即用PN打開makefile文件的第130行,MATH_LIB= lm 特殊功能寄存器的操作方式:在單片機系統(tǒng)中,經(jīng)常要對寄存器或者外圍設(shè)備進行操作,這些操作都是通過一組特殊功能寄存器的操作實現(xiàn)的。AVR單片機中,提供了兩種方法完成操作。一種是獨立的I/O地址空間,通過特殊的I/O操作指令,可以利用特殊的I/O指令操作部分或全部的I/O空間。另外一種是I/O地址也被映射到單片機的內(nèi)存空間中,因此也可以用通常的內(nèi)存操作指令完成I/O的控制,I/O地址加上0x20的偏移量就是I/O映射到內(nèi)存空間中的地址。AVR單片機支持這兩種操作,一般使用后者,而且這些操作已經(jīng)封裝好,不需要編程者干預(yù)。因此,編程者可以使用特殊函數(shù)如outb()操作I/O。#include outb(PORTA,0x33);或者直接向內(nèi)存中映射的地址寫數(shù)據(jù) PORTA=0x33;編譯器會選擇合適的指令生成操作代碼訪問I/O端口,與編程人員書寫的代碼無
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年版衛(wèi)生院防疫工作聘用合同書3篇
- 2024版設(shè)備維修與技術(shù)支持合同3篇
- 2025年度文化產(chǎn)業(yè)擔保合同會計處理及文化創(chuàng)意產(chǎn)業(yè)扶持3篇
- 年度汽車電子競爭策略分析報告
- 二零二五版集裝箱運輸保險代理服務(wù)合同范本3篇
- 2025年度互聯(lián)網(wǎng)醫(yī)療信息服務(wù)合同糾紛解決書模板4篇
- 貪吃蛇課程設(shè)計論文c
- 2025年酒店住宿服務(wù)銷售合同修訂與客戶滿意度提升3篇
- 二零二五年都市白領(lǐng)租房代理服務(wù)合同樣本3篇
- 2025年水電站經(jīng)營權(quán)承包與電力銷售收入分成合同2篇
- 企業(yè)會計準則、應(yīng)用指南及附錄2023年8月
- 諒解書(標準樣本)
- 2022年浙江省事業(yè)編制招聘考試《計算機專業(yè)基礎(chǔ)知識》真題試卷【1000題】
- 認養(yǎng)一頭牛IPO上市招股書
- GB/T 3767-2016聲學聲壓法測定噪聲源聲功率級和聲能量級反射面上方近似自由場的工程法
- GB/T 23574-2009金屬切削機床油霧濃度的測量方法
- 西班牙語構(gòu)詞.前后綴
- 動物生理學-全套課件(上)
- 河北省衡水市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細
- DB32-T 2665-2014機動車維修費用結(jié)算規(guī)范-(高清現(xiàn)行)
- 智能消防設(shè)備公司市場營銷方案
評論
0/150
提交評論