專(zhuān)注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

AVR單片機(jī)學(xué)習(xí)(一)

作者:zww 1988   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2014年04月18日   【字體:

一、基礎(chǔ)篇

 

單片機(jī)的基本要素

  •    CPU核(如:51核   AVR核 M430核)
  •    ROM(READ ONLY Memory 繞母)
  •    RAM(random access Memory 隨機(jī)訪(fǎng)問(wèn)寄存器 
  •    片上外設(shè)
  •    總線(xiàn)  

CPU核:相當(dāng)于電腦的CPU吧、就是執(zhí)行從ROM中取指令。這東西有幾個(gè)指標(biāo)非常重要

一、主頻(如51核是2MHZ晶振12分頻過(guò)來(lái)就是2MHZ、AVR 是20MHZ(快達(dá)到DSP水平了)MSP430F1系列的是8MHZ)

二、指令集  (CISC(復(fù)雜) RISC(精簡(jiǎn))當(dāng)然精簡(jiǎn)指令集比復(fù)雜執(zhí)行效率高很多個(gè)人覺(jué)得缺點(diǎn)實(shí)現(xiàn)的功能少 )

三、字長(zhǎng) (就是一次能處理二進(jìn)制數(shù)據(jù)的位數(shù)  我們單片機(jī)一般是8位  16位   AVR和51都是8位)

ROM:相當(dāng)于電腦的硬盤(pán)、存儲(chǔ)程序用的指標(biāo)就是容量   大多數(shù)是flash 結(jié)構(gòu)基本都混淆說(shuō)了

一、容量   單位一般KB位單位 

二、高級(jí)指標(biāo) 、自編能力(就是程序在運(yùn)行中可以自己擦出flash然后更改flash中的內(nèi)容的能力一般我們用不到)

如:51(不具備自編能力)-->8KB  

    MSP430F1101(具備)--> 1KB

    AVR(具備)---> 16KB

RAM:數(shù)據(jù)存儲(chǔ)器、相當(dāng)于計(jì)算機(jī)的內(nèi)存、ROM中的程序在運(yùn)行時(shí)快速的存取數(shù)據(jù)、目前大多數(shù)單

     片機(jī)為SRAM結(jié)構(gòu) 計(jì)算機(jī)室SDRAM結(jié)構(gòu)。指標(biāo)也是容量 一般 B(字節(jié))  KB(千字節(jié))

一、容量 

    如: 51單片機(jī)512字節(jié) 

        MSP430F1101 128字節(jié)

        AVR 1KB  1千字節(jié)

主要是程序運(yùn)行時(shí)調(diào)用一些變量啊調(diào)用一些數(shù)組等都是存在RAM中的。

片上外設(shè)相當(dāng)于電腦的接口,鼠標(biāo)接口、顯示器接口等

    常見(jiàn)的片上外設(shè)模塊有外部中斷、定時(shí)器/計(jì)數(shù)器、URAT(異步串行)、SPI(同步)IIC(2線(xiàn)的串行口)ADC

    及模擬比較器等。

如:一下三種價(jià)格10元左右的單片機(jī)

    一、89C52就只有外部中斷   定時(shí)器計(jì)數(shù)器   UART

    二、MSP430F1101   外部中斷   定時(shí)器計(jì)數(shù)器  ADC

    三、AVR 外部中斷、定時(shí)器/計(jì)數(shù)器、URAT(異步串行)、SPI(同步串行)IIC(2線(xiàn)的串行口)ADC

    及模擬比較器。

總線(xiàn):用于以上四部分之間的傳輸數(shù)據(jù)的通道、相當(dāng)于硬盤(pán)的IDE線(xiàn)、光驅(qū)線(xiàn)等。

   總線(xiàn)只是一個(gè)概念。沒(méi)有一個(gè)實(shí)際的這樣的一個(gè)東西、這個(gè)東西我也不太清楚可以理解為一束功能相近的導(dǎo)線(xiàn)

   的集合吧。
單片機(jī)能做什么?

單片機(jī)無(wú)所不能!

所謂的“微電腦控制控制”的核心就是單片機(jī)(微電腦控制比較時(shí)髦的)

覆蓋工業(yè)生產(chǎn)、日常生活、軍事設(shè)備、科研儀表儀器等所有智能化的應(yīng)用場(chǎng)合

例如:智能洗衣機(jī)(一般洗衣機(jī)不能完成的功能)

定時(shí)完成洗衣脫水功能。

可以判斷衣服的干凈程度。

實(shí)現(xiàn)洗凈既停的功能。

蒸汽熨燙的功能。

刷卡投幣洗衣

更加智能LG公司的"IPAD"洗衣機(jī)一邊洗衣一邊聽(tīng)歌。

例如:(LED顯示屏)

LED發(fā)光二極管構(gòu)成顯示屏的像素點(diǎn)

單片機(jī)負(fù)責(zé)逐點(diǎn)火逐行掃描,并與電腦通信獲取圖片信息。

例如:(PH/ORP儀表)

用于環(huán)境監(jiān)測(cè)、工礦企業(yè)、科學(xué)研究、水產(chǎn)養(yǎng)殖等場(chǎng)合的PH值的測(cè)定

讀取PH傳感器的模擬信號(hào)、內(nèi)部處理后顯示在LCD上。(其實(shí)就是讀取液體的PH值)

還有很多數(shù)碼產(chǎn)品。。。

還有智能小車(chē)(我上大學(xué)時(shí)就做過(guò)這樣一個(gè)東西呵呵用ATMEGA8)

一、巡線(xiàn)

二、避障

三、電視機(jī)遙控器遙控(接受各個(gè)遙控器的鍵碼)

四、LCD顯示

----------------------------------------------------------------------------------

二、單片機(jī)的開(kāi)發(fā)工具

  • 編程器(燒寫(xiě)器):將編譯出來(lái)的目標(biāo)代碼固化到單片機(jī)的ROM內(nèi)。(老的把單片機(jī)插到編程器上)
  • 下載線(xiàn):作用與編程器相同(ISP 通過(guò)一條下載線(xiàn)4根線(xiàn)和單片機(jī)通信就可以把代碼下載到單片機(jī)、好處不需要把單片機(jī)從電路板拔下來(lái))
  • 仿真器:對(duì)單片機(jī)的程序進(jìn)行單步調(diào)試、設(shè)置斷點(diǎn)等,便于查找程序中的錯(cuò)誤。其中JTAG仿真器可以在線(xiàn)仿真調(diào)試(它也分為2種一種是傳統(tǒng)的需要把單片機(jī)拔下來(lái)然后把仿真器的仿真頭插到板子上、通過(guò)后再把代碼固化到單片機(jī)中然后把單片機(jī)放回板子上、最近新型的JTAG仿真器是屬于在線(xiàn)仿真左邊的、你只需要把單片機(jī)插到板子上把JTAG跟單片機(jī)相連接就可以進(jìn)行仿真與調(diào)試同事JTAG也具有把代碼固化到單片機(jī)中的能力、所以有仿真器的話(huà)下載線(xiàn)基本可以省了。)

  • 軟件開(kāi)發(fā)環(huán)境

     編輯與編譯軟件:WinAVR

     仿真調(diào)試軟件:AVR Studio

     下載軟件:MuCode ISP

  • 硬件開(kāi)發(fā)環(huán)境

     仿真調(diào)試工具:JatgICE

     下載線(xiàn)工具:STK200/300

     學(xué)習(xí)板、開(kāi)發(fā)板一塊(型號(hào) *-**-M16)

 

 參考技術(shù)手冊(cè) AVR官方中文版技術(shù)手冊(cè)《AVR單片機(jī)與GCC編程》


 

AVR單片機(jī)簡(jiǎn)介

AVR單片機(jī)的性?xún)r(jià)比遠(yuǎn)高于51單片機(jī)

一、高速 、RISC、主頻最高可達(dá)20MHZ(首先主頻就快10倍 RISC又?jǐn)U大好幾倍。)

二、低功耗、寬電壓(1.8V---5.5V)。最低全速運(yùn)行功耗<300uA

三、I/O驅(qū)動(dòng)能力強(qiáng)、推拉電流能力均達(dá)30mA ,可以直接驅(qū)動(dòng)繼電器、蜂鳴器等。

    (51 拉電流強(qiáng)估計(jì)有小于10mA 推電流基本是0   幾百個(gè)微安了

四、片內(nèi)資源豐富:外部中斷、定時(shí)器/計(jì)數(shù)器、UART、SPI、IIC、ADC、模擬比較器。

    尤其值得一提的是AVR的定時(shí)器功能也是非常強(qiáng)的能夠?qū)崿F(xiàn)PWM功能或輸入捕獲功能、PWM功能

    是非常強(qiáng)的可以用于電機(jī)的控制。

五、型號(hào)齊全、而且40腳以下的AVR均具有DIP封裝形式。(8腳到100腳需要的領(lǐng)域基本都有

    相應(yīng)的產(chǎn)品了)如下圖。


ATMEGA系列中的ATmega16 應(yīng)該算是我們用的最多一款因?yàn)楹芏嗳硕际怯盟鼘W(xué)習(xí)AVR單片機(jī)學(xué)習(xí)的入門(mén)。



上圖三個(gè)是官方提供的開(kāi)發(fā)工具  MK2仿真器:

 JTAG   ICE:   這個(gè)可以自制

選擇AVR開(kāi)發(fā)有一下幾個(gè)優(yōu)點(diǎn)

1、最小系統(tǒng)容易實(shí)現(xiàn)設(shè)計(jì)容易、只需要連接電源 焊接晶振就可以工作(當(dāng)然如果對(duì)時(shí)鐘要求不是很?chē)?yán)格的話(huà)

   連晶振都可以不要的不像51單片機(jī)需要晶振、EA腳上拉上電復(fù)位電路、而AVR單片機(jī)內(nèi)部自帶內(nèi)部上電復(fù)位

   電路的)。

2、很多概念符合初學(xué)者的思路、理解起來(lái)更容易:例如AVR時(shí)鐘源(晶振、內(nèi)部RC等)不經(jīng)過(guò)分頻直接提供

   給CPU使用,而51的主頻等于晶振的12分頻這個(gè)大家都知道的、所以這一點(diǎn)算定時(shí)器的時(shí)候非常方便,而51

   算就比較麻煩算定時(shí)周期就幻暈。

3、AVR即具有簡(jiǎn)單的、可以自制的ISP下載線(xiàn)和Jtage仿真器,又有DIP直插的封裝形式。(51占用一個(gè)串口,

   是不能仿真串口的,屬于軟仿真,DIP直插很容易讓初學(xué)者學(xué)習(xí)像430就沒(méi)有DIP)

4、AVR的C語(yǔ)言編程與C語(yǔ)言教科書(shū)上的標(biāo)準(zhǔn)C語(yǔ)言語(yǔ)法是幾乎一樣的,不像51的C語(yǔ)言,一些bit srf 之類(lèi)的變

   量定義在教科書(shū)中是找不到的,有利于后期的嵌入式學(xué)習(xí)。

實(shí)際例子:



電路圖可以看到8個(gè)發(fā)光二極管可以進(jìn)行閃爍和顯示二進(jìn)制顯示等。

    有圖中可以看到這是ATmega16 單片機(jī),它的最小系統(tǒng)是非常簡(jiǎn)單的只要GND接地 VCC接+5V就可以了右邊

的AGND/AVCC/AREF這三個(gè)腳是你用到片內(nèi)模/數(shù)轉(zhuǎn)換 ADC或模擬比較器的時(shí)候需要把這三個(gè)腳接上電源,如果正常用不到可以懸空就可以了。還有RESET可以懸空。Hander6 是一個(gè)簡(jiǎn)易的下載線(xiàn)的接口 MOSI , MISO,  SCK,RESET共4根線(xiàn)、8個(gè)二極管的陽(yáng)極接PD0---PD7 (學(xué)過(guò)51的都知道一般都是陰極接I/O口這是因?yàn)?1的灌電流能力很強(qiáng),拉電流很弱)。這樣陽(yáng)極接I/O口也比較符合初學(xué)者的思維,I/O口輸出1二極管是點(diǎn)亮的。

下面是如何用萬(wàn)用板焊接和編譯程序:

   焊接萬(wàn)用板就不說(shuō)了,太簡(jiǎn)單了只要小心翼翼就ok了。焊接完成后,把ATmega 16 插到插座上,我們往單片機(jī)固化的程序采用的是我們自制的一個(gè)下載線(xiàn)如下圖:

這個(gè)下載線(xiàn)電路還是比較簡(jiǎn)單的,只需要一片 74HC244(也可以直接跟并口相連,用244的原因是因?yàn)榉乐篃龎牟⒖谒越恿艘粋(gè)緩沖器,其實(shí)就是用并口模擬的時(shí)序ISP)  然后插到計(jì)算機(jī)后面的并口上,標(biāo)準(zhǔn)的AVR單片機(jī)下載線(xiàn)是10芯的接口的,但是只有其中的6芯是有用的。所以我們自制了一個(gè)10芯轉(zhuǎn)6芯的一個(gè)線(xiàn),把其中有用的6芯給引出來(lái),順序跟我們電路圖上的一樣的。然后把這個(gè)6芯線(xiàn)插到單片機(jī)引出的下載線(xiàn)的6芯接口上。然后找來(lái)一個(gè)5V電源然后插到單片機(jī)上的電源供電口,然后把下載線(xiàn)的軟件下載軟件 MuCode ISP  如下圖是圖標(biāo)和打開(kāi)后的樣子:





下面我們編譯一個(gè)測(cè)試代碼:(打開(kāi)AVR studio下圖)




點(diǎn)擊:New Project 彈出下圖


第一項(xiàng): ADORD  AVR assemble  這個(gè)是會(huì)變得 這個(gè)是新建一個(gè)匯編語(yǔ)言的項(xiàng)目

第二項(xiàng):AVR GCC  這個(gè)是C語(yǔ)言的項(xiàng)目 Project name 起個(gè)項(xiàng)目名字 test0

最下面的location 這個(gè)是路徑   我們可以選擇放在桌面上 (桌面上新建一個(gè)文件夾放進(jìn)去就行了)

點(diǎn)擊:finish  完成


點(diǎn)擊:Next 下一步

下面的這步是選擇仿真調(diào)試的工具和將要開(kāi)發(fā)的單片機(jī)的型號(hào):如下圖


調(diào)試工具由于我們小板上沒(méi)有喊JATG ICE接口 如果焊了我們可以選JTAG ICE 選項(xiàng)會(huì)如下圖:

因?yàn)闆](méi)有焊,我們直接下載到單片機(jī)運(yùn)行驗(yàn)證。所以我們不選 JTAG ICE 選AVR Standlitor 意思就是軟件仿真不用仿真器 然后右邊選AT mega 16  如下圖

點(diǎn)擊:finish  進(jìn)入環(huán)境 軟件自動(dòng)為我們建立一個(gè).C 文件


因?yàn)镃語(yǔ)言文件必須包含基本的頭文件

#include

int main (void ){ //avr GCC的語(yǔ)法呢  的這個(gè)main函數(shù)必須是int 類(lèi)型的 且沒(méi)有返回值的

//由于發(fā)光二極管陽(yáng)極是接在PD口上 屬于PD口輸出型的所以要把整個(gè)PD口都置為輸出

//PD端口方向寄存器 叫做  DORD =0XFF的時(shí)候

DDRD =0XFF;//0到7  都置為輸出

   while(1){//因?yàn)閱纹瑱C(jī)的程序不像PC機(jī)程序可以退出,所以單片機(jī)上電之后一般都是死循環(huán)的

      PORTD  =0b11100110; //這個(gè)表示TD口第一個(gè)數(shù)據(jù)寄存器 給它賦值就等于賦值了

      //0b表示 二進(jìn)制   是從7位到第0位  左位高位

 

 

   

   }

}

//然后點(diǎn)擊編譯 如下圖



 

然后用 MuCode ISP   下載到單片機(jī)中 file ->open  flash

 點(diǎn)擊:progarm 如下圖

可以看到:如下圖所表現(xiàn)

下面加一些動(dòng)態(tài)效果能夠讓燈閃爍起來(lái) 無(wú)非是讓產(chǎn)生兩種狀態(tài)  還有就是這個(gè)所有位就是取反

#include

int main (void ){ //avr GCC的語(yǔ)法呢  的這個(gè)main函數(shù)必須是int 類(lèi)型的 且沒(méi)有返回值的

DDRD =0XFF;//方向寄存器

   while(1){

      int i =0,j=0;

      PORTD  =0b11100110;

      //其實(shí)執(zhí)行這條C語(yǔ)句大概需要2條匯編指令的周期 而這個(gè)單片機(jī)的時(shí)鐘周期是1MHZ  默認(rèn)的是內(nèi)部RC

      振蕩1MHZ 這樣也就是每條指令時(shí)us級(jí)  所以人的眼睛是看不到的。加延時(shí)

    for (j=0;j<10;j++) 

       for (i=0;i<10000;i++);//估算下這個(gè)for 循環(huán)消耗多長(zhǎng)時(shí)間  每條指令幾個(gè)微妙 而一個(gè)i++

       大概5條指令

     所以10000 * 5 *2 = 100000   大概50毫秒 所以讓這條for 執(zhí)行10次左右

      

 

      PORTD  =0b00011001;//執(zhí)行完了  加一個(gè)延時(shí)跟上面一樣

       for (j=0;j<10;j++) 

       for (i=0;i<10000;i++);//估算下這個(gè)for 循環(huán)消耗多長(zhǎng)時(shí)間  每條指令幾個(gè)微妙 而一個(gè)i++

       大概5條指令

   

   }

}

編譯驗(yàn)證下:


 

可以看到mucode isp 自動(dòng)就下載進(jìn)去了。 因?yàn)橛袀(gè)選項(xiàng)是下圖



這個(gè)勾上后就沒(méi)當(dāng)這個(gè)文件更新之后就自動(dòng)下載到單片機(jī)里了。下面可以看到現(xiàn)象每隔1秒閃爍一次





 

由此說(shuō)明我們的程序是成功的。今天到此結(jié)束。  bye  !

最后送大家一句話(huà): Nothing is impossible to a willing heart   

關(guān)閉窗口

相關(guān)文章