-【優(yōu)秀文檔資料】AVR學(xué)習(xí)板(提交版)(打印版)_第1頁
-【優(yōu)秀文檔資料】AVR學(xué)習(xí)板(提交版)(打印版)_第2頁
-【優(yōu)秀文檔資料】AVR學(xué)習(xí)板(提交版)(打印版)_第3頁
-【優(yōu)秀文檔資料】AVR學(xué)習(xí)板(提交版)(打印版)_第4頁
-【優(yōu)秀文檔資料】AVR學(xué)習(xí)板(提交版)(打印版)_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、【高手坐堂】系列之萬人學(xué)習(xí)51單片機(jī)!專家:老練 【老練淘寶店】 具體活動地址:hup:/bbseeworldcomcn/thread-66169-1j html【高手坐堂】系列之讓我們學(xué)學(xué)avr!專家:老練 【老練淘寶店】 具體活動地址:http:/bbs eeworld. com cn/thread-66668l一1 htmlavr講座:第一講:avr軟件、工具、ml6的基礎(chǔ)知識第一步安裝1ccavr第二步安裝stdio第三步 介紹avr c語言的語法1、一個簡單的avr程序ttinclude <ioml6v. h>#inelude <macros h>void m

2、ain()porta二oxof; /給pa 口賦值,讓pa 口低四位為1,高四位為0 wh i1e (1);本程序的作用是把pa 口的值設(shè)為oxof。a、程序中以#號開頭的語句#includeioml6v. h>是包含特定的頭文件,叫預(yù)處 理指令,ioml6v表示使用的是megal6, macros, h包含了必須的avr操作命令。b、c語言的程序是由函數(shù)構(gòu)成的,如上面的那個void maino ,前面的void表 明函數(shù)沒冇返回值。每一個c程序里而里冇但只冇一個maino函數(shù),系統(tǒng)啟動 后就從main ()開始運(yùn)行。c、函數(shù)內(nèi)部的內(nèi)容以大括號“ ”和擴(kuò)起來,每句語句用分號”結(jié)朿, 若分

3、號前面沒有內(nèi)容,編譯之后也無任何操作語句。d、c程序中可以加入一些說明文字,單行以雙斜扛“/”開始,如果是多行, 就用7*"開始,以“*/”結(jié)束,如/*注釋*/ oe、函數(shù)可以有參數(shù),一律放在小扌舌號內(nèi)。f、利用c語言可以輕松的對avr的設(shè)備組件進(jìn)行操作,如程序屮的porta二oxof; g>任何一個avr c程序都必須是一個無限循環(huán),否則程序會沿著程序存儲區(qū)一 直運(yùn)行,直至溢出程序存儲區(qū),程序從頭運(yùn)行。2、avr c語言的基本字符、標(biāo)識符和關(guān)鍵字avr c語言和普通c語言一樣,基本字符有阿拉伯?dāng)?shù)字09;大小寫拉丁字母a z和az; 些選定的可打印字符,如”! #¥%

4、八&* ()_ + = :,.;<>/? i n ;空格符、換行符和制表符這三種空白符起到分割成 分和編排格式的作用。對系統(tǒng)對象命名,稱為標(biāo)識符。標(biāo)識符由數(shù)字、字母、下劃線組合的字符串序列 構(gòu)成,字母區(qū)分大小寫。如卜都是合法的表示符:avr_10 porta csr ito tempi注意:不能以數(shù)字開頭的字符串做標(biāo)識符。比如labc是不合法的。c語言的合法標(biāo)識符有一部分被編譯器保留作為特殊用途,這樣的標(biāo)識符稱為關(guān) 鍵字。c語言的關(guān)鍵字有:(以字母先后為序)auto break case char const continue dcfauit do double else

5、enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while注意,原則上除關(guān)鍵字外,可以使用任何有效的標(biāo)識符。但實(shí)際上,根據(jù)系統(tǒng)不 同,有些特殊標(biāo)識符具有特殊含義,不應(yīng)被使用。在avr里,一些端口的名稱、 寄存器的名稱已經(jīng)被系統(tǒng)定義,最好不要改變其定義,如porta ddr a ti mask等。3、數(shù)據(jù)類型c語言嚴(yán)格規(guī)定數(shù)據(jù)類型,avr資源有限,如果數(shù)拯類型選用不好,資源很快就

