新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)的異步串行通信功能和基本使用方法

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

作者: 時(shí)間:2012-10-09 來(lái)源:網(wǎng)絡(luò) 收藏

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

  一、串行通信基本知識(shí)

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

傳輸格式見(jiàn)下圖。

  下面介紹與USART相關(guān)的幾個(gè)寄存器,為了節(jié)省篇幅,只對(duì)編程中要用到的相關(guān)內(nèi)容進(jìn)行介紹。

  1.?dāng)?shù)據(jù)寄存器UDR 數(shù)據(jù)寄存器UDR用來(lái)存放要發(fā)射或者接收的數(shù)據(jù),UDR可讀可寫(xiě),初始值為0x00。

  2.控制和狀態(tài)寄存器UCSRA.UCSRB、UCSRC

  UCSRA的定義見(jiàn)下表。

  UCSRA的初始值為0x20。

  RXC位為USART接收完成標(biāo)志位,數(shù)據(jù)哲器中有未讀出的數(shù)據(jù)時(shí)RXC置位,否則清零。接收器禁止時(shí),數(shù)據(jù)寄存器被刷新,導(dǎo)致RXC清零。RXC標(biāo)志可用來(lái)產(chǎn)生接收結(jié)束中斷。

  TXC位為USART發(fā)送完成標(biāo)志位,發(fā)送移位緩沖器中的數(shù)據(jù)被送出,且當(dāng)發(fā)送緩沖器(UDR)為空時(shí)TXC置位。執(zhí)行發(fā)送結(jié)束中斷時(shí)TXC標(biāo)志自動(dòng)清零,也可以通過(guò)寫(xiě)1進(jìn)行清除操作。TXC標(biāo)志可用來(lái)產(chǎn)生發(fā)送結(jié)束中斷。

  UDRE位數(shù)據(jù)寄存器空標(biāo)志位,標(biāo)志指出發(fā)送緩沖器(UDR)是否準(zhǔn)備好接收新數(shù)據(jù)。UDRE為1說(shuō)明緩沖器為空,已準(zhǔn)備好進(jìn)行數(shù)據(jù)接收。UDRE標(biāo)志可用來(lái)產(chǎn)生數(shù)據(jù)寄存器空中斷。復(fù)位后UDRE置位,表明發(fā)送器已經(jīng)就緒。

  UCSRB的定義見(jiàn)下表。

UCSRB的初始值為0x00。

  RENC位為數(shù)據(jù)接收允許標(biāo)志位,置位后將啟動(dòng)USART接收器。RXD引腳的通用端口功能被USART功能所取代。

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

CSRC的定義如下表。

UCSRC的初始值為0x86。

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

  URSEL位為寄存器選擇標(biāo)志位,通過(guò)該位選擇訪問(wèn)UCSRC寄存器或UBRRH寄存器。當(dāng)讀UCSRC時(shí),該位為1;當(dāng)寫(xiě)UCSRC時(shí),該位必須寫(xiě)入1。

  UMSEL位為模式選擇標(biāo)志位,通過(guò)這一位來(lái)選擇同步或異步工作模式。UMSEL=O為異步模式,UMSEL=1為同步模式。

  UPM1~O位為奇偶校驗(yàn)?zāi)J?,這兩位設(shè)置奇偶校驗(yàn)的模式并使能奇偶校驗(yàn)。如果使能了奇偶校驗(yàn),那么在發(fā)送數(shù)據(jù)時(shí),發(fā)送器都會(huì)自動(dòng)產(chǎn)生并發(fā)送奇偶校驗(yàn)位。對(duì)每一個(gè)接收到的數(shù)據(jù),接收器都會(huì)產(chǎn)生一奇偶值,并與UPM0所設(shè)置的值進(jìn)行比較。如果不匹配,那么就將UCSRA中的PE置位。校驗(yàn)方式見(jiàn)下表。

  USBS位為停止位選擇標(biāo)志位,通過(guò)這一位可以設(shè)置發(fā)射幀中停止位的位數(shù)。接收器忽略這一位的設(shè)置。USBS=0為1位停止位,USBS=1為2位停止位。

  UCSZ1~0位為字符長(zhǎng)度標(biāo)志位,UCSZ1~0與UCSRB寄存器的UCSZ2位結(jié)合在一起可以設(shè)置數(shù)據(jù)幀包含的數(shù)據(jù)位數(shù)(字符長(zhǎng)度)具體設(shè)置見(jiàn)下表。

UCSZ2UCSZ1 UCSZ0 字符長(zhǎng)度
0005位
0016位
O107位
0118位
1119位

  3.波特率寄存器UBRRL和UBRRH

  UBRRL和UBRRH的初始值均為Ox00。

  UBRRH的最高位URSEL為寄存器選擇標(biāo)志位,用于選擇確定UCSRC寄存器和UBRRH寄存器的操作。如果讀UBRRH寄存器,該位為0。當(dāng)寫(xiě)UBRRH寄存器時(shí),該位必須寫(xiě)入0。

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

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

  二、串口的應(yīng)用實(shí)驗(yàn)

  本文通過(guò)兩個(gè)實(shí)驗(yàn)來(lái)介紹串口的應(yīng)用,兩個(gè)實(shí)驗(yàn)都是計(jì)算機(jī)和單片機(jī)串口通信的實(shí)例。

  實(shí)驗(yàn)一PC控制電源開(kāi)關(guān)

  1.實(shí)驗(yàn)電路

  實(shí)驗(yàn)板上與本實(shí)驗(yàn)相關(guān)的電路見(jiàn)下圖,這個(gè)實(shí)驗(yàn)是通過(guò)計(jì)算機(jī)對(duì)實(shí)驗(yàn)板上繼電器K1、K2進(jìn)行控制,即通過(guò)計(jì)算機(jī)用串行通信控制.的(PD6、PD7)腳的輸出狀態(tài)。

  2.程序設(shè)計(jì)

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

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

下位機(jī)程序如下:

  #includeiom8V.h>
  unsigned char temp:
  void mein(void)
  {
  DDRD=0xff;//設(shè)置D口為推
  挽1輸出
  PORTD=0x00;
  OSCCAL=0xaa://校正內(nèi)部RC
  振蕩器頻率,不同的芯片參數(shù)有差異
  UCSRB=0x18;//RXD、TXD4使能
  UBRR=51;//9600bit/s,8.0M
  UCSRC=0x86;//8位數(shù)據(jù),1
  位停止位.無(wú)校驗(yàn)
  while(1)
  {
  while(!(UCSRA0x80));
  等待接受完整
  temp=UDR;//接收數(shù)據(jù)
  PORTD=temp;//將數(shù)據(jù)輸
  出至D口
  while(!(UCSRA0x20));
 ?。却莆患拇嫫骺?/DIV>
  UDR=temp;//發(fā)送數(shù)據(jù),
  讓上位機(jī)檢驗(yàn)串口是否工作
  }
  }

數(shù)字通信相關(guān)文章:數(shù)字通信原理


通信相關(guān)文章:通信原理



上一頁(yè) 1 2 下一頁(yè)

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