avr單片機編程入門精品,新手學習必看(有典型實例哦)

單片機分為很多種,有什麼avr單片機,stm32單片機等,隨著單片機被廣泛的使用,這些都是在單片機學習中需要接觸的,有很多人問我:對於avr單片機編程來說,學習這個的時候很是迷茫,死活入不了門,到底avr單片機編程如何入門,這裡就讓我這個老鳥教會你。

首先要知道,avr單片機是什麼?不然不瞭解這個,那接下來的學習也是白瞎,AVR單片機是1997年由ATMEL公司研發出的增強型內置Flash的RISC(Reduced Instruction Set CPU) 精簡指令集高速8位單片機。可以廣泛應用於計算機外部設備、工業實時控制、儀器儀表、通訊設備、家用電器等各個領域。

AVR單片機特點(ATmega16):

1、131條機器指令,且大多數指令的執行時間為單個系統時鐘週期;

2、32個8位通用工作寄存器;

3、工作在16MHz時具有16MIPS的性能;

4、配備只需要2個時鐘週期的硬件乘法器。

AVR單片機優勢:

AVR單片機是Atmel公司推出的較為新穎的單片機,其顯著的特點為高性能、高速度、低功耗。它取消機器週期,以時鐘週期為指令週期,實行流水作 業。AVR單片機指令以字為單位,且大部分指令都為單週期指令。而單週期既可執行本指令功能,同時完成下一條指令的讀取。通常時鐘頻率用4~8MHz,故 最短指令執行時間為250~125ns。

瞭解了這些,那接下來就通過一系列的實例,讓你對avr單片機瞭解透徹

系統時鐘:

ATmega16的片內含有4種頻率(1/2/4/8M)的RC振盪源,可直接作為系統的工作時鐘使用。同時片內還設有一個由反向放大器所構成的OSC(Oscillator)振盪電路,外圍引腳XTAL1和XTAL2分別為OSC振盪電路的輸入端和輸出端,用於外接石英晶體等,構成高精度的或其它標稱頻率的系統時鐘系統。

為ATmega16提供系統時鐘源時,有三種主要的選擇:(1)直接使用片內的1/2/4/8M的RC振盪源;(2)在引腳XTAL1和XTAL2上外接由石英晶體和電容組成的諧振迴路,配合片內的OSC(Oscillator)振盪電路構成的振盪源;(3)直接使用外部的時鐘源輸出的脈衝信號。方式2和方式3的電路連接見圖2-6(a)和2-6(b)。

avr單片機編程入門精品,新手學習必看(有典型實例哦)

內部看門狗:

在AVR片內還集成了一個1MHz獨立的時鐘電路,它僅供片內的看門狗定時器(WDT)使用。因此,AVR片內的WDT是獨立硬件形式的看門狗,使用AVR可以省掉外部的WDT芯片。使用WDT可以有效的提高系統的可靠行。

avr單片機的工作流程:

AVR CPU的工作是由系統時鐘直接驅動的,在片內不再進行分頻。圖2-7所示為Harvard結構和快速訪問寄存器組的並行指令存取和指令執行時序。CPU在啟動後第一個時鐘週期T1取出第一條指令,在T2週期便執行取出的指令,並同時又取出第二條指令,依次進行。這種基於流水線形式的取指方式,使AVR可以以非常高的速度執行指令,獲得高達1MIPS/MHz的效率。

存儲器:

所有的I/O寄存器可以通過IN(I/O口輸入)和OUT(輸出到I/O口)指令訪問,這些指令是在32個通用寄存器與I/O寄存器空間之間傳輸交換數據,指令週期為1個時鐘週期。此外,I/O寄存器地址範圍在$00-$1F之間的寄存器(前32個)還可通過指令實現bit位操作和bit位判斷跳轉。SBI(I/O寄存器中指定位置1)和CBI(I/O寄存器中指定位清零)指令可直接對I/O寄存器中的每一位進行位操作。使用SBIS(I/O寄存器中指定位為1跳行)和SBIC(I/O寄存器中指定位為0跳行)指令能夠對這些I/O寄存器中的每一位的值進行檢驗判斷,實現跳過一條指令執行下一條指令的跳轉。

avr單片機編程入門精品,新手學習必看(有典型實例哦)

在I/O寄存器專用指令IN、OUT、SBI、CBI、SBIS和SBIC中使用I/O寄存器地址$OO~$3F。

當以SRAM方式尋址I/0寄存器時,必須將該其地址加上$0020,映射成在數據存儲器空間的地址。

兩個重要的寄存器:狀態寄存器SREG和堆棧指針寄存器SP

堆棧是數據結構中所使用的專用名詞,它是由一塊連續的SRAM空間和一個堆棧指針寄存器組成,主要應用於快速便捷的保存臨時數據、局部變量和中斷調用或子程序調用的返回地址。堆棧在系統程序的設計和運行中起者非常重要的作用,只要程序中使用了中斷和子程序調用,就必須正確的設置堆棧指針寄存器SP,在SRAM空間建立堆棧區。

處在I/O地址空間的$3E($005E)和$3D($005D)的兩個8位寄存器構成了AVR單片機的16位堆棧指針寄存器SP。AVR單片機復位後堆棧寄存器的初始值為SPH=$00、SPL=$00,因此建議用戶程序必須首先對堆棧指針寄存器SP進行初始化設置。

AVR的堆棧區是建立在SRAM空間的,16位的SP寄存器可以尋址的空間為64K。

由於AVR的堆棧是向下增長的,即新數據進入堆棧時棧頂指針的數據將減小(注意:這裡與51不同,51的堆棧是向上增長的,即進棧操作時棧頂指針的數據將增加),所以儘管原則上堆棧可以在SRAM的任何區域中,但通常初始化時將SP的指針設在SRAM最高處。

對於具體的ATmega16芯片,堆棧指針必須指向高於$0060的SRAM 地址空間,因為低於$0060的區域為寄存器空間。ATmega16片內集成有1K的SRAM,不支持外部擴展SRAM,所以堆棧指針寄存器SP的初始值應設在SRAM的最高端:$045F處。

根據上面所講述,AVR的SP堆棧指針寄存器指示了在數據SRAM中堆棧區域的棧頂地址,一些臨時數據、局部變量,以及子程序返回地址和中斷返回地址將被放置在堆棧區域中。在數據SRAM中,該堆棧空間的頂部地址必須在系統程序初始化時由初始化程序定義和設置。

當執行PUSH指令,一個字節的數據被壓入堆棧,堆棧指針(SP中的數據)將自動減1;當執行子程序調用指令CALL或CPU響應中斷時,硬件會自動把返回地址(16位數據)壓入堆棧中,同時將堆棧指針自動減2。反之,當執行POP指令,從堆棧頂部彈出一個字節的數據,堆棧指針將自動加1;當執行從子程序RET返回或從中斷RETI返回指令時,返回地址將從堆棧頂部彈出,堆棧指針自動加2。

通過這些原理及實例,你是否對avr單片機編程有了更深入的瞭解呢,其實avr單片機學習並不難,只要你認真去學,把每一步每一個流程都掌握透徹,那你就在avr單片機編程方面就已經入門了,這些你是否get到了呢?


分享到:


相關文章: