單片機的異步串行通信功能和基本使用方法
單片機的數據通信有兩種方式:并行通信和串行通信。并行通信指數據字節的各位同時(shí)發(fā)送或接收;而串行通信是數據字長(cháng)距離傳輸數據節一位一位按順序發(fā)送或接收。并行通信傳輸線(xiàn)多,適用于短距離、快速度的通信;面串行通信僅需單線(xiàn)傳輸信息,適用于長(cháng)距離傳輸數據,由于每次傳送一位,所以傳輸速度比較慢。串行通信又分異步和同步兩種方式,其中異步串行通信是最常用的方式。本文主要通過(guò)兩個(gè)實(shí)例介紹單片機的異步串行通信功能和基本使用方法。
一、串行通信基本知識
ATmega8單片機帶有一個(gè)全雙工的同步/異步串行收發(fā)模塊USART,模塊由時(shí)鐘發(fā)生器、數據發(fā)送器和接收器、控制寄存器等部分組成。異步串行通信的接線(xiàn)方式見(jiàn)下圖,其中RXD為接收端,TXD為發(fā)送端。數據通信以幀為傳輸單位,每一幀包含1位起始位0、8位或9位數據、1位奇偶校驗位和1位停止位1。
傳輸格式見(jiàn)下圖。
下面介紹與USART相關(guān)的幾個(gè)寄存器,為了節省篇幅,只對編程中要用到的相關(guān)內容進(jìn)行介紹。
1.數據寄存器UDR 數據寄存器UDR用來(lái)存放要發(fā)射或者接收的數據,UDR可讀可寫(xiě),初始值為0x00。
2.控制和狀態(tài)寄存器UCSRA.UCSRB、UCSRC
UCSRA的定義見(jiàn)下表。
UCSRA的初始值為0x20。
RXC位為USART接收完成標志位,數據哲器中有未讀出的數據時(shí)RXC置位,否則清零。接收器禁止時(shí),數據寄存器被刷新,導致RXC清零。RXC標志可用來(lái)產(chǎn)生接收結束中斷。
TXC位為USART發(fā)送完成標志位,發(fā)送移位緩沖器中的數據被送出,且當發(fā)送緩沖器(UDR)為空時(shí)TXC置位。執行發(fā)送結束中斷時(shí)TXC標志自動(dòng)清零,也可以通過(guò)寫(xiě)1進(jìn)行清除操作。TXC標志可用來(lái)產(chǎn)生發(fā)送結束中斷。
UDRE位數據寄存器空標志位,標志指出發(fā)送緩沖器(UDR)是否準備好接收新數據。UDRE為1說(shuō)明緩沖器為空,已準備好進(jìn)行數據接收。UDRE標志可用來(lái)產(chǎn)生數據寄存器空中斷。復位后UDRE置位,表明發(fā)送器已經(jīng)就緒。
UCSRB的定義見(jiàn)下表。
UCSRB的初始值為0x00。
RENC位為數據接收允許標志位,置位后將啟動(dòng)USART接收器。RXD引腳的通用端口功能被USART功能所取代。
TXNC位為發(fā)送數據允許標志位,置位后將啟動(dòng)USART發(fā)送器。TXD引腳的通用端口功能被USART功能所取代。TXEN清零后,只有等到所有的數據發(fā)送完成后發(fā)送器才能夠真正禁止,即發(fā)送移位寄存器與發(fā)送緩沖寄存器中沒(méi)有要傳送的數據。
CSRC的定義如下表。
UCSRC的初始值為0x86。
UCSRC寄存器與UBRRH寄存器共用相同的I/O地址。
URSEL位為寄存器選擇標志位,通過(guò)該位選擇訪(fǎng)問(wèn)UCSRC寄存器或UBRRH寄存器。當讀UCSRC時(shí),該位為1;當寫(xiě)UCSRC時(shí),該位必須寫(xiě)入1。
UMSEL位為模式選擇標志位,通過(guò)這一位來(lái)選擇同步或異步工作模式。UMSEL=O為異步模式,UMSEL=1為同步模式。
UPM1~O位為奇偶校驗模式,這兩位設置奇偶校驗的模式并使能奇偶校驗。如果使能了奇偶校驗,那么在發(fā)送數據時(shí),發(fā)送器都會(huì )自動(dòng)產(chǎn)生并發(fā)送奇偶校驗位。對每一個(gè)接收到的數據,接收器都會(huì )產(chǎn)生一奇偶值,并與UPM0所設置的值進(jìn)行比較。如果不匹配,那么就將UCSRA中的PE置位。校驗方式見(jiàn)下表。
USBS位為停止位選擇標志位,通過(guò)這一位可以設置發(fā)射幀中停止位的位數。接收器忽略這一位的設置。USBS=0為1位停止位,USBS=1為2位停止位。
UCSZ1~0位為字符長(cháng)度標志位,UCSZ1~0與UCSRB寄存器的UCSZ2位結合在一起可以設置數據幀包含的數據位數(字符長(cháng)度)具體設置見(jiàn)下表。
UCSZ2 | UCSZ1 | UCSZ0 | 字符長(cháng)度 |
0 | 0 | 0 | 5位 |
0 | 0 | 1 | 6位 |
O | 1 | 0 | 7位 |
0 | 1 | 1 | 8位 |
1 | 1 | 1 | 9位 |
3.波特率寄存器UBRRL和UBRRH
UBRRL和UBRRH的初始值均為Ox00。
UBRRH的最高位URSEL為寄存器選擇標志位,用于選擇確定UCSRC寄存器和UBRRH寄存器的操作。如果讀UBRRH寄存器,該位為0。當寫(xiě)UBRRH寄存器時(shí),該位必須寫(xiě)入0。
寄存器UBRRH的低4位和寄存器UBRRL的8位構成一個(gè)12位的UBRR寄存器,用于USART傳送或接收波特率(BAUD)的設置。
波特率是信號傳遞的速率,在二進(jìn)制信號中其值等于每秒鐘傳送多少位二進(jìn)數。在異步通信正常模式下波特率的計算公式為BAUD=fosc/16(UBRRH),式中fosc為單片機系統時(shí)鐘頻率。
二、串口的應用實(shí)驗
本文通過(guò)兩個(gè)實(shí)驗來(lái)介紹串口的應用,兩個(gè)實(shí)驗都是計算機和ATmega8單片機串口通信的實(shí)例。
實(shí)驗一PC控制電源開(kāi)關(guān)
1.實(shí)驗電路
實(shí)驗板上與本實(shí)驗相關(guān)的電路見(jiàn)下圖,這個(gè)實(shí)驗是通過(guò)計算機對實(shí)驗板上繼電器K1、K2進(jìn)行控制,即通過(guò)計算機用串行通信控制.ATmega8的(PD6、PD7)腳的輸出狀態(tài)。
2.程序設計
本實(shí)驗的程序由上位機(計算機)程序和下位機(單片機)程序兩部分組成。串口通信采用8位數據位,1位停止位,無(wú)校驗位。波特率為9600。
上位機程序是安裝在計算機上的串口應用程序,主要作用是向RS-232C端口發(fā)送控制信號、接收和處理返回信號。上位機程序由筆者用VB語(yǔ)言編寫(xiě),在編寫(xiě)和使用時(shí)均要使用MSComm通信控件。軟件的界面如下圖所示,當用鼠標單擊某一開(kāi)關(guān)按鈕時(shí),其上面的圓形指示燈狀態(tài)就會(huì )發(fā)生變化,紅色表示電源打開(kāi),黑色表示電源關(guān)閉,對應單片機控制的繼電器也會(huì )發(fā)生相應的變化。程序界面上的串口指示燈作串口工作狀態(tài)指示,串口通信正常時(shí)狀態(tài)為綠色,反之為黑色。軟件還可以對使用的串口進(jìn)行選擇。
下位機程序如下:
相關(guān)推薦
技術(shù)專(zhuān)區
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線(xiàn)
- 開(kāi)關(guān)電源
- 單片機
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開(kāi)發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機控制
- 藍牙
- PLC
- PWM
- 汽車(chē)電子
- 轉換器
- 電源管理
- 信號放大器
評論