6、會耗盡。如,盡量不要使用浮點(diǎn)類型的運(yùn)算,1.2*1. 2的浮點(diǎn)數(shù)運(yùn)算至少要占用 megal6的百分之十以上的空間。選擇數(shù)據(jù)類型時需要注意不要操作數(shù)據(jù)能表示的范圍,比如要表示60000,就不 能用char,必須用into整數(shù)類型的類型名前可加修飾符unsigned和signed,表示無符號數(shù)和有符號數(shù), 其屮unsigned可以省略,默認(rèn)表示無符號數(shù),一般來說,盡量使用無符號數(shù)可 以節(jié)約資源。以下三種為整數(shù)類型:1、整數(shù)類型:一般類型的整型int, 16位二進(jìn)制編碼,表示的數(shù)065536,及 2160有符號類型,signed int表示范圍一3276832767。2、長整型類型:長整型(long

7、 int)類型的二進(jìn)制編碼是32位。有符號的長整 型類型(long)表示范圍一231231 1;無符號的類型(unsigned long)的表 示范圍為0232 1。3、超長整數(shù)類型:超長整數(shù)類型(long long)的二進(jìn)制編碼是64位。冇符號 的氏整型類型(long)表示范圍一2632631;無符號的類型(unsigned long) 的表示范圍為02641。以下為實(shí)數(shù)類型(浮點(diǎn)數(shù)類型):1、單精度浮點(diǎn)數(shù)類型:float,用32位二進(jìn)制數(shù)表示。2、雙精度浮點(diǎn)數(shù)類型:long double,用64位二進(jìn)制數(shù)表示。 字符類型和字符串字符類型的類型名為char, 口前最常用的是ascii字符集,

8、其屮字符包擴(kuò)所有 的大小寫字母,數(shù)字,常用字符等共計128割字符。擴(kuò)展的asctt字符集包括 256個字符,字符類型占用一個字節(jié)。一些特殊的字符串的表示方法:以反斜扛加特定字符。如n '回車符;''雙引號;''單引號字符;' '反斜杠。無符號的字符類型:char表示范圍0255。有符號的字符類型:signed char表示范圍一128127。第四步avr的特性介紹高可靠性、功能強(qiáng)、高速度、低功耗和低價位,一直是衡量單片機(jī)性能的 重要指標(biāo),也是單片機(jī)占領(lǐng)場、賴以生存的必要條件。早期單片機(jī)主要由于工藝及設(shè)計水平不高、功耗高和抗干擾性能井等原因

9、, 所以采取穩(wěn)妥方案:即采用較高的分頻系數(shù)對時鐘分頻,使得指令周期長,執(zhí)行 速度慢。以后的cmos單片機(jī)雖然采用提高時鐘頻率和縮小分頻系數(shù)等措施,但 這種狀態(tài)并未被徹底改觀(51以及51兼容)。此間雖有某些精簡指令集單片機(jī) (risc)問世,但依然沿襲對時鐘分頻的作法。avr單片機(jī)的推出,徹底打破這種舊設(shè)計格局,廢除了機(jī)器周期,拋棄復(fù)雜 指令計算機(jī)(cisc)追求指令完備的做法;采用精簡指令集,以字作為指令長度單 位,將內(nèi)容豐富的操作數(shù)與操作碼安排在一字之屮(指令集屮占大多數(shù)的單周期 指令都是如此),取指周期短,又可預(yù)取指令,實(shí)現(xiàn)流水作業(yè),故可高速執(zhí)行指 令。當(dāng)然這種速度上的升躍,是以高可靠性

