<var id="fnfpo"><source id="fnfpo"></source></var>
<rp id="fnfpo"></rp>

<em id="fnfpo"><object id="fnfpo"><input id="fnfpo"></input></object></em>
<em id="fnfpo"><acronym id="fnfpo"></acronym></em>
  • <th id="fnfpo"><track id="fnfpo"></track></th>
  • <progress id="fnfpo"><track id="fnfpo"></track></progress>
  • <tbody id="fnfpo"><pre id="fnfpo"></pre></tbody>

  • x
    x

    AVR單片機ATmega16與計算機串行通信的實現

    發布時間:2012-9-13 17:12    發布者:wp1981
    關鍵詞: ATmega16 串行通信 , Visual Basic
    作者:韋曉茹, 蔡志堅, 居戩之 來源:微型機與應用2012年第14期

    摘  要:介紹AVR單片機ATmega16和計算機的串行通信的軟、硬件設計,采用Visual Basic6.0中的MSComm通信控件實現計算機與單片機ATmega16之間的串行通信。文章詳細闡述了程序的設計流程,并給出了部分程序代碼。實驗證明該系統可以實現ATmega16與計算機之間的通信。

    AVR單片機[1]是美國ATMEL公司的精簡指令集單片機,大多數是單周期指令,運行速度快。AVR單片機帶有Flash程序存儲器,擦寫方便,支持ISP(串行在線下載),便于產品的調試、開發和更新。ATmega16是AVR單片機家族中的高檔產品,是目前占主流、高信價比的AVR芯片之一。ATmega16的主要特點有:功耗低,在正常模式下只有1.1 mA;最高工作頻率可達16 MHz;具有可擦寫的16 KB的可編程Flash;內含8路10 bit ADC;具有高度靈活的串行通信設備USART,使用時只需設置相關的寄存器參數就可以實現串行通信。

    EIA-232是常用的串行通信[2]技術標準之一,是目前通信工業中應用最廣泛的一種串行接口,這是由于工業領域對產品的可靠性和穩定性的要求更高,EIA標準下的串行通信技術完全可以滿足人們對工業設備傳輸的各種性能要求,使得EIA串口通信在系統控制[3-5]的范疇中一直占據著極其重要的地位。計算機和單片機的EIA-232串行通信是許多測控系統常用的一種通信解決方案。本文介紹了計算機和單片機ATmega16之間EIA-232串行通信的實現。計算機作為上位機,單片機作為下位機。

    1 硬件設計

    圖1為EIA-232串行通信系統的結構框圖。



    EIA-232用正、負電壓來表示邏輯狀態,有效負電平的狀態為邏輯1,有效正電平的狀態為邏輯0;而單片機使用的TTL電平是以高、低電平表示1和0兩種邏輯狀態,因此將兩者相連必需進行電平邏輯關系的變換。圖1中的芯片MAX232就是將TTL和RS232電平相互轉換的器件。

    圖2為EIA-232串行通信電原理圖。電壓VCC可采用5 V供電。



    圖2中的D Connector9是用于連接計算機串行口的接插件,5腳是接地端,3腳是發送端TXD,2腳是接收端RXD。TXD端的電平經MAX232轉換為TTL電平后送給單片機的接收端;單片機發送出的TTL電平的數據經MAX232轉換為RS232電平經RXD傳送給計算機。ATmega16工作時使用系統內部時鐘8 MHz,不需外接晶振,只需在燒錄程序時設置相關參數即可使用內部時鐘。圖2中標號為UP的是一個10腳的接插件,通過這個接插件與程序燒錄器相連即可實現單片機程序的燒錄操作,方便產品升級。

    2 上位機程序設計

    上位機程序的編寫采用Visual Basic6.0的編程環境。使用Visual Basic6.0的MSComm串行通信控件,非常容易實現串口通信,使用時要對串行通信的信息格式和協議進行設置。每個通信控件對應一個串口, 如果要訪問多個通信口, 則要設計多個通信控件。

    計算機與單片機之間的通信采用查詢的工作方法,計算機作為上位機,單片機作為下位機。計算機主要負責發送控制命令以及數據的發送、接收、處理、計算和顯示等功能。計算機的程序設計包括界面設計以及程序代碼的編寫。圖3為設計的程序界面,圖3中含有發送數據的輸入框、接收數據的顯示框和命令控件按鈕。用鼠標點擊“發送/接收”按鈕后程序開始運行,接收數據與發送數據一致時說明通信成功,否則失敗。





    圖4為程序設計的流程圖。具體的程序代碼包括串口的初始化及數據的發送與接收。初始化代碼主要對串行通信的信息格式和協議進行設置,串口的初始化代碼如下:

        MSComm1. CommPort = 1            //使用COM1串口
        MSComm1. Settings="9600,n,8,1"
                            //數據格式:波特率9600 b/s,無奇偶
                           校驗,8 bit數據位,1 bit停止位
         MSComm1. OutBufferCount = 0        //清空發送緩沖區
         MSComm1. InBufferCount = 0          //清空接收緩沖區
         MSComm1. InputMode = 1      //以二進制形式取回數據
         MSComm1. InputLen=0    //一次讀取緩沖區內全部數據
          If MSComm1.PortOpen = False Then
         MSComm1.PortOpen = True
         End If                                   //打開串口

    數據的發送和接收主要用到下面兩句代碼:

             MSComm1.Output = outdata
             backdata = MSComm1.Input

    由于篇幅的限制,其他代碼不再給出。

    3 下位機程序設計

    Atmega16內部的USART是一個通用的同步和異步串行接收器和發送器,其高度靈活,使用非常方便。與USART相關的寄存器有:UDR、UCSRA、UCSRB、UCSRC、UBRRH和UBRRL。UDR是USART發送數據和接收數據共享的數據寄存器,將數據寫入UDR時實際操作的是通過UDR發送數據,讀UDR時實際返回的是UDR中的數據。UCSRA、UCSRC和UCSRB為控制和狀態寄存器,串行口的通信模式的設置可通過對UCSRA和UCSRB的相關數據位進行寫操作來實現。數據幀包含的數據位數也是由UCSRB來確定,并與上位機保持一致。UBRRH和UBRRL為波特率寄存器,UBRRH和UBRRL是16位寄存器UBRR的高8位和低8位。UBRR的值是用于確定串行通信的波特率,對于異步正常模式(由UCSRA和UCSRB確定),波特率的計算公式為 ,對于9 600 b/s的波特率(和上位機一致),在fosc=8 MHz的情況下,通過計算得UBRR的值為51。對UBRR進行寫操作時注意要先寫高8位UBRRH,后寫低8位UBRRL,否則寫入無效。

    程序流程如圖5所示。判斷接收是否結束依據UCSRA中的標志位RXC,當RXC=1時表示接收沒有結束,繼續接收;當RXC=0時表示接收結束,可以從UDR中讀出接收到的數據。判斷發送是否結束依據UCSRA中的標志位TXC,當TXC=1時表示發送沒有結束;當TXC=0時表示發送結束。



    程序的編寫環境采用ATMEL公司的AVRstudio軟件。初始化部分程序代碼如下:

        LDI   r16,0x20
      OUT  UCSRA,r16                  //設置串口通信模式
      LDI   r17,0x00   
      OUT  UBRRH,r17
      LDI   r16,0x33
      OUT  UBRRL,r16                //設置串口通信的波特率      LDI   r16,0x86   
      OUT  UCSRC,r16              //設置串口通信的數據格式
      LDI   r16,0x18
        OUT  UCSRB,r16                               //使能串口通信
        判斷UCSRA的標志位RXC和TXC采用跳轉指令SBIS,具體語句為:
        SBIS  UCSRA,RXC
        SBIS  UCSRA,TXC

    將編寫好的程序燒錄進單片機,硬件連接完成后運行上位機程序即可實現串行通信,在圖3的程序界面可以查看結果。如果需要重新燒錄程序,可以進行在線燒錄,而不需要把單片機ATmega16從電路上取下來。因此,可以采用SMD封裝,有利于產品微型化。

    本文采用查詢的工作方式,通過電平轉換器MAX232實現了單片機ATmega16與計算機之間的EIA-232串行通信。雖然目前USB的應用很廣泛,但由于工業設備一般連接好以后很少進行重復插拔,USB的優越性不能得到很好的體現,使得工業領域使用USB接口的產品并不多,EIA串行通信仍占據重要地位,因此研究EIA串行通信是很必要的。

    參考文獻
    [1] 耿德根,宋建國,馬潮,等. AVR高速嵌入式單片機原理與應用[M]. 北京:北京航空航天大學出版社,2001.
    [2] 謝瑞和. 串行技術大全[M].北京:清華大學出版社,2003.
    [3] 張艷玲,黃?. 基于VB的機房計算機電源監控系統[J].微型機與應用,2004,23(1):41-44.
    [4] 王平,張新東. 基于智能儀表的數據采集系統設計[J]. 自動化與儀表,2009,24(4):9-10.
    [5] 柳劍,陳於學,楊曙年. 基于編程口的三菱PLC與PC機串行通信實現[J]. 自動化儀表,2010,31(10):31-37.

    本文地址:http://www.portaltwn.com/thread-97507-1-1.html     【打印本頁】

    本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
    您需要登錄后才可以發表評論 登錄 | 立即注冊

    廠商推薦

    • Microchip視頻專區
    • EtherCAT®和Microchip LAN925x從站控制器介紹培訓教程
    • MPLAB®模擬設計器——在線電源解決方案,加速設計
    • 讓您的模擬設計靈感,化為觸手可及的現實
    • 深度體驗Microchip自動輔助駕駛應用方案——2025巡展開啟報名!
    • 貿澤電子(Mouser)專區
    關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
    電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
    快速回復 返回頂部 返回列表
    精品一区二区三区自拍图片区_国产成人亚洲精品_亚洲Va欧美va国产综合888_久久亚洲国产精品五月天婷