新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機的異步串行通信功能和基本使用方法

        單片機的異步串行通信功能和基本使用方法

        作者: 時間:2012-10-09 來源:網絡 收藏

          的數據通信有兩種方式:并行通信和串行通信。并行通信指數據字節的各位同時發送或接收;而串行通信是數據字長距離傳輸數據節一位一位按順序發送或接收。并行通信傳輸線多,適用于短距離、快速度的通信;面串行通信僅需單線傳輸信息,適用于長距離傳輸數據,由于每次傳送一位,所以傳輸速度比較慢。串行通信又分異步和同步兩種方式,其中是最常用的方式。本文主要通過兩個實例介紹功能和基本使用方法。

          一、串行通信基本知識

          帶有一個全雙工的同步/異步串行收發模塊USART,模塊由時鐘發生器、數據發送器和接收器、控制寄存器等部分組成。的接線方式見下圖,其中RXD為接收端,TXD為發送端。數據通信以幀為傳輸單位,每一幀包含1位起始位0、8位或9位數據、1位奇偶校驗位和1位停止位1。

        傳輸格式見下圖。

          下面介紹與USART相關的幾個寄存器,為了節省篇幅,只對編程中要用到的相關內容進行介紹。

          1.數據寄存器UDR 數據寄存器UDR用來存放要發射或者接收的數據,UDR可讀可寫,初始值為0x00。

          2.控制和狀態寄存器UCSRA.UCSRB、UCSRC

          UCSRA的定義見下表。

          UCSRA的初始值為0x20。

          RXC位為USART接收完成標志位,數據哲器中有未讀出的數據時RXC置位,否則清零。接收器禁止時,數據寄存器被刷新,導致RXC清零。RXC標志可用來產生接收結束中斷。

          TXC位為USART發送完成標志位,發送移位緩沖器中的數據被送出,且當發送緩沖器(UDR)為空時TXC置位。執行發送結束中斷時TXC標志自動清零,也可以通過寫1進行清除操作。TXC標志可用來產生發送結束中斷。

          UDRE位數據寄存器空標志位,標志指出發送緩沖器(UDR)是否準備好接收新數據。UDRE為1說明緩沖器為空,已準備好進行數據接收。UDRE標志可用來產生數據寄存器空中斷。復位后UDRE置位,表明發送器已經就緒。

          UCSRB的定義見下表。

        UCSRB的初始值為0x00。

          RENC位為數據接收允許標志位,置位后將啟動USART接收器。RXD引腳的通用端口功能被USART功能所取代。

          TXNC位為發送數據允許標志位,置位后將啟動USART發送器。TXD引腳的通用端口功能被USART功能所取代。TXEN清零后,只有等到所有的數據發送完成后發送器才能夠真正禁止,即發送移位寄存器與發送緩沖寄存器中沒有要傳送的數據。

        CSRC的定義如下表。

        UCSRC的初始值為0x86。

          UCSRC寄存器與UBRRH寄存器共用相同的I/O地址。

          URSEL位為寄存器選擇標志位,通過該位選擇訪問UCSRC寄存器或UBRRH寄存器。當讀UCSRC時,該位為1;當寫UCSRC時,該位必須寫入1。

          UMSEL位為模式選擇標志位,通過這一位來選擇同步或異步工作模式。UMSEL=O為異步模式,UMSEL=1為同步模式。

          UPM1~O位為奇偶校驗模式,這兩位設置奇偶校驗的模式并使能奇偶校驗。如果使能了奇偶校驗,那么在發送數據時,發送器都會自動產生并發送奇偶校驗位。對每一個接收到的數據,接收器都會產生一奇偶值,并與UPM0所設置的值進行比較。如果不匹配,那么就將UCSRA中的PE置位。校驗方式見下表。

          USBS位為停止位選擇標志位,通過這一位可以設置發射幀中停止位的位數。接收器忽略這一位的設置。USBS=0為1位停止位,USBS=1為2位停止位。

          UCSZ1~0位為字符長度標志位,UCSZ1~0與UCSRB寄存器的UCSZ2位結合在一起可以設置數據幀包含的數據位數(字符長度)具體設置見下表。

        UCSZ2UCSZ1 UCSZ0 字符長度
        0005位
        0016位
        O107位
        0118位
        1119位

          3.波特率寄存器UBRRL和UBRRH

          UBRRL和UBRRH的初始值均為Ox00。

          UBRRH的最高位URSEL為寄存器選擇標志位,用于選擇確定UCSRC寄存器和UBRRH寄存器的操作。如果讀UBRRH寄存器,該位為0。當寫UBRRH寄存器時,該位必須寫入0。

          寄存器UBRRH的低4位和寄存器UBRRL的8位構成一個12位的UBRR寄存器,用于USART傳送或接收波特率(BAUD)的設置。

          波特率是信號傳遞的速率,在二進制信號中其值等于每秒鐘傳送多少位二進數。在異步通信正常模式下波特率的計算公式為BAUD=fosc/16(UBRRH),式中fosc為單片機系統時鐘頻率。

          二、串口的應用實驗

          本文通過兩個實驗來介紹串口的應用,兩個實驗都是計算機和單片機串口通信的實例。

          實驗一PC控制電源開關

          1.實驗電路

          實驗板上與本實驗相關的電路見下圖,這個實驗是通過計算機對實驗板上繼電器K1、K2進行控制,即通過計算機用串行通信控制.的(PD6、PD7)腳的輸出狀態。

          2.程序設計

          本實驗的程序由上位機(計算機)程序和下位機(單片機)程序兩部分組成。串口通信采用8位數據位,1位停止位,無校驗位。波特率為9600。

          上位機程序是安裝在計算機上的串口應用程序,主要作用是向RS-232C端口發送控制信號、接收和處理返回信號。上位機程序由筆者用VB語言編寫,在編寫和使用時均要使用MSComm通信控件。軟件的界面如下圖所示,當用鼠標單擊某一開關按鈕時,其上面的圓形指示燈狀態就會發生變化,紅色表示電源打開,黑色表示電源關閉,對應單片機控制的繼電器也會發生相應的變化。程序界面上的串口指示燈作串口工作狀態指示,串口通信正常時狀態為綠色,反之為黑色。軟件還可以對使用的串口進行選擇。

        下位機程序如下:

          #includeiom8V.h>
          unsigned char temp:
          void mein(void)
          {
          DDRD=0xff;//設置D口為推
          挽1輸出
          PORTD=0x00;
          OSCCAL=0xaa://校正內部RC
          振蕩器頻率,不同的芯片參數有差異
          UCSRB=0x18;//RXD、TXD4使能
          UBRR=51;//9600bit/s,8.0M
          UCSRC=0x86;//8位數據,1
          位停止位.無校驗
          while(1)
          {
          while(!(UCSRA0x80));
          等待接受完整
          temp=UDR;//接收數據
          PORTD=temp;//將數據輸
          出至D口
          while(!(UCSRA0x20));
          //等待移位寄存器空
          UDR=temp;//發送數據,
          讓上位機檢驗串口是否工作
          }
          }

        數字通信相關文章:數字通信原理


        通信相關文章:通信原理



        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 邢台县| 南阳市| 秀山| 太康县| 新龙县| 静乐县| 南丹县| 阿巴嘎旗| 鹿邑县| 北宁市| 灌云县| 喜德县| 丰宁| 手机| 赞皇县| 吉隆县| 开远市| 全州县| 荆州市| 阜新市| 乌兰察布市| 建阳市| 柏乡县| 玛多县| 罗山县| 金湖县| 镇宁| 潜江市| 滦南县| 利津县| 公主岭市| 萨嘎县| 嘉善县| 清镇市| 山西省| 张家川| 公主岭市| 闽侯县| 石渠县| 砚山县| 贵阳市|