10、為其后盾的。avr單片機(jī)碩件結(jié)構(gòu)采取8位機(jī)與16位機(jī)的折屮策略,即采用局部寄存器 存堆(32個寄存器文件)和單-體高速輸入/輸出的方案(即輸入捕獲寄存器、輸出 比較匹配寄存器及相應(yīng)控制邏輯)。提高了指令執(zhí)行速度(imips/miiz),克服了瓶 頸現(xiàn)彖,增強(qiáng)了功能;同時乂減少了對外設(shè)管理的開銷,相對簡化了碩件結(jié)構(gòu), 降低了成本。故avr單片機(jī)在軟/硬件開銷、速度、性能和成本諸多方面取得了 優(yōu)化平衡,是高性價比的單片機(jī)。avr單片機(jī)內(nèi)嵌高質(zhì)量的flash程序存儲器,擦寫方便,支持isp和iap, 便于產(chǎn)品的調(diào)試、開發(fā)、生產(chǎn)、更新。內(nèi)嵌長壽命的eeprom可長期保存關(guān)鍵數(shù) 據(jù),避免斷電丟失。片內(nèi)大

11、容量的ram不僅能滿足一般場合的使用,同時也更有 效的支持使用高級語言開發(fā)系統(tǒng)程序,并可像mcs-51單片機(jī)那樣擴(kuò)展外部ramoavr單片機(jī)的i/o線全部帶可設(shè)置的上拉電阻、可單獨(dú)設(shè)定為輸入/輸出、 可設(shè)定(初始)高阻輸入、騾動能力強(qiáng)(可省去功率歟動器件)等特性,使的得 i/o 口資源靈活、功能強(qiáng)大、可充分利用。avr單片機(jī)片內(nèi)具備多利|獨(dú)立的吋鐘分頻器,分別供urat、i2c、spi使用。 其中與8/16位定時器配合的具有多達(dá)10位的預(yù)分頻器,可通過軟件設(shè)定分頻 系數(shù)提供多利稻次的定時時間。avr單片機(jī)獨(dú)有的“以定時器/計數(shù)器(單)雙 向計數(shù)形成三角波,再與輸出比較匹配寄存器配合,生成占空比

12、可變、頻率可變、 相位可變方波的設(shè)計方法(即脈寬調(diào)制輸出pwm)”更是令人耳目一新。增強(qiáng)性的高速同/異步串口,具有硬件產(chǎn)生校驗(yàn)碼、硬件檢測和校驗(yàn)偵錯、 兩級接收緩沖、波特率口動調(diào)整定位(接收時)、屏蔽數(shù)據(jù)幀等功能,提高了通 信的??啃?,方便程序編寫,更便于組成分布式網(wǎng)絡(luò)和實(shí)現(xiàn)多機(jī)通信系統(tǒng)的復(fù)雜 應(yīng)用,串口功能大大超過mcs-51/96單片機(jī)的串口,加之a(chǎn)vr單片機(jī)高速,屮斷 服務(wù)時間短,故可實(shí)現(xiàn)高波特率通訊。面向字節(jié)的高速碩件串行接口 twi、spio twi與i2c接口兼容,具備ack 信號硬件發(fā)送與識別、地址識別、總線仲裁等功能,能實(shí)現(xiàn)主/從機(jī)的收/發(fā)全部 4種組合的多機(jī)通信。sp1支持主

13、/從機(jī)等4種組合的多機(jī)通信。avr單片機(jī)有口動上電復(fù)位電路、獨(dú)立的看門狗電路、低電壓檢測電路b0d, 多個復(fù)位源(自動上下電復(fù)位、外部復(fù)位、看門狗復(fù)位、b0d復(fù)位),可設(shè)置的啟 動后延時運(yùn)行程序,増強(qiáng)了嵌入式系統(tǒng)的可靠性。avr單片機(jī)具有多種省電休眠模式,且可寬電壓運(yùn)行(5-2.7v),抗干擾能 力強(qiáng),可降低一般8位機(jī)小的軟件抗干擾設(shè)計工作量和硬件的使用量。avr單片機(jī)技術(shù)體現(xiàn)了單片機(jī)集多種器件(包括flash程序存儲器、看門狗、 eepr0m、同/異步串行口、twi、spi、a/d模數(shù)轉(zhuǎn)換器、定時器/計數(shù)器等)和多 種功能(增強(qiáng)可靠性的復(fù)位系統(tǒng)、降低功耗抗干擾的休眠模式、詁種多門類全的 中斷

14、系統(tǒng)、具輸入捕獲和比較匹配輸出等多樣化功能的定時器/計數(shù)器、具替換 功能的i/o端口)于一身,充分體現(xiàn)了單片機(jī)技術(shù)的從“片自為戰(zhàn)”向“片 上系統(tǒng)soc”過渡的發(fā)展方向。綜上所述,avr單片機(jī)博采眾長,又具獨(dú)特技術(shù),不愧為8位機(jī)中的佼佼者。第二講m16i0 口的使用方法我們使用的是mega 16芯片,在使用之前,我們首先要做的就是將最小系統(tǒng)構(gòu)建好。 復(fù)位電路,由于mega 16是低電平復(fù)位。如下圖所示.2kk二二-ltas1 ilsss astoin在這個電路里而,當(dāng)mega 16單片機(jī)進(jìn)行丄作的時候,我們吋以使用按鍵給單片機(jī)系統(tǒng)進(jìn)行 手動復(fù)位。晶振電路:在這個電路里面,我們采用了,7.3728

