<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        AVR單片機學習(一)

        作者:zww 1988   來源:本站原創   點擊數:  更新時間:2014年04月18日   【字體:

        一、基礎篇

         

        單片機的基本要素

        •    CPU核(如:51核   AVR核 M430核)
        •    ROM(READ ONLY Memory 繞母)
        •    RAM(random access Memory 隨機訪問寄存器 
        •    片上外設
        •    總線  

        CPU核:相當于電腦的CPU吧、就是執行從ROM中取指令。這東西有幾個指標非常重要

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

        二、指令集  (CISC(復雜) RISC(精簡)當然精簡指令集比復雜執行效率高很多個人覺得缺點實現的功能少 )

        三、字長 (就是一次能處理二進制數據的位數  我們單片機一般是8位  16位   AVR和51都是8位)

        ROM:相當于電腦的硬盤、存儲程序用的指標就是容量   大多數是flash 結構基本都混淆說了

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

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

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

            MSP430F1101(具備)--> 1KB

            AVR(具備)---> 16KB

        RAM:數據存儲器、相當于計算機的內存、ROM中的程序在運行時快速的存取數據、目前大多數單

             片機為SRAM結構 計算機室SDRAM結構。指標也是容量 一般 B(字節)  KB(千字節)

        一、容量  、

            如: 51單片機512字節 

                MSP430F1101 128字節

                AVR 1KB  1千字節

        主要是程序運行時調用一些變量啊調用一些數組等都是存在RAM中的。

        片上外設相當于電腦的接口,鼠標接口、顯示器接口等

            常見的片上外設模塊有外部中斷、定時器/計數器、URAT(異步串行)、SPI(同步)IIC(2線的串行口)ADC

            及模擬比較器等。

        如:一下三種價格10元左右的單片機

            一、89C52就只有外部中斷   定時器計數器   UART

            二、MSP430F1101   外部中斷   定時器計數器  ADC

            三、AVR 外部中斷、定時器/計數器、URAT(異步串行)、SPI(同步串行)IIC(2線的串行口)ADC

            及模擬比較器。

        總線:用于以上四部分之間的傳輸數據的通道、相當于硬盤的IDE線、光驅線等。

           總線只是一個概念。沒有一個實際的這樣的一個東西、這個東西我也不太清楚可以理解為一束功能相近的導線

           的集合吧。
        單片機能做什么?

        單片機無所不能!

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

        覆蓋工業生產、日常生活、軍事設備、科研儀表儀器等所有智能化的應用場合

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

        定時完成洗衣脫水功能。

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

        實現洗凈既停的功能。

        蒸汽熨燙的功能。

        刷卡投幣洗衣

        更加智能LG公司的"IPAD"洗衣機一邊洗衣一邊聽歌。

        例如:(LED顯示屏)

        LED發光二極管構成顯示屏的像素點

        單片機負責逐點火逐行掃描,并與電腦通信獲取圖片信息。

        例如:(PH/ORP儀表)

        用于環境監測、工礦企業、科學研究、水產養殖等場合的PH值的測定

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

        還有很多數碼產品。。。

        還有智能小車(我上大學時就做過這樣一個東西呵呵用ATMEGA8)

        一、巡線

        二、避障

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

        四、LCD顯示

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

        二、單片機的開發工具

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

        • 軟件開發環境

             編輯與編譯軟件:WinAVR

             仿真調試軟件:AVR Studio

             下載軟件:MuCode ISP

        • 硬件開發環境

             仿真調試工具:JatgICE

             下載線工具:STK200/300

             學習板、開發板一塊(型號 *-**-M16)

         

         參考技術手冊 AVR官方中文版技術手冊《AVR單片機與GCC編程》


         

        AVR單片機簡介

        AVR單片機的性價比遠高于51單片機

        一、高速 、RISC、主頻最高可達20MHZ(首先主頻就快10倍 RISC又擴大好幾倍。)

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

        三、I/O驅動能力強、推拉電流能力均達30mA ,可以直接驅動繼電器、蜂鳴器等。

            (51 拉電流強估計有小于10mA 推電流基本是0   幾百個微安了

        四、片內資源豐富:外部中斷、定時器/計數器、UART、SPI、IIC、ADC、模擬比較器。

            尤其值得一提的是AVR的定時器功能也是非常強的能夠實現PWM功能或輸入捕獲功能、PWM功能

            是非常強的可以用于電機的控制。

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

            相應的產品了)如下圖。


        ATMEGA系列中的ATmega16 應該算是我們用的最多一款因為很多人都是用它學習AVR單片機學習的入門。



        上圖三個是官方提供的開發工具  MK2仿真器:

         JTAG   ICE:   這個可以自制

        選擇AVR開發有一下幾個優點

        1、最小系統容易實現設計容易、只需要連接電源 焊接晶振就可以工作(當然如果對時鐘要求不是很嚴格的話

           連晶振都可以不要的不像51單片機需要晶振、EA腳上拉上電復位電路、而AVR單片機內部自帶內部上電復位

           電路的)。

        2、很多概念符合初學者的思路、理解起來更容易:例如AVR時鐘源(晶振、內部RC等)不經過分頻直接提供

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

           算就比較麻煩算定時周期就幻暈。

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

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

        4、AVR的C語言編程與C語言教科書上的標準C語言語法是幾乎一樣的,不像51的C語言,一些bit srf 之類的變

           量定義在教科書中是找不到的,有利于后期的嵌入式學習。

        實際例子:



        電路圖可以看到8個發光二極管可以進行閃爍和顯示二進制顯示等。

            有圖中可以看到這是ATmega16 單片機,它的最小系統是非常簡單的只要GND接地 VCC接+5V就可以了右邊

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

        下面是如何用萬用板焊接和編譯程序:

           焊接萬用板就不說了,太簡單了只要小心翼翼就ok了。焊接完成后,把ATmega 16 插到插座上,我們往單片機固化的程序采用的是我們自制的一個下載線如下圖:

        這個下載線電路還是比較簡單的,只需要一片 74HC244(也可以直接跟并口相連,用244的原因是因為防止燒壞并口所以接了一個緩沖器,其實就是用并口模擬的時序ISP)  然后插到計算機后面的并口上,標準的AVR單片機下載線是10芯的接口的,但是只有其中的6芯是有用的。所以我們自制了一個10芯轉6芯的一個線,把其中有用的6芯給引出來,順序跟我們電路圖上的一樣的。然后把這個6芯線插到單片機引出的下載線的6芯接口上。然后找來一個5V電源然后插到單片機上的電源供電口,然后把下載線的軟件下載軟件 MuCode ISP  如下圖是圖標和打開后的樣子:





        下面我們編譯一個測試代碼:(打開AVR studio下圖)




        點擊:New Project 彈出下圖


        第一項: ADORD  AVR assemble  這個是會變得 這個是新建一個匯編語言的項目

        第二項:AVR GCC  這個是C語言的項目 Project name 起個項目名字 test0

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

        點擊:finish  完成


        點擊:Next 下一步

        下面的這步是選擇仿真調試的工具和將要開發的單片機的型號:如下圖


        調試工具由于我們小板上沒有喊JATG ICE接口 如果焊了我們可以選JTAG ICE 選項會如下圖:

        因為沒有焊,我們直接下載到單片機運行驗證。所以我們不選 JTAG ICE 選AVR Standlitor 意思就是軟件仿真不用仿真器 然后右邊選AT mega 16  如下圖

        點擊:finish  進入環境 軟件自動為我們建立一個.C 文件


        因為C語言文件必須包含基本的頭文件

        #include

        int main (void ){ //avr GCC的語法呢  的這個main函數必須是int 類型的 且沒有返回值的

        //由于發光二極管陽極是接在PD口上 屬于PD口輸出型的所以要把整個PD口都置為輸出

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

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

           while(1){//因為單片機的程序不像PC機程序可以退出,所以單片機上電之后一般都是死循環的

              PORTD  =0b11100110; //這個表示TD口第一個數據寄存器 給它賦值就等于賦值了

              //0b表示 二進制   是從7位到第0位  左位高位

         

         

           

           }

        }

        //然后點擊編譯 如下圖



         

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

         點擊:progarm 如下圖

        可以看到:如下圖所表現

        下面加一些動態效果能夠讓燈閃爍起來 無非是讓產生兩種狀態  還有就是這個所有位就是取反

        #include

        int main (void ){ //avr GCC的語法呢  的這個main函數必須是int 類型的 且沒有返回值的

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

           while(1){

              int i =0,j=0;

              PORTD  =0b11100110;

              //其實執行這條C語句大概需要2條匯編指令的周期 而這個單片機的時鐘周期是1MHZ  默認的是內部RC

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

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

               for (i=0;i<10000;i++);//估算下這個for 循環消耗多長時間  每條指令幾個微妙 而一個i++

               大概5條指令

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

              

         

              PORTD  =0b00011001;//執行完了  加一個延時跟上面一樣

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

               for (i=0;i<10000;i++);//估算下這個for 循環消耗多長時間  每條指令幾個微妙 而一個i++

               大概5條指令

           

           }

        }

        編譯驗證下:


         

        可以看到mucode isp 自動就下載進去了。 因為有個選項是下圖



        這個勾上后就沒當這個文件更新之后就自動下載到單片機里了。下面可以看到現象每隔1秒閃爍一次





         

        由此說明我們的程序是成功的。今天到此結束。  bye  !

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

        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