當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 單片機(jī)學(xué)習(xí) > 單片機(jī)教程 > avr單片機(jī)教程,讓你快速學(xué)avr單片機(jī)
嵌入式可以說是IT領(lǐng)域發(fā)展最快的技術(shù)之一了,嵌入式包括的很廣,有什么軟件啦,有什么硬件啦,還有今天我們要了解的單片機(jī),很多人都在問單片機(jī)應(yīng)該怎么樣學(xué)習(xí)啊,尤其是avr單片機(jī)呢,其實(shí)avr單片機(jī)學(xué)習(xí)還是比較容易的,只要你掌握好下面的方法,你就不會(huì)迷茫而無所得了。
首先要知道,avr單片機(jī)是什么?不然不了解這個(gè),那接下來的學(xué)習(xí)也是白瞎,AVR單片機(jī)是1997年由ATMEL公司研發(fā)出的增強(qiáng)型內(nèi)置Flash的RISC(Reduced Instruction Set CPU) 精簡指令集高速8位單片機(jī)。可以廣泛應(yīng)用于計(jì)算機(jī)外部設(shè)備、工業(yè)實(shí)時(shí)控制、儀器儀表、通訊設(shè)備、家用電器等各個(gè)領(lǐng)域。
學(xué)習(xí)avr單片機(jī)那你就需要知道avr單片機(jī)的特點(diǎn)有哪些:
1、131條機(jī)器指令,且大多數(shù)指令的執(zhí)行時(shí)間為單個(gè)系統(tǒng)時(shí)鐘周期;
2、32個(gè)8位通用工作寄存器;
3、工作在16MHz時(shí)具有16MIPS的性能;
4、配備只需要2個(gè)時(shí)鐘周期的硬件乘法器。
avr單片機(jī)是我們很常用的,你知道是為什么嗎?所以這又是一個(gè)學(xué)習(xí)的點(diǎn),你要了解avr單片機(jī)的優(yōu)點(diǎn)有哪些:
1、程序存儲(chǔ)器為價(jià)格低廉、可擦寫1萬次以上、指令長度單元為16位(字)的FlashROM(即程序存儲(chǔ)器寬度為16位,按8位字節(jié)計(jì)算時(shí)應(yīng)乘2)。而數(shù)據(jù)存貯器為8位。因此AVR還是屬于8位單片機(jī)。
2、采用CMOS技術(shù)和RISC架構(gòu),實(shí)現(xiàn)高速(50ns)、低功耗(μA)、具有SLEEP(休眠)功能。AVR的一條指令執(zhí)行速度可達(dá)50ns(20MHz),而耗電則在1uA~2.5mA間。AVR采用Harvard結(jié)構(gòu),以及一級(jí)流水線的預(yù)取指令功能,即對(duì)程序的讀取和數(shù)據(jù)的操作使用不同的數(shù)據(jù)總線,因此,當(dāng)執(zhí)行某一指令時(shí),下一指令被預(yù)先從程序存儲(chǔ)器中取出,這使得指令可以在每一個(gè)時(shí)鐘周期內(nèi)被執(zhí)行。
3、工業(yè)級(jí)產(chǎn)品。具有大電流10~20mA(輸出電流)或40mA(吸電流)的特點(diǎn),可直接驅(qū)動(dòng)LED、SSR或繼電器。有看門狗定時(shí)器(WDT)安全保護(hù),可防止程序走飛,提高產(chǎn)品的抗干擾能力。
4、通用數(shù)字I/O口的輸入輸出特性與PIC的HI/LOW輸出及三態(tài)高阻抗HI-Z輸入類同,同時(shí)可設(shè)定類同與8051結(jié)構(gòu)內(nèi)部有上拉電阻的輸入端功能,便于作為各種應(yīng)用特性所需(多功能I/O口),AVR的I/O口是真正的I/O口,能正確反映I/O口的輸入/輸出的真實(shí)情況。
5、像8051一樣,有多個(gè)固定中斷向量入口地址,可快速響應(yīng)中斷,而不是像PIC一樣所有中斷都在同一向量地址,需要以程序判別后才可響應(yīng),這會(huì)浪費(fèi)且失去控制時(shí)機(jī)的最隹機(jī)會(huì)。
學(xué)avr單片機(jī)當(dāng)然少不了的就是要勤于動(dòng)手,多做例子,在這里就給你舉了例子來學(xué)習(xí)更透徹,慢慢練習(xí),對(duì)學(xué)avr單片機(jī)還是很不錯(cuò)的。
系統(tǒng)時(shí)鐘:
ATmega16的片內(nèi)含有4種頻率(1/2/4/8M)的RC振蕩源,可直接作為系統(tǒng)的工作時(shí)鐘使用。同時(shí)片內(nèi)還設(shè)有一個(gè)由反向放大器所構(gòu)成的OSC(Oscillator)振蕩電路,外圍引腳XTAL1和XTAL2分別為OSC振蕩電路的輸入端和輸出端,用于外接石英晶體等,構(gòu)成高精度的或其它標(biāo)稱頻率的系統(tǒng)時(shí)鐘系統(tǒng)。
為ATmega16提供系統(tǒng)時(shí)鐘源時(shí),有三種主要的選擇:(1)直接使用片內(nèi)的1/2/4/8M的RC振蕩源;(2)在引腳XTAL1和XTAL2上外接由石英晶體和電容組成的諧振回路,配合片內(nèi)的OSC(Oscillator)振蕩電路構(gòu)成的振蕩源;(3)直接使用外部的時(shí)鐘源輸出的脈沖信號(hào)。方式2和方式3的電路連接見圖2-6(a)和2-6(b)。
內(nèi)部看門狗:
在AVR片內(nèi)還集成了一個(gè)1MHz獨(dú)立的時(shí)鐘電路,它僅供片內(nèi)的看門狗定時(shí)器(WDT)使用。因此,AVR片內(nèi)的WDT是獨(dú)立硬件形式的看門狗,使用AVR可以省掉外部的WDT芯片。使用WDT可以有效的提高系統(tǒng)的可靠行。
avr單片機(jī)的工作流程:
AVR CPU的工作是由系統(tǒng)時(shí)鐘直接驅(qū)動(dòng)的,在片內(nèi)不再進(jìn)行分頻。圖2-7所示為Harvard結(jié)構(gòu)和快速訪問寄存器組的并行指令存取和指令執(zhí)行時(shí)序。CPU在啟動(dòng)后第一個(gè)時(shí)鐘周期T1取出第一條指令,在T2周期便執(zhí)行取出的指令,并同時(shí)又取出第二條指令,依次進(jìn)行。這種基于流水線形式的取指方式,使AVR可以以非常高的速度執(zhí)行指令,獲得高達(dá)1MIPS/MHz的效率。
存儲(chǔ)器:
所有的I/O寄存器可以通過IN(I/O口輸入)和OUT(輸出到I/O口)指令訪問,這些指令是在32個(gè)通用寄存器與I/O寄存器空間之間傳輸交換數(shù)據(jù),指令周期為1個(gè)時(shí)鐘周期。此外,I/O寄存器地址范圍在$00-$1F之間的寄存器(前32個(gè))還可通過指令實(shí)現(xiàn)bit位操作和bit位判斷跳轉(zhuǎn)。SBI(I/O寄存器中指定位置1)和CBI(I/O寄存器中指定位清零)指令可直接對(duì)I/O寄存器中的每一位進(jìn)行位操作。使用SBIS(I/O寄存器中指定位為1跳行)和SBIC(I/O寄存器中指定位為0跳行)指令能夠?qū)@些I/O寄存器中的每一位的值進(jìn)行檢驗(yàn)判斷,實(shí)現(xiàn)跳過一條指令執(zhí)行下一條指令的跳轉(zhuǎn)。
在I/O寄存器專用指令I(lǐng)N、OUT、SBI、CBI、SBIS和SBIC中使用I/O寄存器地址$OO~$3F。
當(dāng)以SRAM方式尋址I/0寄存器時(shí),必須將該其地址加上$0020,映射成在數(shù)據(jù)存儲(chǔ)器空間的地址。
兩個(gè)重要的寄存器:狀態(tài)寄存器SREG和堆棧指針寄存器SP
堆棧是數(shù)據(jù)結(jié)構(gòu)中所使用的專用名詞,它是由一塊連續(xù)的SRAM空間和一個(gè)堆棧指針寄存器組成,主要應(yīng)用于快速便捷的保存臨時(shí)數(shù)據(jù)、局部變量和中斷調(diào)用或子程序調(diào)用的返回地址。堆棧在系統(tǒng)程序的設(shè)計(jì)和運(yùn)行中起者非常重要的作用,只要程序中使用了中斷和子程序調(diào)用,就必須正確的設(shè)置堆棧指針寄存器SP,在SRAM空間建立堆棧區(qū)。
處在I/O地址空間的$3E($005E)和$3D($005D)的兩個(gè)8位寄存器構(gòu)成了AVR單片機(jī)的16位堆棧指針寄存器SP。AVR單片機(jī)復(fù)位后堆棧寄存器的初始值為SPH=$00、SPL=$00,因此建議用戶程序必須首先對(duì)堆棧指針寄存器SP進(jìn)行初始化設(shè)置。
AVR的堆棧區(qū)是建立在SRAM空間的,16位的SP寄存器可以尋址的空間為64K。
由于AVR的堆棧是向下增長的,即新數(shù)據(jù)進(jìn)入堆棧時(shí)棧頂指針的數(shù)據(jù)將減小(注意:這里與51不同,51的堆棧是向上增長的,即進(jìn)棧操作時(shí)棧頂指針的數(shù)據(jù)將增加),所以盡管原則上堆棧可以在SRAM的任何區(qū)域中,但通常初始化時(shí)將SP的指針設(shè)在SRAM最高處。
對(duì)于具體的ATmega16芯片,堆棧指針必須指向高于$0060的SRAM 地址空間,因?yàn)榈陀?0060的區(qū)域?yàn)榧拇嫫骺臻g。ATmega16片內(nèi)集成有1K的SRAM,不支持外部擴(kuò)展SRAM,所以堆棧指針寄存器SP的初始值應(yīng)設(shè)在SRAM的最高端:$045F處。
根據(jù)上面所講述,AVR的SP堆棧指針寄存器指示了在數(shù)據(jù)SRAM中堆棧區(qū)域的棧頂?shù)刂罚恍┡R時(shí)數(shù)據(jù)、局部變量,以及子程序返回地址和中斷返回地址將被放置在堆棧區(qū)域中。在數(shù)據(jù)SRAM中,該堆棧空間的頂部地址必須在系統(tǒng)程序初始化時(shí)由初始化程序定義和設(shè)置。
當(dāng)執(zhí)行PUSH指令,一個(gè)字節(jié)的數(shù)據(jù)被壓入堆棧,堆棧指針(SP中的數(shù)據(jù))將自動(dòng)減1;當(dāng)執(zhí)行子程序調(diào)用指令CALL或CPU響應(yīng)中斷時(shí),硬件會(huì)自動(dòng)把返回地址(16位數(shù)據(jù))壓入堆棧中,同時(shí)將堆棧指針自動(dòng)減2。反之,當(dāng)執(zhí)行POP指令,從堆棧頂部彈出一個(gè)字節(jié)的數(shù)據(jù),堆棧指針將自動(dòng)加1;當(dāng)執(zhí)行從子程序RET返回或從中斷RETI返回指令時(shí),返回地址將從堆棧頂部彈出,堆棧指針自動(dòng)加2。
從了解avr單片機(jī)到用例子來練習(xí)avr單片機(jī),這樣循序漸進(jìn)的來學(xué)習(xí),對(duì)學(xué)avr單片機(jī)是一個(gè)很不錯(cuò)的方法,不要覺得很難,你掌握了不就不難了嗎,這些方法你都了解了嗎,尤其是這個(gè)例子,對(duì)學(xué)習(xí)avr單片機(jī)還是很有用的,記得勤加練習(xí)哦。
相關(guān)推薦:單片機(jī)學(xué)習(xí)