15、mhz的晶振,方便我們進(jìn)行串口實(shí)驗(yàn)。 模擬電壓和參考電壓:這個地方在模擬電壓和數(shù)字電壓之間我們使用一個電感隔離一下。isp下載電路:mosi對應(yīng)的是pb5sck 對應(yīng)的是pb7miso 對應(yīng)的是pb6jtag仿真電路:j2tck1234567s910tdorvrrtx-vccrtdijtag這里:tck對應(yīng)的是pc2tdo對應(yīng)的是pc4tms對應(yīng)的是pc3tdi對應(yīng)的是pc5按照這個進(jìn)行連接,我們就可以讓mega 16進(jìn)行工作了。下面我們可以結(jié)合iccavr軟件進(jìn)行學(xué)習(xí)io的使用了 我們先看看硬件電路上面如何連接:11:151;-14;1:;£i;£:;£:一5g

16、£二硬件對應(yīng)的io接口ledopa6led1pa7pc0pc1led2led3led4pc6led5pc7現(xiàn)在我們先熟悉一 f iccavr軟件吧,安裝好以后并crack以后,我們對以看見如卜的圖標(biāo):icc avr我們雙擊便叮以打開界面,如果看見 !agecraft ide for iccave (professiomal),這個樣了就表示crack成功,如果file edit search vi ew froject studi o+ rcs tools沒有成功,請重新crack 下。froject :打開軟件后,我們先建立一個工程,-new,然示我們可以根據(jù)需要進(jìn)行設(shè)置路proj

17、ect :選擇器件。如下圖所示:徑和項(xiàng)目名稱。然后在optioncoapiler optionscompiler optionspaths| compiler target | config salvo device con figuration| custommemory sizes (bytes)program m emory同5ltrimx mpmnm廠pri廠apaths | compiler target | config salvo |現(xiàn)在一個工程就建立好了,然后我們就要進(jìn)行mega 16單片機(jī)設(shè)置了。選擇界面上的.,這個操作,我們就可以看見一個配逍界面。port adirecti

18、onvaluechangeport bdirecti onvaluechangeorr廠廠 1it廠廠 2rr廠廠 3rr廠廠 4rr廠廠 5rr廠廠 6rr廠廠 7t r廠選擇好h標(biāo)cpu和晶振以后,我們就可以選擇ports 了。點(diǎn)擊ports,然后我們看到如下 的界面:iccavk application builder 116cpu ports |timero | timerl | timer2 | uart | spi | analog |7 6 5 4 3 2 1 0 rrrrrrrrrrrrrrrr 廠廠廠廠廠廠廠廠 廠廠廠廠廠廠廠廠port cdirectionvaluechan

19、geok ioptionspreviewcancel7 6 5 4 3 2 1 0 rrrrrrrrrrrrrrrr 廠廠廠廠廠廠廠廠 廠廠廠廠廠廠廠廠.7 6 5 4 3 2 1 0direction fifififififififivalue廠廠廠廠廠廠廠廠change 廠廠廠廠廠廠廠廠nght click on a alue" bit to define signal nameport adirectionvaluechange因?yàn)槲覀兪褂玫膇o 口為pa6和pa7,那么,我們婆做如下的設(shè)置7 6 5 4 3 2 1 0 ro ro rtfirtfirtri rrn廠廠廠廠廠廠

