當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]C51 新手編程(第五課) 串行口 今天介紹單片機(jī)怎樣通過串行口與計(jì)算機(jī)通信。 1. 概述 通信實(shí)質(zhì)就是以計(jì)算機(jī)為中心,通過某些通信線路與設(shè)備,對二進(jìn)制編碼的字母、數(shù)字、符號化及數(shù)字化聲音、圖像信息進(jìn)行的傳輸

C51 新手編程(第五課)
串行口
今天介紹單片機(jī)怎樣通過串行口與計(jì)算機(jī)通信。
1. 概述
通信實(shí)質(zhì)就是以計(jì)算機(jī)為中心,通過某些通信線路與設(shè)備,對二進(jìn)制編碼的字母、數(shù)字、符號化及數(shù)字化聲音、圖像信息進(jìn)行的傳輸、交換和處理。由于計(jì)算機(jī)的信息是以字節(jié)(8位)或字(1個(gè)或幾個(gè)字節(jié))為單位進(jìn)行處理,所以以字或字節(jié)為傳輸單位比較合適,今天重點(diǎn)介紹使用串行口進(jìn)行通信。
所謂串行通信就是所傳送數(shù)據(jù)的各位按順序一位一位地發(fā)送或接收。在串行通信系統(tǒng)中,傳輸數(shù)據(jù)的各位只在一條傳輸線上傳送,因此在長距離傳送數(shù)據(jù)時(shí),比較經(jīng)濟(jì),缺點(diǎn)是傳輸速度較慢。
2. 串行通信種類
串行通信分為同步通信和異步通信兩種方式。
(1) 同步串行通信:要求在發(fā)送設(shè)備的時(shí)鐘頻率與接收設(shè)備的時(shí)鐘頻率一致的條件下,發(fā)送設(shè)備先發(fā)出一個(gè)(或幾個(gè))同步字符,隨之發(fā)送一組數(shù)據(jù)。接收設(shè)備一旦檢測到符合規(guī)定的同步字符,便連續(xù)按順序接收所有數(shù)據(jù)。優(yōu)點(diǎn):速度較快。缺點(diǎn):對設(shè)備的硬件結(jié)構(gòu)要求較高。
(2) 異步串行通信:發(fā)送設(shè)備和接收設(shè)備的時(shí)鐘是不一致的。數(shù)據(jù)以一個(gè)字符一個(gè)字符地順序按幀傳送。幀格式示意圖如圖2-1:
0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 1
起始位 D0 D1 D2 D3 D4 D5 D6 奇偶校
驗(yàn)位 停止位
七位數(shù)據(jù)
圖2-1異步通信信號傳輸格式
解釋一下:開頭一個(gè)起始位“0”,接著是5~8位數(shù)據(jù)位,規(guī)定低位在前,高位在后(圖上是7位數(shù)據(jù)位),然后是一個(gè)奇偶校偶位(可以省略),最后加上一個(gè)停止位“1”表示字符的結(jié)束。
由于在技術(shù)實(shí)現(xiàn)上使用發(fā)送設(shè)備與接收設(shè)備的時(shí)鐘頻率長期嚴(yán)格保持一致有一定的困難,目前實(shí)際使用較多的還是串行異步通信方式。
3. 串行口中數(shù)據(jù)的雙工傳送
在串行通信中,機(jī)器的通信接口只能發(fā)送或接收,這種是單向傳輸?shù)?,稱為單工傳送,如果兩機(jī)之間能夠進(jìn)行雙向傳送,這種方式就稱為雙工傳送。
在雙工傳送中,如果接收和發(fā)送不能同時(shí)進(jìn)行,只能分時(shí)接收和發(fā)送,這種傳送就叫半雙工傳送,若兩機(jī)的發(fā)送和接收均可同時(shí)進(jìn)行,則為全雙工傳送。
4. 串行通信速率
波特率是在單片機(jī)異步通信中對數(shù)據(jù)傳送速率的規(guī)定,即每秒鐘傳送信息的二進(jìn)制位數(shù)。
5. 串行接口
從本質(zhì)上講,所有的串行接口都是以并行數(shù)據(jù)形式與CPU接口,而以串行數(shù)據(jù)形式與外部邏輯單元接口。它們的基本功能是從外部邏輯單元接收串行數(shù)據(jù),轉(zhuǎn)換成并行數(shù)據(jù)后傳送給CPU;或者從CPU發(fā)出并行數(shù)據(jù),轉(zhuǎn)換成串行數(shù)據(jù)后輸出給外部邏輯單元。
串行接口至少包含一個(gè)接收器和一個(gè)發(fā)送器。
6. 51串行接口
51單片機(jī)內(nèi)部有一個(gè)功能很強(qiáng)的全雙工的串行接口電路單元UART(即通用異步接收器/發(fā)送器,Universal Asynchronous Receiver/Transmitter),發(fā)送時(shí)數(shù)據(jù)由TXD端送出,接收時(shí)數(shù)據(jù)由RXD端輸入,有兩個(gè)緩沖器SBUF,一個(gè)作發(fā)送緩沖器,另一個(gè)作嫌收緩沖器。該串行口有4種工作方式,波特率可用軟件設(shè)置,由片內(nèi)的定時(shí)/計(jì)數(shù)器產(chǎn)生。串行口接收或發(fā)送數(shù)據(jù)均可觸發(fā)中斷系統(tǒng),使用十分方便。
6.1. 串行口的組成
6.1.1. 串行口控制寄存器SCON,其格式如下:
D7 D6 D5 D4 D3 D2 D1 D0
SM0 SM1 SM2 REN TB8 RB8 TI RI
(1) SM0,SM1:串行口工作方式控制位,具體工作方式見表6-1:



