




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、本章的實(shí)戰(zhàn)練習(xí)將以一個(gè)最簡(jiǎn)單的設(shè)計(jì)為例,指導(dǎo)讀者完成以下的實(shí)踐:如何使用 AVR 匯編語言進(jìn)行系統(tǒng)程序設(shè)計(jì)與系統(tǒng)實(shí)現(xiàn)。初步掌握使用 AVR 免費(fèi)開發(fā)源程序的編寫,以及程序的AVR Studio。在該開發(fā)模擬調(diào)試等開發(fā)的過程。的支持下,完成匯編掌握 AVR-51 多功能實(shí)驗(yàn)板使用方法。完成實(shí)現(xiàn)硬件系統(tǒng)電路的連接,如何使用 ISP線配置 AVR 的熔絲位,以及運(yùn)行代碼。初步掌握 CVAVR 高級(jí) C 語言開發(fā)的使用。作為動(dòng)手實(shí)踐的一個(gè)起步,學(xué)習(xí)者通過該示例的完成,可以對(duì)使用匯編程序語言開發(fā)以及 C 語言開發(fā)單片機(jī)本的了解。系統(tǒng)的過程與特點(diǎn),以及相關(guān)的硬件和工具有一個(gè)基5.1 秒節(jié)拍顯示器系統(tǒng)的設(shè)計(jì)
2、5.1.1 秒節(jié)拍顯示器硬件設(shè)計(jì)在第 2 章的 2.6.6 中,給出了一個(gè)使用 ATmega16的 AVR 簡(jiǎn)單的系統(tǒng)。這個(gè)系統(tǒng)就是一個(gè)簡(jiǎn)易的“秒節(jié)拍顯示器”。這個(gè)秒節(jié)拍顯示器的功能非常簡(jiǎn)單,就是用 AVR 單片機(jī)控制一個(gè) LED 發(fā)光二極管,讓它亮一秒鐘,暗一秒種,不間斷的閃爍,顯示器。圖 5-1 是它的電原理圖。一個(gè)簡(jiǎn)單的秒節(jié)拍圖 5-1 簡(jiǎn)單的秒節(jié)拍顯示器電原理圖華東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮5-1秒節(jié)拍顯示器的硬件電路組成非常簡(jiǎn)單,圖中使用一個(gè) AVR和 LED 發(fā)光二極管作為秒信號(hào)的顯示。當(dāng) ATmega16 的I/O 引腳 PC0 口輸出為“0”時(shí),LED 導(dǎo)通發(fā)光;輸出為“
3、1”時(shí),LED 截止熄滅。560 歐姆電阻起保護(hù)限流作用,控制 LED 的導(dǎo)通電流在 510mA。適當(dāng)調(diào)整 R3 的阻值,可以調(diào)節(jié) LED 的亮度,并限制流過 LED 和 PC0 口的電流,保護(hù)其不被大電流燒毀。在虛線框中,是最小系統(tǒng)的。其中 R1 為 RESET 腳的上拉電阻,保證了 RESET 腳可靠的。系統(tǒng)采用外接 4M 晶體和的振蕩電路組成時(shí)鐘電路,產(chǎn)生 4M 頻率的脈沖作為系統(tǒng)的時(shí)鐘信號(hào),此時(shí)單條指令的執(zhí)行時(shí)間為 0.25us。電容 C1 和 C2 應(yīng)同具體使用的石英晶體配合(參考具體生產(chǎn)廠的說明),一般在 20p-30p 之間,改變 C1、C2 的值,可以對(duì) 4M 頻率進(jìn)行微調(diào)。R
4、2 與晶體并連,其作用是穩(wěn)定晶體的阻抗,提高振蕩電路的穩(wěn)定性。圖中的 ISP 編程口的 2、3、4、5 腳同SPI 接口的 MOSI(PB5)、MIS6)、SCK(PB7)和 RESET 引腳連接。當(dāng)需要改動(dòng) AVR 的熔絲位配置,或?qū)⒕幾g好的運(yùn)行代碼燒入的 AVR 的 FlashROM 中時(shí),就不需要將從 PCB 板上取下了。只要將一根簡(jiǎn)單的編程線插在該編程口上,利用 PC 機(jī)就可以方便的實(shí)現(xiàn)上面的操作了。如 2.6.5 中所介紹,當(dāng) PC 機(jī)對(duì) AVR 編程時(shí),需要先將 SCK 和 RESET 引腳拉低,使 AVR進(jìn)入 SPI 編程狀態(tài),然后通過 SPI 口進(jìn)行操作。所以,在設(shè)計(jì) AVR
5、系統(tǒng)硬件時(shí),如考慮使用 SPI 口實(shí)現(xiàn)ISP 的功能,圖中的 R1 電阻不可省略。此時(shí) R1 起到了作用,正是有了 R1,才能使用戶在外部能夠?qū)?RESET 腳施加低電平(0 伏)。當(dāng)編程完成后,外部一旦掉 RESET,該引腳通過 R1 又被拉成,AVR 就直接進(jìn)入了正常運(yùn)行工作狀態(tài)。R1 的阻值在 5k-10k 之間,太大和太小都不合適。由于 ATmega16集成了 1/2/4/8M 四種頻率的 RC 振蕩源,因此圖 5-1 還可以簡(jiǎn)化??梢允褂闷瑑?nèi) 4M 的 RC 振蕩電路作為系統(tǒng)時(shí)鐘源。這樣就可以省掉 C1、C1、R2 和晶體四個(gè)元件,使 AVR 的最小系統(tǒng)更加簡(jiǎn)單,只需要一個(gè) R1 就
6、可以了。5.1.2 秒節(jié)拍顯示器設(shè)計(jì)思路圖 5-2 為秒節(jié)拍顯示器的系統(tǒng)流程圖??梢钥闯?,秒節(jié)拍顯示器的設(shè)計(jì)重點(diǎn)是一個(gè)一秒鐘的延時(shí)序。系統(tǒng)程序每隔一秒(調(diào)用一秒延時(shí)序)將 PC0 口的輸出電平取反,同時(shí)也控制 LED 的亮與暗。作為一個(gè)簡(jiǎn)單的入門例子,在這里給出一個(gè)序,每調(diào)采用匯編語言設(shè)計(jì)編寫的通用延時(shí)用一次該序,其運(yùn)行的時(shí)間為 1 秒鐘,每隔 1 秒PC0 口電輸出向鐘,控制 PC0 口的輸出邏輯取反。這樣 LED 就會(huì)亮 1s,滅 1s,實(shí)現(xiàn)了秒節(jié)拍的顯示。實(shí)際上,在實(shí)際應(yīng)用中盡量不要使用的方式進(jìn)行延時(shí),因?yàn)?CPU 執(zhí)行大量的無具體工作的指令,這樣會(huì)減低 CPU 的效率。正確的方法是使用
7、 AVR 的定時(shí)器來產(chǎn)生延時(shí),這些將在后續(xù)的章節(jié)中介紹。圖 5-2 秒節(jié)拍系統(tǒng)流程圖5-2華東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮執(zhí)行秒延時(shí)程序系統(tǒng)初始化需要注意的是,用戶首先必須正確的設(shè)置 ATmega16 的 4 個(gè)熔絲配置位 CKSEL3.0,使它們的組合設(shè)置與你實(shí)際使用的系統(tǒng)時(shí)鐘類型相配合。5.1.3 秒節(jié)拍顯示器匯編源程序代碼下面是秒節(jié)拍發(fā)生器的匯編源程序。程序中先初始設(shè)置堆棧指針寄存器 SP 的值,然后將 PC 口定義為輸出。其主程序部分為一個(gè) LOOP 無限(死)循環(huán):先設(shè)置 PC0 口輸出“0”,點(diǎn)亮 LED;調(diào)用延時(shí)序 delay 延時(shí)一秒;再設(shè)置 PC0 口輸出“1”,使 LE
8、D 熄滅;然后又一次調(diào)用延時(shí)序 delay 延時(shí)一秒;最后轉(zhuǎn)入下一次的循環(huán)。因此,程序的運(yùn)行效果是每隔一秒鐘后,控制 PC 口的第 0 位輸出“1”或“0”,使 LED 亮一秒鐘,暗一秒鐘,形成秒節(jié)拍顯示指示。;AVR匯編程序?qū)嵗?Demo_5_1.asm.include m16def.inc.def temp1=r20;包括器件配置定義文件,不能缺少;定義寄存器R20用臨時(shí)變量名temp1代表.$0000;上電復(fù)位啟始地址;轉(zhuǎn)上電復(fù)位后的初始化程序執(zhí)行;中斷向量區(qū);跳過中斷向量區(qū)rjmp reset.$002Areset:ldi r16,high(RAMEND) out sph,r16ldi
9、 r16,low(RAMEND) out spl,r16ser temp1out ddrc,temp1 out portc,temp1 ldi r16,197;取RAM最高地址的字節(jié);放入SP的;取RAM最低地址的低位字節(jié);放入SP的低位,SP中的值見器件配置文件“m16def.inc”;置temp1(R20)為0XFF;定義PC口為輸出;PC口輸出全“1”,LED不亮;設(shè)置一秒延時(shí)參數(shù);值PORTC.0位為“0”,LED亮loop:cortc,0rcall delay;調(diào)用延時(shí)序,延時(shí)一秒sortc,0;值PORTC.0位為“1”,LED滅rcall delay rjmp loop序 pus
10、h r16 push r16push r16;調(diào)用延時(shí)序,延時(shí)一秒;循環(huán)跳轉(zhuǎn)到loop繼續(xù)執(zhí)行;通用延時(shí) delay: del1: del2:del3:;壓棧(2t);壓棧(2t);壓棧(2t);r16 = r16 - 1,(1t);不為0跳轉(zhuǎn)移,為0順序執(zhí)行(2t/1t);出棧(2t);r16 = r16 - 1,(1t);不為0跳轉(zhuǎn)移,為0順序執(zhí)行(2t/1t);出棧(2t);r16 = r16 - 1,(1t);不為0跳轉(zhuǎn)移,為0順序執(zhí)行(2t/1t);出棧(2t)序返回(4t)decr16brne del3popdecr16r16brne del2popdecr16r16brne de
11、l1popretr16華東師范大學(xué)電子科學(xué)技術(shù)系 馬 潮5-35.1.4 通用延時(shí)在上面程序中,序分析使用了一個(gè)通用延時(shí)的序來實(shí)現(xiàn)延時(shí)。當(dāng)然采用延時(shí)并不能得到準(zhǔn)確的定時(shí),要產(chǎn)確的定時(shí)一般應(yīng)采用定時(shí)器。在本例中使用延時(shí)的主要目的是能夠讓初學(xué)者掌握使用匯編語言開發(fā)系統(tǒng)程序的過程,了解和使用AVR Studio集成開發(fā)環(huán)境編寫、編譯以及調(diào)試系統(tǒng)程序。同時(shí)也可以體會(huì)編寫一個(gè)好的、優(yōu)化的匯編程序也需要相當(dāng)?shù)脑O(shè)計(jì)基礎(chǔ)和能力。本例中的通用延時(shí)序僅使用了一個(gè)寄存器R16,采用二次嵌套循環(huán),并多次利用堆棧交換數(shù)據(jù)。其程序代碼短,但能夠產(chǎn)生長(zhǎng)達(dá)2秒的延時(shí)(4M系統(tǒng))。參照該采用三次嵌套循如,能夠產(chǎn)生140秒的延時(shí)
12、(使用4MHz晶振)。而采用一般的延時(shí)序的方法,序的編寫方法,在相同的代碼長(zhǎng)度時(shí),是不能達(dá)到如此長(zhǎng)的延時(shí),而且還要占用的寄存器。在序代碼中,給出了每條指令執(zhí)行所需要的機(jī)器周期數(shù),在使用4MHz晶振時(shí),AVR的每個(gè)機(jī)器周期t = 0.25us。通過分析程序的執(zhí)行,可以得到調(diào)用該二次嵌套循環(huán)行所需要的總的機(jī)器周期數(shù)T為:序執(zhí)xxiT 11 7x 1 (7i 1) (3 j 1)i1i1 j 1式中x的值為R16的初始設(shè)置值,第一項(xiàng)數(shù)值11為調(diào)用序指令rcall、第一條壓棧指令push、最后一條出棧指令pop和序返回指令ret需要的機(jī)器周期數(shù)(3+2+2+4)。7x-1為del1循環(huán)(循環(huán)指令)需要
13、的機(jī)器周期數(shù)。后面兩項(xiàng)分別為內(nèi)循環(huán)del2和del3需要的機(jī)器周期數(shù)。總的延時(shí)時(shí)間:Delay_Time = T * 0.25us。表5.1給出了幾個(gè)典型的延時(shí)時(shí)間。表5.1 通用延時(shí)序控制常數(shù)與延時(shí)周期和時(shí)間5-4華東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮使用4MHz晶振,t = 0.25us在R16中的控制常數(shù) x = 1 255,0,延時(shí)時(shí)間范圍 6.25us 2.17sxTTimexTTime1256.25us517855019.64ms25213.0us528300220.75ms39423.5us7120236050.59ms415438.5us90401860100.465ms5235
14、58.75us114800404200.101ms634085.0us1311202590300.648ms7472118us1441587754396.939ms8634158.5us1562009290502.323ms9829207.25us1662412820603.205ms101060265us1752819260704.815ms131999500us1833216784804.196ms173937984us1913650020912.505ms1845641.14ms1973999307999.827ms2060101.5ms24980006292.000157s227732
15、1.933ms2387042.176ms0(256)86860902.1715225s26121003.025ms29162794.07ms31195404.885ms32213225.33ms40396109.9ms414244510.61ms465866014.67ms5.2 AVR Studio匯編語言集成開發(fā)環(huán)境使用AVR Studio 集成開發(fā)環(huán)境(IDE)是 ATMEL 公司推出的,專門用于開發(fā)該公司 AVR 單片機(jī)的開發(fā),它是一個(gè)完全免費(fèi)的,基于 AVR 匯編語言的集成開發(fā)環(huán)境。AVR Studio包括了 AVR Assembler 編譯器;AVR Studio模擬調(diào)試功能;AV
16、R Prog 串行和 JTGA功能;JTGA ICE還需要該支持的仿真調(diào)試等功能。要使用該的功能和仿真調(diào)試功能,的仿真硬件設(shè)備,如 JTGA ICE 仿真器等。5.2.1 AVR Studio的安裝和其它輔助工具的安裝在本書附帶的光盤中,有 AVR、-AVR(Demo)、CVAVR(Demo)的系統(tǒng)安裝。用戶也可以通過ernet 到 ATMEL(ht)的版的AVR Studio,以及其它相關(guān)的工具安裝AVR Studio4.13。本書中使用的是 AVR Studio4.13 版(2007 年 2 月)。AVR Studio4.12的安裝非常簡(jiǎn)單,用戶只要執(zhí)行從網(wǎng)上的aStudio4b528.e
17、xe文件,就可以按照提示進(jìn)行AVR Studio系統(tǒng)的安裝了。按照安裝過程中的提示,集成開發(fā)環(huán)境的系統(tǒng)文件安裝在目錄C:AtmelAVR Tools下面。AVR Studio安裝-AVR開發(fā)-AVR是采用結(jié)構(gòu)型BASIC作為程序設(shè)計(jì)語言,簡(jiǎn)單易學(xué),尤其適合中學(xué)生、大中專學(xué)生學(xué)習(xí)使用,以及開發(fā)一些相對(duì)簡(jiǎn)單的系統(tǒng)使用。用戶可以到MCS Electronics的http試用版(僅 2KB執(zhí)行代碼限制,其它功能可正常使用)。由于型簡(jiǎn)易-AVR中的ISP編程功能界面非常友好和直觀,它能支持使用STK200/STK300線,通過PC的接口,對(duì)AVR燒入到AVR的熔絲位配置編程,或?qū)⒁粋€(gè)生成的AVR執(zhí)行代碼
18、程序(HEX/BIN格式)的程序器中。同時(shí),使用該的ISP功能對(duì)AVR熔絲進(jìn)行配置時(shí)給出了比較清楚的提示,用戶不容易出錯(cuò),所以本書中采用-AVR中的ISP功能對(duì)AVR的熔絲位編程。系統(tǒng)工程文件與AVR匯編源程序文件的建立、編譯建立一個(gè)新的工程項(xiàng)目管理project文件AVR Studio采用一個(gè)project工程項(xiàng)目管理文件(.APR)保存、管理用戶在系統(tǒng)開發(fā)中所使用和生成的各種文件,以及保存用戶的開發(fā)環(huán)境配置參數(shù)和設(shè)置情況等。新建工程項(xiàng)目。AVR Studio啟動(dòng)后,你將看到一個(gè)歡迎框?,F(xiàn)在可以創(chuàng)建一個(gè)新的項(xiàng)目,點(diǎn)擊“New Project”按鈕。另外在主窗口中選擇 ProiectProje
19、ctWizard,也會(huì)出現(xiàn)圖5-3所示的歡迎框。華東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮5-5使用 Windows NT/2000/XP 的用戶請(qǐng)注意,安裝 AVR Studio 時(shí),必須使用管理員 的(administrator)權(quán)限登陸,這是 Windows 系統(tǒng)限定只有管理員才可以安裝新器件。圖5-3 啟動(dòng)后的歡迎框進(jìn)入新工程建立窗口(圖5-4),配置項(xiàng)目參數(shù)。這個(gè)步驟包括選擇你要?jiǎng)?chuàng)建什么類型的項(xiàng)目,設(shè)定名稱以及存放的路徑等。這個(gè)過程包括五個(gè)步驟:在框左邊選中Atmel AVR Assembler,表明你要?jiǎng)?chuàng)建一個(gè)AVR匯編工程項(xiàng)目。輸入項(xiàng)目的名稱。項(xiàng)目的名稱由用戶定義,在例子中用了“dem
20、o_5_1”。demo_5_1作為新建的工程項(xiàng)目文件名,其擴(kuò)展名.APR可缺省,默認(rèn)為.APR。由AVR Studio自動(dòng)產(chǎn)生一個(gè)空的匯編文件,在例子中其默認(rèn)的擴(kuò)展名為.asm。用了“demo_5_1”。選擇新建項(xiàng)目存放的路徑,例子中存放在“F:1015demo5-1”下。檢查所有的選項(xiàng),確認(rèn)之后,按“Next”按鈕。圖5-4 新工程建立型號(hào)(圖5-5)??蜻x擇調(diào)試和使用的5-6華東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮AVRStudio有可能對(duì)中文支持不好(不支持UNICODE編碼),所以目錄和文件名中盡量不要使用中文字符。AVR Studio 4允許用戶選擇多種開發(fā)調(diào)試工具,在這里選用模擬的帶有
21、仿真功能的AVR Simulator,其它選擇均為的硬件設(shè)備配合。選用ATmega16。仿真功能的開發(fā)調(diào)試工具,需要相應(yīng)檢查所有的選項(xiàng),確認(rèn)之后,按“Finish”按鈕。圖5-5 調(diào)試和型號(hào)選擇框2.匯編源文件的建立經(jīng)過上面的步驟,AVR Studio打開了一個(gè)空的文件,文件的名字是demo_5_1.asm??赡苣阕⒁獾絛emo_5_1.asm這個(gè)文件還是一個(gè)空的文件(圖5-6)。圖5-6 AVR Studio主工作界面(一)華東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮5-7在新的源文件編輯窗口中,用戶可以輸入和編輯你的匯編源程序代碼。圖5-7為在匯編源程序編輯窗中輸入的秒節(jié)拍發(fā)生器匯編源程序。圖5-
22、7 輸入?yún)R編源程序3.匯編源文件的編譯選擇菜單項(xiàng)BuildBuild(或使用快捷鍵F7,或件進(jìn)行編譯(圖5-8)。上對(duì)應(yīng)工具按鈕)對(duì)匯編源文圖5-8 編譯源文件5-8華東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮編譯結(jié)束后,Studio將在Build的信息提示窗口里顯示編譯結(jié)果。如果發(fā)現(xiàn)提示中給出了編譯過程中產(chǎn)生的語句錯(cuò)誤,用戶應(yīng)該對(duì)源程序進(jìn)行改正后重新編譯,一直到編譯結(jié)果正確為止。5.2.3 使用仿真調(diào)試程序在 AVR Studio 集成開發(fā)環(huán)境中,可以使用其中的模擬仿真調(diào)試工具對(duì)匯編源文件或第支持開發(fā)的源程序(C、BASIC 等)進(jìn)行純環(huán)境的模擬仿真調(diào)試。這樣在沒有硬件的情況下,用戶可以對(duì)自己編寫的
23、程序進(jìn)行調(diào)試和排錯(cuò)。模擬仿真調(diào)試是一種新的逐步推廣的有效的調(diào)試技術(shù),能夠AVR Studio 能夠?qū)崿F(xiàn)對(duì) AVR 進(jìn)行純的調(diào)試時(shí)間,節(jié)約人力和物力。除了環(huán)境的模擬仿真調(diào)試外,-AVR 本身也具備圖形化的更加直觀的模擬仿真調(diào)試功能。另外,還有商業(yè)的模擬仿真Proteus和 Vmalb 都能實(shí)現(xiàn)對(duì) AVR 的模擬仿真調(diào)試。AVR Studio 的仿真調(diào)試提供 DBUG 調(diào)試、排錯(cuò)、設(shè)置斷點(diǎn)、單步、自動(dòng)單步、觸發(fā)、查看、選項(xiàng)、窗口、幫助等操作。在調(diào)試中,可打開多種窗口,如:I/O 窗、源文件窗、匯編機(jī)器代碼窗、Prosor 窗,窗,數(shù)據(jù)窗等(見圖 5-9,AVR 集成調(diào)試窗口圖示)。因此,用戶可以靈
24、活的使用各種方法,程序的運(yùn)行,檢查 MCU 中各個(gè)寄存器、器以及工作單元的變化,檢查一條或一段語句和指令執(zhí)行的時(shí)間等。在本實(shí)踐過程中,以簡(jiǎn)易秒節(jié)拍發(fā)生器為例,給出一些基本和簡(jiǎn)單的調(diào)試方法。這些調(diào)試方法,與使用硬件實(shí)時(shí)仿真也是相同的。因此,希望讀者在實(shí)際操作中以及在以后的學(xué)習(xí)中,逐步熟練掌握這些模擬調(diào)試的技術(shù)。圖 5-9 DEBUG 調(diào)試和觀察華東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮5-91.啟動(dòng)進(jìn)入DBUG 調(diào)試程序編譯無誤后,選擇菜單 DebugStart Debugging,啟動(dòng)進(jìn)入 Debug 調(diào)試。打開相應(yīng)的觀察窗口(圖 5-9)。其中主要的窗口有:Prosor 窗口。在該窗口中,用戶可以
25、查看MCU 的主要部分情況,如PC、Stack、32 個(gè)工作寄存器組等。在該窗口中,用戶還可以查看和統(tǒng)計(jì)指令執(zhí)行的周期數(shù),以及執(zhí)行時(shí)間等I/O 查看窗口。這個(gè)窗口是最主要的調(diào)試窗口,在該窗口中,用戶可以查看 MCU集成的功能,如 T/C、ADC、USART 等的 I/O 寄存器變化情況和狀態(tài)。用戶不但可以進(jìn)行觀察,同時(shí)也可以使用鼠標(biāo)點(diǎn)擊相應(yīng)的標(biāo)志位,模擬觸發(fā)信號(hào)的產(chǎn)生,如模擬觸發(fā)某個(gè)中斷標(biāo)志位,從而使 MCU 響應(yīng)中斷,執(zhí)行中斷服務(wù)程序,實(shí)現(xiàn)對(duì)中斷程序的調(diào)試。Register 窗口。用于觀察 32 個(gè)寄存器的變化,如果最后執(zhí)行的指令改變了寄存器的數(shù)值,將已紅色顯示。在調(diào)試過程中,用戶也可以根據(jù)
26、調(diào)試的需要,人為設(shè)置和改變寄存器的數(shù)值。Memory 窗口。Memory 窗口用于觀察 RAM、EEPROM、FLASH 三個(gè)不同空間單元的變化。在調(diào)試過程中,用戶也可以根據(jù)調(diào)試的需要,人為設(shè)置和改變這些單元的數(shù)值。圖 5-9 中,看到的是 RAM 空間高端地址的單元,這樣在調(diào)用序時(shí),可以觀察到堆棧的變化(本程序的堆棧空間設(shè)置在 RAM 的高端)。幾個(gè)重要的標(biāo)記和按鈕在程序代碼的窗口左邊,有一個(gè)黃色的尖頭,它表示下一步要執(zhí)行的指令(該指令還沒有執(zhí)行,但馬上要執(zhí)行)。Debug 工具中各種用于調(diào)試的按鈕,如:?jiǎn)尾綀?zhí)行 Stnto(F11),分段執(zhí)行 Step Over(F10,通常使用一次執(zhí)行完
27、整個(gè)序的調(diào)用),全速執(zhí)行程序Run(F5,只有遇到斷點(diǎn)才停止)等。在調(diào)試中可以靈活使用。程序斷點(diǎn)的設(shè)置與取消。在調(diào)試過程中,用戶可以根據(jù)需要在程序中設(shè)置多處斷點(diǎn)。程序在全速運(yùn)行中,遇到斷點(diǎn)就會(huì)暫停,此時(shí)可以觀察 MCU 的變化,進(jìn)行必要的設(shè)置,而后再繼續(xù)(使用 F5)從斷點(diǎn)處向下運(yùn)行。斷點(diǎn)的設(shè)置和取消方法非常方便:將光標(biāo)定位于需要設(shè)置為斷點(diǎn)的語句行,單擊 ToggleBreakpo按鈕(F9),該語句設(shè)置為斷點(diǎn),在左面出現(xiàn)紅色園點(diǎn)標(biāo)記,表示斷點(diǎn)。如將光標(biāo)定位于已設(shè)置為斷點(diǎn)語句行,單擊 Togg(F9),將取消該語句設(shè)置的斷點(diǎn),左面的紅色園點(diǎn)標(biāo)記reakpo。按鈕使用 Prosor 窗口中的 S
28、top Watch 功能,可以檢查一條或一段語句和指令執(zhí)行的時(shí)間。2單步運(yùn)行,觀察 MCU資源的變化按 F11 鍵單步執(zhí)行程序,觀察指令的執(zhí)行和查看 CPU 各種資源的變化情況。圖 5-9顯示了單步執(zhí)行 6 條指令后,堆棧寄存器 SPH、SPL 的情況,以及變量 temp1(定義為工作寄存器 R20)的值。在 R20 中其數(shù)值為 0 xFF,為紅色,表示剛執(zhí)行的指令“sertemp1”將 R20 置為全 1。在 Prosor 觀察窗口中,可觀察 MCU 的指令計(jì)數(shù)器 PC 的值為 0 x002F(當(dāng)前指令地址),Stack Poer 的植為 0 x045F(堆棧指針值,與堆棧寄存器 SPH、S
29、PL 的表示對(duì)應(yīng)的),以及使用了 7 個(gè)時(shí)鐘周期(Cycle Counter),而 Stop Watch 的值為 1.75us(5 * 0.25us + 0.5us,其中 rjmp reset 單條指令執(zhí)行時(shí)間為 2 個(gè)時(shí)鐘周期 0.5us)等等。3. 調(diào)試驗(yàn)證通用延時(shí) 序delay的延時(shí)效果5-10華東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮由于模擬調(diào)試方式是由PC上的來模擬AVR的操作過程,因此它不能達(dá)到象硬件那樣的真實(shí)速度,尤其是模擬一個(gè)延時(shí)程序,需要比較長(zhǎng)的時(shí)間。下面以本例說明,如何簡(jiǎn)單和正確的進(jìn)行延時(shí)程序的調(diào)試。先將匯編程序中的延時(shí)參數(shù)197改為3,重新編譯后進(jìn)入調(diào)試方式。(更簡(jiǎn)單的方式是先
30、單步執(zhí)行初試化部分的指令,當(dāng)執(zhí)行完“l(fā)di r16,197”一句后,使用鼠標(biāo)雙擊Register窗口中R16寄存器,將R16的值改寫為3,這樣就不需要重新編譯程序了。)使用單步執(zhí)行的方式執(zhí)行延時(shí)序的每一句語句,查看程序的邏輯對(duì)不對(duì),能否正確運(yùn)行,堆棧是如何工作的,SP指針如何變化,各個(gè)寄存器如何變化,PC的變化,RAM中數(shù)據(jù)的變化。這樣即了解了AVR的工作原理,也了解程序設(shè)計(jì)的技巧(學(xué)別人的),或驗(yàn)證程序是否同自己那樣正確(自己編的),而且訓(xùn)練了如何熟練使用DEBUG(熟練使用工具也是很重要的一環(huán))。驗(yàn)證了整個(gè)延時(shí)程序沒有邏輯錯(cuò)誤后,可以查看延時(shí)序的延時(shí)時(shí)間了。將延時(shí)參數(shù)由3改回197,編譯后
31、進(jìn)入調(diào)試方式。在調(diào)用該序的語句“rcall delay”處設(shè)置一個(gè)斷點(diǎn);在接下來的一個(gè)語句“sortc,0”處設(shè)置第二個(gè)斷點(diǎn)(見圖5-9)。按F5,全速運(yùn)行程序。當(dāng)程序在第一個(gè)斷點(diǎn)處停下時(shí),在Prosor的選項(xiàng)中(展開該圖標(biāo))找到Stop Watch子項(xiàng),在右鍵菜單中選擇將其清另。按F5,從斷點(diǎn)處繼續(xù)全速運(yùn)行程序(開始調(diào)用延時(shí)序)。等大約十幾秒或幾十秒后(取決于你的PC速度),程序在第二個(gè)斷點(diǎn)處停下(子程序模擬運(yùn)行時(shí),AVR Studio下面狀態(tài)欄中的運(yùn)行圖標(biāo)為綠色,暫停為黃色)。查看Prosor的選項(xiàng)中Stop Watch的值(本例中為999826.75us),它下調(diào)用序返回后的時(shí)間,該時(shí)間
32、值即為延時(shí)序的運(yùn)行時(shí)間。由此驗(yàn)證了延時(shí)序的執(zhí)行時(shí)間。調(diào)節(jié)延時(shí)參數(shù),可以得到不同的延時(shí)時(shí)間,通過軟件模擬可以精確的得到。這比使用你也不能得到精確的時(shí)間。實(shí)時(shí)仿真段要方便多了,而直接在目標(biāo)板上運(yùn)行,使用模擬仿真是現(xiàn)在調(diào)試技術(shù)的發(fā)展方向。當(dāng)你了解和熟練掌握使用AVR Studio后,你的設(shè)計(jì)研發(fā)速度會(huì)提高,硬件系統(tǒng)和件也完成了60-70%。編程可以平行開展,當(dāng)硬件完成了,你的軟5.3 CVAVR + AVR Studio高級(jí)語言集成開發(fā)環(huán)境使用CodeViAVR 是 HP Info Tech 專門為 AVR 設(shè)計(jì)的一款低成本的 C 語言編譯器,它產(chǎn)生的代碼非常嚴(yán)密,效率很高。它不僅包括了 AVR C
33、 編譯器,同時(shí)也是一個(gè)集成 IDE 的AVR開發(fā),簡(jiǎn)稱 CVAVR。與其它的 C 語言開發(fā)相比較,CVAVR 對(duì)位(bit)變量的支持,大量擴(kuò)展的對(duì)一些標(biāo)準(zhǔn)的外部器件支持和接口函數(shù)(如:標(biāo)準(zhǔn)字符 LCD 顯示器、I2C 接口、SPI 接口、延時(shí)函數(shù)、BCD 碼與和使用。碼轉(zhuǎn)換等),以及方便的對(duì) EEPROM 的操作功能等特點(diǎn)更加適合一般的學(xué)習(xí)HP Info Tech的地址為,提供試用板(2K代碼限制)安裝程序的。讀者可以從本書附帶的光盤中找到試用版的安裝CVAVR_setup.EXE。華東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮5-11讀者注意:本C 源代碼程序均是在 CVAVR 系統(tǒng)下實(shí)現(xiàn)的。5.3
34、.1 秒節(jié)拍顯示器的高級(jí)C語言源程序代碼下面是使用高級(jí)語言編寫的秒節(jié)拍發(fā)生器的 C 語言源程序。C 的源程序看上去比匯編的簡(jiǎn)潔,也更加易懂。在程序的初始化代碼中,僅僅對(duì) PORTC 口進(jìn)行了設(shè)置,而沒有對(duì) AVR 堆棧指針的初始化設(shè)置,這是由于 CVAVR 系統(tǒng)在編譯時(shí)會(huì)首先幫用戶自動(dòng)的設(shè)置堆棧指針,方便了用戶的使用。與匯編相同的是在 C 主程序中,由 while(1)無限(死)循環(huán),循環(huán)中調(diào)用了CVAVR 提供的延時(shí)函數(shù) delay_ms(),延時(shí) 1 秒鐘后將 PC0 口的值取反輸出,控制點(diǎn)亮和熄滅 LED。因此,程序的運(yùn)行效果是每隔一秒鐘后,控制 PC 口的第 0 位輸出“1”或“0”,
35、使 LED 亮一秒鐘,暗一秒鐘,形成秒節(jié)拍顯示指示。/*Demo_5_2.cChip type Program type Clock frequency Memory mExternal SRAM sizeData Stack size: ATmega16: Application: 4.000000 MHz: Small: 0: 256*/#include #include / 包括器件配置定義的頭文件,不能缺少/ 包括延時(shí)函數(shù)定義的頭文件,使用延時(shí)函數(shù)時(shí)不能缺少void main(void)/ 定義PortC口的工作方式 PORTC=0 x01;DDRC=0 x01;/ 主循環(huán) while
36、 (1)delay_ms(1000); PORTC.0 = PORTC.0;/ PC口的第0位輸出“1”,LED不亮/ 定義PC口的第0位為輸出方式/ 調(diào)用CVAVR提供的毫秒延時(shí)函數(shù),延時(shí)1s/ PC口第0位輸出取反5.3.2 系統(tǒng)工程文件與源程序文件的建立、編譯CVAVR系統(tǒng)的安裝也是非常簡(jiǎn)單的。用戶只要執(zhí)行從網(wǎng)上的CVAVR系統(tǒng)安裝“setup.exe”文件,就可以按照提示進(jìn)行CVAVR系統(tǒng)的安裝了。按照安裝過程中的提示,我們將CVAVR集成開發(fā)環(huán)境的系統(tǒng)文件安裝在目錄C:cvavr下面。1. 建立一個(gè)新的工程項(xiàng)目管理project文件CVAVR也采用project工程項(xiàng)目管理文件(.A
37、PR)來保存、管理用戶在系統(tǒng)開5-12華東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮發(fā)中所使用和生成的各種文件,以及保存用戶的開發(fā)環(huán)境配置參數(shù)和設(shè)置情況等。圖5-10 在CVAVR中創(chuàng)建新的工程項(xiàng)目新建工程項(xiàng)目。CVAVR啟動(dòng)后,你將看到它的主工作界面?,F(xiàn)在可以創(chuàng)建一個(gè)新的項(xiàng)目:選擇菜單欄中“FileNew”,出現(xiàn)“Create New File”框。選擇Project選項(xiàng),表示新建一個(gè)工程項(xiàng)目(圖5-10),按“OK”按鈕確認(rèn)。隨后CVAVR出現(xiàn)一個(gè)框,詢問用戶是否使用需要在CVAVR系統(tǒng)的程序自動(dòng)生成向?qū)鞯膸椭律稍闯绦虻闹鹘Y(jié)構(gòu)框架。建議使用該功能,選擇“Yes”進(jìn)入CodeWizardAVR選
38、擇框。在CVAVR系統(tǒng)的程序自動(dòng)生成向?qū)鞯膸椭律稍闯绦虻闹鹘Y(jié)構(gòu)框架。CVAVR系統(tǒng)的程序自動(dòng)生成向?qū)魇且粋€(gè)非常具有特點(diǎn)的功能。用戶在它的幫助下,可以非常簡(jiǎn)單和方便的生成源程序的主結(jié)構(gòu)框架,其中還包括了對(duì)AVR各個(gè)I/O寄存器初始化的代碼。這使得用戶不必頻繁的查看手冊(cè),去確定各個(gè)標(biāo)志的意義,以及計(jì)算初始設(shè)置值等。讀者應(yīng)逐步掌握和熟練使用該項(xiàng)功能。確定使用AVR的型號(hào)和系統(tǒng)時(shí)鐘頻率值。本例中,選擇ATmega16,系統(tǒng)時(shí)鐘頻率為4M(參見圖5-10)。確定PORTC口的工作方式。本例中只使用了PORTC口的最低位,為輸出方式工作,用于控制LED。圖5-11給出對(duì)PORTC口初始化配置的界面
39、,用鼠標(biāo)點(diǎn)擊“Bit 0”的方向?yàn)檩敵鯫ut,輸出初始值為1。CodeWizardAVR選擇框中還有許多對(duì)AVR各個(gè)功能的配置選擇,由于本例非常簡(jiǎn)單,只用到PORTC的第0位,因此配置完成。讀者可以仔細(xì)游覽各個(gè)功能配置,配合CVAVR的HELP文件,了解其如何使用,同時(shí)也加深對(duì)AVR的熟悉和了解。資源華東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮5-13圖5-11 PORTC口的初始化配置2建立源文件,輸入源代碼,編譯源代碼建立源文件,輸入源代碼在CodeWizardAVR選擇Exit”項(xiàng)。窗口的菜單欄中選擇“FileGenerate,Save and在彈出的框中分別填入源代碼文件名.c、工程管理文件名
40、.prj、和器件初始配置文件為demo_5_2。.cwp,并確認(rèn)。本例中使用主文件名在隨后出現(xiàn)的CVAVR主工作窗口中,右面的源程序文件中,已經(jīng)出現(xiàn)了一個(gè)根據(jù)用戶配置而生成的源程序的主結(jié)構(gòu)框架(圖5-12)。用戶可以在這個(gè)主結(jié)構(gòu)框架中的相應(yīng)的地方輸出自己的源代碼了。 CodeWizardAVR生成的源程序的主結(jié)構(gòu)框架有許多對(duì)AVR各功能I/O寄存器初始化的代碼,本例中將一些不影響秒節(jié)拍顯示器的語句簡(jiǎn)化了。讀者在實(shí)際操作中,應(yīng)該仔細(xì)學(xué)習(xí)CVAVR生成程序的風(fēng)格和,建立良好的程序設(shè)計(jì)和編寫的。5-14華東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮圖5-12 CVAVR的主工作窗口編譯源文件選擇菜單項(xiàng)Proj
41、ectMake(或使用快捷鍵Shift+F9,或?qū)源文件進(jìn)行編譯。上對(duì)應(yīng)工具按鈕)編譯結(jié)束后,CVAVR將在Information窗口顯示編譯結(jié)果。如果程序中有語法或連接錯(cuò)誤,在左邊的Navigator窗口中將給出紅色的錯(cuò)誤提示詳細(xì)。發(fā)現(xiàn)提示中給出了編譯過程中產(chǎn)生的錯(cuò)誤,用戶應(yīng)該對(duì)源程序進(jìn)行改正后重新編譯,一直到編譯結(jié)果正確為止。5.3.3 在CVAVR中使用AVR Studio進(jìn)行仿真調(diào)試程序CVAVR系統(tǒng)本身不帶有ICE的調(diào)試功能, 但它能生成與AVR Studio兼容的調(diào)試文件.cof,并通過該文件同AVR Studio實(shí)現(xiàn)連接,使AVR Studio成為支持C語言的調(diào)試仿真。配置CV
42、AVR使用的調(diào)試器。選擇菜單項(xiàng)SettingsDebugger,進(jìn)入CVAVR的仿真調(diào)試器配置框。設(shè) 置 AVR Studio 為 CVAVR 的 仿 真 調(diào) 試 器 , 如 圖 5-13 所 示 。圖5-13 設(shè)置CVAVR的仿真調(diào)試器為AVR Studio華東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮5-15使用AVR Studio的仿真調(diào)試程序進(jìn)行C代碼的模擬調(diào)試。選擇菜單項(xiàng)ToolsDebugger(或使用快捷鍵Shift+F3,或按鈕),啟動(dòng)AVR Studio的仿真調(diào)試環(huán)境。上對(duì)應(yīng)工具在歡迎框中(圖5-3)點(diǎn)擊“Open ”按鈕,在下面的框中選擇文件.cof(本例為mode_5_2.cof)
43、,確認(rèn)打開。選擇調(diào)試和使用的型號(hào)(圖5-5)。同樣,在這里選用模擬的帶有仿真功能的AVR Simulator。選用Atmega16。檢查所有的選項(xiàng),確認(rèn)之后,按“Finish”按鈕。圖5-14 在AVR Studio中調(diào)試CVAVR的C代碼源程序CVAVR的C源代碼的模擬調(diào)試。圖5-14就是使用AVR Studio對(duì)第高級(jí)語言代碼的調(diào)試仿真界面。它同AVR匯編語言程序的調(diào)試方法相同,區(qū)別在于源代碼是高級(jí)語言編寫的。通過選擇菜單項(xiàng)ViewDisassembler,用戶還可以打開反匯編的代碼,以方便進(jìn)行更加深入的匯編級(jí)的調(diào)試。5.4 AVR熔絲位的設(shè)置和執(zhí)行代碼通過在AVR Studio中使用模擬
44、仿真,可以將程序中的許多問題和BUG找出來,并及時(shí)進(jìn)行修改和調(diào)整。模擬仿真完成后,可以將生成AVR的執(zhí)行代碼文件xx.hex燒入到5-16華東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮Atmega16中進(jìn)行實(shí)際的運(yùn)行。問題,則需要找出原因,再次進(jìn)行調(diào)試。5.4.1 AVR-51 多功能板的硬件連接首先要在“AVR-51多功能實(shí)驗(yàn)開發(fā)板”上構(gòu)建一個(gè)ATmega16的最小系統(tǒng)。根據(jù)第四章表4.2,采用短路片進(jìn)行相關(guān)的連接,見圖5-15、圖5-16。圖5-15 用短路片將JN的中心和上端連接圖5-16 使用短路片ATmega16最小系統(tǒng)在圖5-15中,使用黃色短路片將JN的中心針與上端標(biāo)有AVR標(biāo)記的針短接,
45、單片機(jī)的上電復(fù)位電路。適合AVR在板上右邊的鎖緊插座中,放入40PIN的ATmega16,在其兩邊的JU4、JU7短路排中使用了11個(gè)短路片。其中2個(gè)紅色為連接電源5V,提供工作電源;2個(gè)黃色將的地與實(shí)驗(yàn)板的地連接;JU4上面4個(gè)黑色的連接ISP接口,用于程序;JU4下面2個(gè)黑色的連接MAX202,串行通口。本實(shí)驗(yàn)使用ATmega16排開放。的RC振蕩源,并且不使用JTAG口,因此X2、X1和JU8的6個(gè)短路以上了ATmega16的最小系統(tǒng),最后使用一根連接線將PC0與A區(qū)8個(gè)LED中的接華東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮5-17(JA),一個(gè)秒節(jié)拍顯示器硬件電路就了。5.4.2 AVR熔絲
46、位的配置剛出廠ATmega16單片機(jī)缺省使用1M的RC振蕩源作為系統(tǒng)的時(shí)鐘,而且JTAG口處于允許方式等,因此需要對(duì)熔絲位先進(jìn)行必要的配置。對(duì)于剛開始學(xué)習(xí)使用AVR的讀者,建議改變的熔絲位有:系統(tǒng)時(shí)鐘采用4M的RC振蕩源。其優(yōu)點(diǎn)是速度適中,且應(yīng)用于RS-232通信時(shí),分頻產(chǎn)生的9600bps速率與標(biāo)準(zhǔn)值的誤差最小(0.2%)。片內(nèi)的JTAG口功能。不使用JTAG的I/O使用。仿真,將4個(gè)引腳PC2-PC5,作為普通啟用低電壓檢測(cè)復(fù)位功能。檢測(cè)電平設(shè)置為4.0V。下面給出在-AVR環(huán)境下設(shè)置ATmega16的操作過程。-AVR,在菜單欄中選擇FileNew,建立一個(gè)空的文件。啟動(dòng)菜單欄中選擇Op
47、tions Programmer ,進(jìn)入編程器配置窗,選擇使用STK200/STK300 Programmer線。確認(rèn)返回(圖5-17)。圖5-17-AVR編程器選擇窗將ISP線一端與PC的打印口連接,另一端的電源。實(shí)驗(yàn)板的ISP插座中,打開實(shí)驗(yàn)板在菜單欄中選擇ProgramSend to chip(或使用快捷鍵F4,或按按鈕),進(jìn)入編程功能。中相應(yīng)的跳過2個(gè)(由于沒有源文件造成)提示信息窗,出現(xiàn)了-AVR的編程功能窗口。選擇“Lock and Fuse Bits”,可以看到所有熔絲位的狀態(tài)(圖5-18)。-AVR已經(jīng)讀出了的ID號(hào),以及5-18華東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮在使用AVR
48、單片機(jī)時(shí),首先注意要對(duì)它的配置熔絲位進(jìn)行正確的配置編程!建議采用-AVR中的編程功能,可以有效的防止錯(cuò)誤的發(fā)生!圖5-18 熔絲位查看設(shè)置窗口的熔絲位進(jìn)行了分類,并且提供用戶采用下拉菜單式在-AVR中,對(duì)AVR的選擇項(xiàng),每個(gè)配置都有簡(jiǎn)單的解釋,非常人性化,有效的防止錯(cuò)誤的產(chǎn)生。在本例中,需要重新設(shè)置的熔絲有4處(圖5-19)。圖5-19 熔絲位設(shè)置與編程窗口在Fusebits組中,選定BODEN enabled(允許低電壓檢測(cè))、BODLEVEL 4.0V(檢測(cè)電平為4.0v)、ernal RC oscillator 4MHz(使用4MHz的RC振蕩器為系統(tǒng)時(shí)鐘源)。檢查無誤后,按“Write
49、 FS”按鈕正式改變?nèi)劢z的設(shè)置狀態(tài)。在Fusebits High組中,選定Disable JTAG(片內(nèi)JTAG口,PC2-5為通用I/O)。檢查無誤后,按“Write FSH”按鈕正式改變?nèi)劢z的設(shè)置狀態(tài)。由“Lock and Fuse Bits”切換到“Flash ROM”或“EEPROM”,然后在切換回到“Lock and Fuse Bits”,再次回讀熔絲位的狀態(tài),確認(rèn)設(shè)置是否正確。華東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮5-19對(duì)于Flash ROM和EEPROM進(jìn)行擦除或編程的操作過程,是不會(huì)改變?nèi)劢z位的狀態(tài)的。因此,當(dāng)熔絲位設(shè)置完成后,一般不需要多次的重寫,除非必須再次改變?nèi)劢z位的配置
50、。5.4.3 執(zhí)行代碼文件的熔絲位配置完成后,就可以將編譯好的運(yùn)行代碼燒入到AVR的Flash中,查看系統(tǒng)真實(shí)的運(yùn)行情況了。由于AVR Studio不支持使用STK200/STK300兼容的線,因此可以在-AVR中,將在AVR Studio中使用匯編編寫調(diào)試過的系統(tǒng)程序,經(jīng)過編譯后生成的執(zhí)行代碼(HEX格式)到AVR中。而CVAVR是直接支持使用STK200/STK300兼容的線的,因此在CVAVR中,用戶在編寫完C源程序后,先應(yīng)該利用AVR Studio進(jìn)行模擬的仿真調(diào)試。調(diào)試完成后,可以直接使用CVAVR中的程序 1用功能,通過STK200/STK300將運(yùn)行代碼燒入到AVR中。-AVR燒
51、入執(zhí)行代碼將-AVR的編程功能窗口切換顯示Flash ROM,在菜單欄中選擇BufferLoadfrom file,將需要區(qū)Buffer中(圖5-20)。的運(yùn)行代碼文件(.hex或.bin格式)讀入到PC的內(nèi)存緩沖圖5-20 選擇讀入HEX或BIN運(yùn)行代碼文件在菜單欄中選擇ChipErase(或除,將原先的Flash中的程序清除掉。在菜單欄中選擇ChipWrite buffer將Buffer中的運(yùn)行代碼寫入到AVR中。上相應(yīng)的工具按鈕),先對(duì)AVR進(jìn)行擦o chip(或上相應(yīng)的工具按鈕),2在CVAVR中燒入執(zhí)行代碼在CVAVR的主工作窗口中,選擇菜單欄SettingsProgrammer,進(jìn)
52、入編程器的選擇框。選擇使用Kanda Systems STK200+/300線(圖5-21),確認(rèn)后返回。5-20華東師范大學(xué) 電子科學(xué)技術(shù)系 馬潮圖5-21 選擇STK200/300線在CVAVR的主工作窗口中,選擇菜單欄ToolsProgrammer,進(jìn)入CVAVR的編程功能窗器(圖5-21)。圖5-22 CVAVR的編程功能窗選擇菜單項(xiàng)ProgramErase Chip,先對(duì)AVR清除掉。進(jìn)行擦除,將原先Flash中的程序選擇菜單欄ProgramFLASH,將Buffer中的運(yùn)行代碼寫入到AVR中。華東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮5-21以上,結(jié)合一個(gè)簡(jiǎn)單的例子,講解了如何使用匯編語
53、言以及高級(jí)語言C編寫AVR的系統(tǒng)程序;如何使用AVR配置AVR的熔絲;以及如何、-AVR等;如何進(jìn)行模擬調(diào)試;如何運(yùn)行代碼程序的整個(gè)過程。上面的介紹都還是一些最基本的操作和過程,希望讀者能在以后的學(xué)習(xí)實(shí)踐過程中,盡快的熟悉這些的功能和使用方法,并能熟練的掌握。5.5 一個(gè)比較復(fù)雜的AVR匯編語言實(shí)例在本節(jié)中給出一個(gè)完整使用 AVR 匯編語言開發(fā)編寫的一個(gè)簡(jiǎn)單的應(yīng)用程序。通常使用ATmega16的系統(tǒng)是比較復(fù)雜的系統(tǒng),因此使用高級(jí)程序語言設(shè)計(jì)編寫系統(tǒng)程序更加方便和快捷。本節(jié)給出匯編語言程序的目的,主要是對(duì)本章內(nèi)容的總結(jié),同時(shí)讓用戶通過該實(shí)例的閱讀,能更加了解 AVR 匯編語言的使用,以及對(duì)在編寫
54、、閱讀和調(diào)試 ATmega16 的匯編代碼時(shí)需要注意的一些問題給出講解。5.5.1 系統(tǒng)功能與硬件設(shè)計(jì)該應(yīng)用系統(tǒng)為一個(gè)帶 1/100 秒的簡(jiǎn)易 24 小時(shí)制時(shí)鐘,它在上電后能夠自動(dòng)從 11 時(shí) 59分 55 秒 00 開始計(jì)時(shí)和顯示時(shí)間。圖 5-23 為簡(jiǎn)易時(shí)鐘系統(tǒng)硬件電路圖。,系統(tǒng)使用 8 個(gè) LED 數(shù)碼管作為時(shí)鐘的顯示器,顯示時(shí)、分、秒、1/100 秒 4個(gè)時(shí)段的數(shù)字,每個(gè)時(shí)段占用 2 個(gè) LED。顯示方式采用動(dòng)態(tài)掃描方式,ATmega16 的 PA 口輸出顯示數(shù)字的 7 段碼(注意:圖中省缺了 PA 口連接到 LED 各段的 8 個(gè)限流電阻,阻值 800歐左右),PC 口用于控制 8
55、個(gè)LED 的位選。ATmega16 使用4MHz 晶振。系統(tǒng)還使用 ATmega16 片內(nèi)的計(jì)數(shù)/定時(shí)器 T1,設(shè)計(jì)T1 工作在定時(shí)溢出中斷方式,定時(shí)間隔為 2ms,即 T1 每 2ms 產(chǎn)生一次中斷。5 次中斷得到 10ms 的時(shí)間間隔,此時(shí)時(shí)鐘的 1/100秒加 1,并相應(yīng)進(jìn)行時(shí)、分、秒的調(diào)整。LED 動(dòng)態(tài)掃描方式的設(shè)計(jì)如下:在每 2ms 的時(shí)間中,點(diǎn)亮 8 個(gè)LED 中的一個(gè),顯示該位相應(yīng)的數(shù)字(PC 口的輸出只有一位為低電平,選通一個(gè) LED,保持 2ms)。因此 PC 口的輸出值為 0b11111110,每隔 2ms 循環(huán)右移,到 0b01111111 時(shí) 8 個(gè)LED 各點(diǎn)亮一次,
56、時(shí)間為 16ms。在 1 秒鐘內(nèi),循環(huán) 8 個(gè) LED 的次數(shù)為 62.5(1000/16),是人眼的滯留時(shí)間(25 次/秒)的2.5 倍,保證了 LED 顯示亮度均勻,無閃爍。在程序設(shè)計(jì)中,在各個(gè) LED 轉(zhuǎn)換和 7 段碼輸出時(shí),關(guān)閉位選信號(hào)(PC 輸出 0b11111111),消除了顯示的拖尾現(xiàn)象(消影功能)。5-22華東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮使用CVAVR中的編程程序時(shí)應(yīng)特別注意,由于CVAVR編程界面初始打開時(shí),大部分熔絲位的初始狀態(tài)定義為“1”,因此不要使用其編程菜單選項(xiàng)中的“all”選項(xiàng)。此時(shí)的“all”選項(xiàng)會(huì)以熔絲位的初始狀態(tài)定義來配置的熔絲位,而實(shí)際上其往往并不是用戶
57、所需要的配置結(jié)果。如果要使用“all”選項(xiàng),應(yīng)先使用“read-fuse bits”中熔絲位實(shí)際狀態(tài)后,再使用“all” 選項(xiàng)。盡管在 CVAVR 中也可以配置 AVR 的熔絲位,但它沒有給出具體詳細(xì)的設(shè)置意義,因此用戶需要仔細(xì)的參考和核對(duì)器件手冊(cè),防止產(chǎn)生錯(cuò)誤的配置。對(duì)于剛開始學(xué)習(xí)使用 AVR,以及對(duì) AVR 的熔絲位配置不是很熟悉的,建議使用-AVR 對(duì)熔絲進(jìn)行配置和設(shè)置。圖 5-23 簡(jiǎn)易 24 小時(shí)時(shí)鐘硬件原理圖T1 的設(shè)計(jì):T1 為 16 位定時(shí)器,系統(tǒng)時(shí)鐘為 4M,采用其 64 分頻后的時(shí)鐘作為 T1 的計(jì)數(shù)信號(hào)(寄存器 TCCR1B = 0 x03),一個(gè)計(jì)數(shù)周期為 16us,2
58、ms 需要計(jì) 125 個(gè)(0 x007D)。由于 T1 溢出中斷發(fā)生在 0 xF 后下一個(gè) T1 計(jì)數(shù)脈沖的到來(參見第 8 章關(guān)于定時(shí)器原理與應(yīng)用部分),因此 T1 的計(jì)數(shù)初始值為 0 xFF83 = 0 xTCNT1 的初值為 0 xFF83。F 0 x007C(65535-124),即寄存器5.5.2AVR匯編源代碼該系統(tǒng)的匯編源代碼如下,開發(fā)使用 AVR Studio 4.12。;*;AVR 匯編程序?qū)嵗?Demo_5_2.asm;簡(jiǎn)易帶 1/100 秒的 24 小時(shí)制時(shí)鐘;Mega16 4MHz;*.include m16def.inc;器件 I/O 配置文件;定義程序中使用的變量名
59、(在寄存器空間).def.def.def.def.def.def.def.defcountition p_temp=r18 r19 r20 r21 r22 r23 r24r25;循環(huán)計(jì)數(shù)單元;LED 顯示位指針,取值為 0-7;LED 顯示位選,其值取反由 PC 口輸出;10ms 計(jì)數(shù)單元;2ms 到標(biāo)志;臨時(shí)變量;臨時(shí)變量;臨時(shí)變量(在中斷中使用)count_10ms =flag_2ms temp temp1temp_=;中斷向量區(qū)定義,flash 程序空間$000-$029.$000華東師范大學(xué) 電子科學(xué)技術(shù)系 馬 潮5-23rjmp nop reti nop reti nop reti
60、nop reti nop reti nop reti nop reti nop rjmp nop reti nop reti nop reti nop reti nop reti nop reti nop reti nop reti nop reti nop reti nop reti nop reti nopreset;復(fù)位處理;IRQ0Handler;IRQ1 Handler;Timer2Compare Handler;Timer2Overflow Handler;Timer1Capture Handler;Timer1Compare-A Handler;Timer1Compare-B H
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 圖書修復(fù)與保護(hù)保證館藏書籍的保存質(zhì)量計(jì)劃
- 專業(yè)品牌營(yíng)銷團(tuán)隊(duì)的組建要點(diǎn)計(jì)劃
- 腦卒中的預(yù)防和護(hù)理
- 發(fā)展團(tuán)隊(duì)領(lǐng)導(dǎo)能力提升團(tuán)隊(duì)士氣計(jì)劃
- 社團(tuán)工作的組織和具體安排計(jì)劃
- 四川峨邊華竹溝礦業(yè)開發(fā)有限公司華竹溝磷礦礦山地質(zhì)環(huán)境保護(hù)與土地復(fù)墾方案情況
- 茶飲店基礎(chǔ)知識(shí)培訓(xùn)課件
- 肺部粒子植入患者護(hù)理
- 2025年曲靖貨運(yùn)車從業(yè)考試題
- 2025年黔東南貨車資格證考試題
- 花城版三年級(jí)上冊(cè)音樂教學(xué)計(jì)劃
- GB/T 31821-2015電梯主要部件報(bào)廢技術(shù)條件
- GB/T 17574.11-2006半導(dǎo)體器件集成電路第2-11部分:數(shù)字集成電路單電源集成電路電可擦可編程只讀存儲(chǔ)器空白詳細(xì)規(guī)范
- 快手磁力聚星知識(shí)考試題庫(kù)及答案
- 學(xué)校衛(wèi)生監(jiān)督協(xié)管巡查記錄
- 《勾股定理在實(shí)際生活中的應(yīng)用》教學(xué)反思
- 游泳池給水排水安裝工程識(shí)圖
- 配位鍵和配位化合物課件
- 政 審 表打印模板
- 成人心肺復(fù)蘇(雙人)課件
- 蘇教版數(shù)學(xué)二年級(jí)下冊(cè)《認(rèn)識(shí)時(shí)分》教案(無錫公開課)
評(píng)論
0/150
提交評(píng)論