20、 廠廠廠廠廠廠廠廠i-port b在port a 口上面設(shè)置io輸岀,并且是高電平輸岀。 我們現(xiàn)在就可以點(diǎn)擊ok to此吋界而上出現(xiàn)如下的程序:/icc-avr application builder : 2008-10-9 8:12:38/ target : m16/ crystal: 7.3728mhz/作者:南京華岳電子練祥華/功能:學(xué)習(xí)i。的程序#inelude <ioml6v.h>#inclucie <macros h>void port_init(void)porta =oxco;ddra =oxco;portb =0x00;ddrb =0x00;portc

21、 =0x00; /ml03 output onlyddrc =0x00;portd =0x00;ddrd =0x00;/call this routine to initialize all peripheralsvoid init_devices(void)/stop errant interrupts until set upcli(); /disable all interruptspor;mcucr = 0x00;gicr = 0x00;timsk = 0x00; /timer interrupt sourcessei (); /re-enable interrupts/all per

22、ipherals are now initialized/void main(void)init_devices();/insert your functional code here-然后我們進(jìn)行手工添加部分程序,將這個程序編寫完整就可以了,具體程序如/icc-avr application builder : 2008-10-9 8:12:38/ target : ml6/ crystal: 7.3728mhz/作者:南京華岳電子練祥華/功能:學(xué)習(xí)i。的程序#include <ioml6vh>#include <macros.h> void delay () /no

23、e±x63iddusnigned int i;for (i = 0;i<50000;i + +) void por(void)porta =oxco;ddra =oxco;portb =0x00;ddrb =0x00;portc =0x00; /ml03 output onlyddrc =0x00;portd =0x00;ddrd =0x00;/call this routine to initialize all peripherals void init_devices(void)/stop errant interrupts until set upcli(); /dis

24、able all interruptsport_init();mcucr = 0x00;gicr = 0x00;timsk = 0x00; /timer interrupt sourcessei (); /re-enable interrupts/all peripherals are now initialized/void main(void)init_devices();/insert your functio2丄 code here .while (1)porta = oxco;delay();porta = 0x80;delay ();porta = 0x00;delay();現(xiàn)在我

25、們編好程序了,然后添加到項(xiàng)冃中去,進(jìn)行編譯,點(diǎn)擊這個圖標(biāo)就町以進(jìn)行 直接編譯了。s -ef t16led& files: © mled.c:o headersdocuments下面,我們進(jìn)行在avr stdio中使用軟件仿真,可以看出io的變化。先點(diǎn)擊avrstdio的圖標(biāo)avr studio 4進(jìn)行啟動軟件。出現(xiàn)如卜界面:i 園! | trace disabledugin stk500我們在open中打開剛才所建立的文件,如下圖:選擇.cof文件打開即可,此時,我們看到打開后的界面。select debug plat£orm and devicedebug pla

26、tform:jtagice mkllice40ice50jtag iceavr simulatorice200at90s8515at90s8535<»jatmegalo3atmegal28atmegal61:iiiatmegal62atmegal631atmegal65iatmegal68v/jj1atmegal69atmega32)evi ce:廠 open plat£orm optio« bsick| t >>|finishcancel ver 4. 10.3!然后點(diǎn)擊finish按鍵,然后我們可以選擇如下圖的io設(shè)置,這樣我們就能看清楚io

27、的變化 toayestudi o 一 d:testal6bbaled. c"el file project edit vievv tools debug window hep舟d s 0 0 x電息尋乞空;何 % % % 辜拿 i is i si ii廚匠1口£圏筑丄不丨師v/orksoace .xor ico ad_r rtecomcpu±j1/void main(void)<=> init_devices();/insert your functional code here. while(1)-a -a -bs-eefr0mexternal.ih

28、terrupt jtagporta m porta p ddra 是 pina portbportc portd spi timer.coiqtter.o timer cower 10x00dxoodxoo porta =oxcodelay () porta =*0x80delay ()porta =0x00delay ()2jproject ql/o tfo|0 d:tqstml6mmvnled.cloaded plugin stk500i valuetypelocation并且,我們點(diǎn)擊,用來設(shè)置斷點(diǎn),以方便觀測io變化。 現(xiàn)在我們運(yùn)行一下程序,點(diǎn)擊劃,就會發(fā)現(xiàn)如下圖所示:/;orkspa