表6-1 串行口工作方式控制
SM0 SM1 工作方式 說明 波特率
0 0 方式0 同步移位寄存器 fOSC/12
0 1 方式1 10位異步收發(fā) 由定時(shí)器控制
1 0 方式2 11位異步收發(fā) fOSC/32或fOSC/64
1 1 方式3 11位異步收發(fā) 由定時(shí)器控制
(2) SM2:多機(jī)通信控制位(方式2,3)
1->只有接收到第9位(RB8)為1,RI才置位;
0->接收到字符,RI就置位。
(3) REN:串行口接收允許位
1->允許串行口接收;
0->禁止串行口接收。
(4) TB8:方式2和方式3時(shí),為發(fā)送的第9位數(shù)據(jù),也可以作奇偶校驗(yàn)位。
(5) RB8:方式2和方式3時(shí),為接收到的第9位數(shù)據(jù);方式1時(shí),為接收到的停止位。
(6) TI:發(fā)送中斷標(biāo)志
由硬件置位,必須由軟件清零
(7) RI:接收中斷標(biāo)志
由硬件置位,必須由軟件清零
6.1.2. 電源控制寄存器PCON:
PCON的第7位SMOD是與串行口的波特率設(shè)置有關(guān)的選擇位。
D7 D6 D5 D4 D3 D2 D1 D0
SMOD
(1) SMOD:串行口波特率加倍位
1->方式1和方式3時(shí),波特率=定時(shí)器1溢出率/16;方式2波特率= fOSC/32;
0->方式1和方式3時(shí),波特率=定時(shí)器1溢出率/32;方式2波特率= fOSC/64;
通常情況下,使用單片機(jī)的串行口時(shí),選用的晶振比較固定,一般為6MHz,12MHz和11.0592MHz,常用于與微機(jī)的通信;選用的波特率也相對固定。串行口常用的波特率及相應(yīng)的設(shè)置見表6-2:
表6-2 串行口常用波特率
串行口工作方式 波特率 fOSC = 6 MHz fOSC = 12 MHz fOSC = 11.0592 MHz
SMOD TMOD TH1 SMOD TMOD TH1 SMOD TMOD TH1
方式0 1M × × ×
方式2 375K 1 × ×
187.5K 1 × × 0 × ×




方式1






方式3 62.5K 1 20 FFH
19.2K 1 20 FDH
9.6K 0 20 FDH
4.8K 1 20 F3H 0 20 FAH
2.4K 1 20 F3H 0 20 F3H 0 20 F4H
1.2K 1 20 E6H 0 20 E6H 0 20 E8H
600 1 20 CCH 0 20 CCH 0 20 D0H
300 0 20 CCH 0 20 98H 0 20 A0H
137.5 1 20 1DH 0 20 1DH 0 20 2EH
110 0 20 72H 0 20 FEEBH 0 10 FEFFH
7. 實(shí)例
單片機(jī)串行口發(fā)送/接收程序,每接收到字節(jié)即刻發(fā)送出去;和微機(jī)相接后微機(jī)鍵入的字符回顯在屏幕上。代碼如下:

/******************************************************
* Title: 串口接收發(fā)送程序(字母)
* Description:
* Copyright:
* Company:
* @author Enron
*******************************************************/
#include

#define uchar unsigned char

/******************************************************
主函數(shù)
*******************************************************/
void main()
{
uchar a;

TMOD=0x20;
TL1=0xfd; // 采用11.0592MHz的晶振,波特率9600bps
TH1=0xfd;
SCON=0xd8;
PCON=0x00;
TR1=1;

while(1)
{
while(RI==0);
RI=0;
a=SBUF;
SBUF=a;
while(TI==0);
TI=0;
}
}