29、ce : xnames-s-l±ra-e-s-i/o atmega16q ad.converterq aitawg.comparator=)bootlbad=| cpud eeprom external.iirterrupt 韻 jtag老 portak m porta卜& ddraim portbm portcm portdla spi® timer_couhter_o© timer.couhterjoxcooxcooxcoi/void main(void)init_devices():/insert your functional code here.

30、 while(1) porta = oxco;u> delay(): porta = 0x80; delay (): porta = 0x00; delay ();繼續(xù)點(diǎn)擊全速運(yùn)行圖標(biāo),或者按鍵f5,就會出現(xiàn)如下:vorkspace 三n xname| y. bitsi/o atmega163e-:±1-e1-±1-:±1-e1-b-:q ad_ccinverterq a1iawg.c0mfarat0rb00t.ij3adcpueefromexter1ialjnterruft是 portab ddram pinaportbportcportd韻spi13 j

31、tag是 portaeeee宀0x80oxcooxco此時io上血的一個led應(yīng)該會被點(diǎn)、兄。我們繼續(xù)按f5,void main(void)init_devices():/insert your functional while(1)porta = oxco; delay ();porta = 0x80:u> delay (); porta = 0x00; delay ();就會出現(xiàn)如下:name白.i/o atmega16s-s-el-s-s-.s-.s-曰£> ad_cobvertero anad3g.c0mparat0r (=)boot.waiicpu(=)eepr

32、om external.!町erruptrran a o d i g t f d p jtaforo o o o c 8 xxx o o ojul:e.portbm portcm portd 韻spi® timer_counter_o © timer.counter.l/ivoid main(void)initdevices ();/insert your functional cod« while(1)porta = oxco; delay ();porta = 0x80; delay ():porta = 0x00;u> delay ():.晝愿“o j

33、b info | _ i i". =1 d*tpcbm1 fimmmld r 此時兩個燈都被點(diǎn)亮了,然后取消斷點(diǎn),全速運(yùn)行就可以了。第三講外部屮斷的使用我們先看看mega16單片機(jī)的外部中斷的引腳和接口。如下圖所示:txd14rxd15key116nkey217qkey318key41|9key52071pdo (rxd)pd1 (txd)pd2 (into)pd3 (inti)pd4 (oc1b)pd5 (oc1a)pd6 (icp)(i我們可以看到pd2是接在外部屮斷()上而的,現(xiàn)在我們在這個地方接一個按鍵,用來表示進(jìn)入外部中斷,同時點(diǎn)亮ledo, led的電路圖如下所示。qi1

34、3l-i.l-i.3e4l1ll999iiiiii1ii1ii1t.-52二二硬件對應(yīng)的io接口ledopa6led1pa7text address (word)0x2apaths i compiler targetdevice configuration (atmega16avr studio simulator iodata address byterf17廠0x60use long ci.ll/jmp enhanced core 廠10 regs offset internal sramuse rampz/elpmextended 10boot loader optionsprogram

35、 typeapplicati onc boot loaderboot size| noneadvancedreturn stack sizenon-default startupunused rom fill patternother options: |廠 don0tuser20.r23led2pcoled3pc1led4pc6pc7led5在這里我們只要對key1進(jìn)行編程,然后使用按鍵操作,在stdio里面設(shè)置斷點(diǎn)就可以了, 在程序里面就能看到中斷的情況了。還是老規(guī)矩,打開iccavr,我們先建立項(xiàng)口,選擇芯片, 同時選擇目標(biāo)芯片,如圖所示:conpiler opti onsprintf

36、versionq small (int only, no modifier) long (+ long, and modifiers) float (+floal needs > 8k)additional lib.廠 strings in flash onlynote on external ramset as default i load defaultinternal sramhelp設(shè)置晶振,如卜圖所示。iccavb application builder 116cpu | ports | timero timerl | timer21 uart | spi | analog |

37、target cpu m16廠 pll enable廠 xdiv enable .轡i speed (mhz)(7.37283type a custom valuexdiv frequency|57153hz jwatchdog timer廠 enableprescale cycles “6k廠 interrupt enablecommentinew design-external interruptstrigger onreeprom廠 ready interruptok | options |previewcancel i此時,我們設(shè)置portd2為內(nèi)部上拉。點(diǎn)擊ports按鍵如下設(shè)置:i

38、ccavk application builder 116cpu ports | timero | timerl | timer2 | uart | spi | analog |7 6 5 4 3 2 1 0directio n ff(ofttffftrfffvalue 廠rr廠廠廠廠廠廠change 廠廠廠廠廠廠廠廠port bdirectionvaluechangeorr廠廠1rl廠廠2rl廠廠3ii廠廠4(1廠廠5rt廠廠6fl廠廠7ft廠廠-port cdirectio nvaluechange7 6 5 4 3 2 1 0rrrrrrrirrrirtrt廠廠廠廠廠廠廠廠廠廠廠廠廠廠廠

39、廠-port ddirectionvaluechange7 6 5 4 3 2 1 0ifirrrrtrrrirtri廠廠廠廠廠ff廠廠廠廠廠廠廠廠廠廠right click on a "value" bit to define signal nameoptionspreviewcancel然后點(diǎn)擊ok出現(xiàn)如下程序:/icc-avr application builder : 2008-10-10 10:14:11/ target : m16/ crystal: 7.3728mhz/作者:南京華岳電子練祥華/功能:學(xué)習(xí)外部中斷0的程序#include <ioml6vh

40、>#include <macrosh>void port_init(void)porta = 0x40;ddra = 0x40;portb = 0x00;ddrb = 0x00;portc = 0x00; /ml03 output onlyddrc = 0x00;portd = 0x04;ddrd = 0x00;#pragma interrupt_handler int0_isr:2void int0_isr (void)/external interupt on into/call this routine to initialize all peripheralsvoid

41、 init_devices(void)/stop errant interrupts until set upcli(); /disable all interruptsport_init();mcucr = 0x00;gicr = 0x40;timsk = 0x00; /timer interrupt sourcessei (); /re-enable interrupts/all peripherals are now initialized現(xiàn)在我們可以進(jìn)行修改程序,在屮斷程序里面,我們可以修改成小斷-次,給led0取反一 次。/icc-avr application builder :

42、2008-10-10 10:22:56/ target : ml6/ crystal: 7.3728mhz/作者:南京華岳電子練祥華/功能:學(xué)習(xí)外部中斷0的程序#include <ioml6vh>#include <macrosh>#define led_com porta a= (1 << pa6)void port_init (void)porta = 0x40;ddra = 0x40;portb = 0x00;ddrb = 0x00;portc = 0x00; /ml03 output onlyddrc = 0x00;portd = 0x04;ddrd

43、 = 0x00;#pragma interrupt_handler int0_isr:2void int0_isr(void)led_com;/call this routine to initialize all peripherals void init_devices(void)/stop errant interrupts until set upcli(); /disable all interruptsport_init();mcucr = 0x00;gicr = 0x40;timsk = 0x00; /timer interrupt sourcessei (); /re-enab

44、le interrupts/all peripherals are now initializedvoid main()init_devices();while(1)編譯示,在avrstdio屮使用軟件仿真可以看到如下結(jié)果: 先設(shè)置斷點(diǎn)雜pragma interrupthandler int0_isr:2void int0_isr(void) _ o led_com;/call this routine to initialize all pei void init_devices(void) _/stop errant interrupts until set up將portd 口如卜設(shè)置:| i i % rj m portannnii ii ii innnii ii ii 1nnnii ii ii 1404040m porta ddra+j m portb +j m portc 二 | 罡 portdgportdox.b ddrdox.mpindox.+j 盤 watchdog點(diǎn)擊全速運(yùn)行可以看見如下2個結(jié)果:+j 曰 boot.wad£ m portam portaox.ddraox.mfinaox.+j m portb+j 老 portc£ s portdm fortdox.ddrdox.mpindox.+盤 watchdog亠v 0x

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論