解釋一下:TMOD = 0x20 即
D7 D6 D5 D4 D3 D2 D1 D0
GATE T/C 1 M1 M0 GATE T/C 0 M1 M0
0 0 1 0 0 0 0 0
看出來,我們使用定時(shí)器 1 的工作方式1,即定時(shí)器 1 為自動(dòng)重設(shè)初值的8位定時(shí)/計(jì)數(shù)器。

TH1 = 0xFd; //在11.0592MHz下,設(shè)置串行口波特率為9600,方式3
TL1 = 0xFd;
串行口工作方式 波特率 fOSC = 6 MHz fOSC = 12 MHz fOSC = 11.0592 MHz
SMOD TMOD TH1 SMOD TMOD TH1 SMOD TMOD TH1
方式0 1M × × ×
方式2 375K 1 × ×
187.5K 1 × × 0 × ×




方式1






方式3 62.5K 1 20 FFH
19.2K 1 20 FDH
9.6K 0 20 FDH
4.8K 1 20 F3H 0 20 FAH
2.4K 1 20 F3H 0 20 F3H 0 20 F4H
1.2K 1 20 E6H 0 20 E6H 0 20 E8H
600 1 20 CCH 0 20 CCH 0 20 D0H
300 0 20 CCH 0 20 98H 0 20 A0H
137.5 1 20 1DH 0 20 1DH 0 20 2EH
110 0 20 72H 0 20 FEEBH 0 10 FEFFH
按照表來看我們的在11.0592MHZ下,串口的波特率為9.6K也就是9600,那么TH1 TL1設(shè)置為0xFD
SCON = 0xd8; //串口控制
D7 D6 D5 D4 D3 D2 D1 D0
SM0 SM1 SM2 REN TB8 RB8 TI RI
1 1 0 1 1 0 0 0
表6-1 串行口工作方式控制
SM0 SM1 工作方式 說明 波特率
0 0 方式0 同步移位寄存器 fOSC/12
0 1 方式1 10位異步收發(fā) 由定時(shí)器控制
1 0 方式2 11位異步收發(fā) fOSC/32或fOSC/64
1 1 方式3 11位異步收發(fā) 由定時(shí)器控制
也就是說串行口的工作方式3,11位異步收發(fā)波特率由定時(shí)器控制的。REN:1->允許串行口接收。TB8:方式2和方式3時(shí),為發(fā)送的第9位數(shù)據(jù),也可以作奇偶校驗(yàn)位。RB8:方式2和方式3時(shí),為接收到的第9位數(shù)據(jù);方式1時(shí)。TI:發(fā)送中斷標(biāo)志,由硬件置位,必須由軟件清零。RI:接收中斷標(biāo)志,由硬件置位,必須由軟件清零。

PCON = 0x00;
D7 D6 D5 D4 D3 D2 D1 D0
SMOD
0 0 0 0 0 0 0 0
1->方式1和方式3時(shí),波特率=定時(shí)器1溢出率/16;方式2波特率= fOSC/32;
0->方式1和方式3時(shí),波特率=定時(shí)器1溢出率/32;方式2波特率= fOSC/64
TR1 = 1; //啟動(dòng)定時(shí)器T1
也就是啟動(dòng)定時(shí)器
while (1)
while(RI==0); //串口接收
RI = 0;
c = SBUF;
SBUF = c;
while(TI==0); //串口發(fā)送
TI=0;
while(RI==0); RI為0則等待(不為0就執(zhí)行下一句)
RI = 0; 執(zhí)行這句說明RI不再為0(接收結(jié)束),這里強(qiáng)制RI為0
c = SBUF; 接收字符
SBUF = c; 發(fā)送字符
while(TI==0); TI為0則等待,否則執(zhí)行下一句
TI=0; 執(zhí)行到這句說明TI不為0(即發(fā)送結(jié)束),強(qiáng)制令TI為0
這里的意思是說判斷RI是否為0當(dāng)RI==0時(shí)就一直循環(huán)判斷,當(dāng)RI不等與0時(shí)就執(zhí)行下面的語句。RI=0是重置。然后就接收數(shù)據(jù)SBUF就是串口數(shù)據(jù)寄存地方。當(dāng)C=SBUF時(shí)就收到了串口數(shù)據(jù)然后在吧原來的數(shù)據(jù)在發(fā)到出去SBUF=C,while(TI==0)是說當(dāng)TI為0是就一直等待。不為0時(shí)就執(zhí)行TI=0重置TI。
將前面的程序編譯后寫入單片機(jī),并連好串口線。通過串口調(diào)試助手向單片機(jī)發(fā)送字符,會發(fā)現(xiàn)發(fā)送的內(nèi)容被原樣發(fā)送回來。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