理論概念
不同型號(hào)的單片機(jī)使用的串口不同,根據(jù)需求選擇相應(yīng)的單片機(jī),在有些場(chǎng)合如果單片機(jī)如果沒(méi)有需要的串行通信接口,則可以通過(guò)單片機(jī)的I/O口進(jìn)行模擬。
UART有兩種工作狀態(tài):
同步串行通信狀態(tài):速率高,硬件電路復(fù)雜,需要同時(shí)使用兩條信號(hào)線,所以只能使用單工方式或半雙工方式工作。
異步串行通信狀態(tài):方式簡(jiǎn)單,傳輸速率不高,應(yīng)用廣泛,方便與其他通信標(biāo)準(zhǔn)進(jìn)行銜接。
異步傳輸工作方式:
傳輸效率較低,起始位,校驗(yàn)位,停止位占用的位較多
數(shù)據(jù)格式:
同步傳輸工作方式:
雙方同時(shí)使用兩條通信線:
一條用于產(chǎn)生時(shí)鐘并要求發(fā)送和接受的雙方必須保持完全同步(一般情況下,時(shí)鐘信號(hào)由發(fā)送端提供)。另一條用于傳送數(shù)據(jù)。如果需要雙向數(shù)據(jù)傳輸,需要再多添加兩條通信線(MCS-51不支持同時(shí)的雙向數(shù)據(jù)同步傳輸,只能使用分時(shí)復(fù)用)。除了用于通信外,同步方式還可以用于I/O口的擴(kuò)展,與74LS164聯(lián)合使用時(shí)擴(kuò)展成輸出口,與74LS165聯(lián)合使用時(shí)擴(kuò)展成輸入口。因?yàn)闆](méi)有附加起始位和停止位,所以傳輸效率較高,一旦發(fā)現(xiàn)數(shù)據(jù)出錯(cuò),所有的數(shù)據(jù)都需要重新傳輸,大量數(shù)據(jù)一次性傳輸時(shí)錯(cuò)誤的概率較高。遠(yuǎn)距離通信時(shí),通過(guò)調(diào)試解調(diào)從數(shù)據(jù)流中提取同步信號(hào),用鎖相的技術(shù)使接收方得到與發(fā)送方相同的時(shí)鐘信號(hào)。時(shí)鐘信號(hào)線與數(shù)據(jù)線分離可以實(shí)現(xiàn)高效率、大容量的數(shù)據(jù)通信。
數(shù)據(jù)格式:
使用方式
使用的寄存器:
串行接口寄存器 SCON:規(guī)定了串行通信的方式和功能,可以選擇通信模式/允許接收/檢查狀態(tài)位
電源控制寄存器 PCON
SMOD = 0 波特率為原值;
SMOD為1 波特率提高一倍。
只有SMOD位對(duì)串口通信有影響
注:該寄存器不能進(jìn)行位尋址,只能整字節(jié)操作。
工作方式:
p.s.:UART有一個(gè)接收數(shù)據(jù)緩沖區(qū),當(dāng)上一個(gè)字節(jié)未被處理時(shí)下一個(gè)字節(jié)收入緩沖區(qū)。但如果在下一個(gè)字節(jié)接收完畢時(shí)前一字節(jié)還未處理,則上一個(gè)字節(jié)會(huì)被覆蓋掉。因此軟件必須在下一個(gè)字節(jié)接收完畢之前處理上一個(gè)字節(jié)(當(dāng)連續(xù)發(fā)送字節(jié)時(shí)也是如此)。
用途:可以用來(lái)和某些具有8位串行口的EEPROM器件通信
原理:
RXD從低位開(kāi)始收發(fā)數(shù)據(jù),TXD從發(fā)送同步移位脈沖。
向SBUF寫(xiě)入字節(jié)時(shí)開(kāi)始發(fā)送數(shù)據(jù),發(fā)送完畢后TI位置位。
置位REN時(shí),開(kāi)始接收數(shù)據(jù),接收完8位數(shù)據(jù)后RI位置位。
方式1:10位數(shù)據(jù)的異步通信口,波特率可變(與T1的溢出率有關(guān))。RXD為數(shù)據(jù)接收,TXD為數(shù)據(jù)發(fā)送。
數(shù)據(jù)幀格式:
原理:
軟件置REN為1時(shí),接收器選擇波特率為16倍速率采樣RXD引腳電平,當(dāng)檢測(cè)到RXD引腳輸入電平發(fā)生負(fù)跳變(1-》0)說(shuō)明起始位有效,移入輸入移位寄存器并開(kāi)始接收這一幀信息的其余位。需要手動(dòng)清零
接收過(guò)程中,數(shù)據(jù)從輸入移位寄存器右邊移入,起始位移至輸入移位寄存器最左邊時(shí),控制電路進(jìn)行最后一次移位。當(dāng)RI=0且SM2=0(或接收到的停止位為1)時(shí),接收到的9位數(shù)據(jù)的前8位裝入接收SBUF,第9位(停止位)進(jìn)入RB8并置RI=1,向CPU請(qǐng)求中斷。RI需要手動(dòng)清零
波特率計(jì)算裝入TH1的初值:
p.s. SMOD=0時(shí),K=1;SMOD=1時(shí),K=2;
代碼示例:
1 #include 2 main() 3 { 4 TMOD = 0x20; 5 SM0 = 0; 6 SM1 = 1; 7 REN = 1; 8 PCON = 0; 9 TH1 = 0xFD; //253=256-(1*11.0592*10^6)/(384*9600) 10 TL1 = 0xFD; 11 TR1 = 1; 12 P1 = SBUF; 13 while(!RI); 14 RI = 0; 15 SBUF = P1; 16 while(!TI); 17 TI = 0; 18 }
數(shù)據(jù)幀格式:起始位1位,數(shù)據(jù)9位(第9位在發(fā)送時(shí)為T(mén)B8,接收時(shí)為RB8)
原理:
發(fā)送開(kāi)始時(shí),先把起始位0輸出到TXD引腳,然后發(fā)送移位寄存器的輸出位D0到TXD引腳,每一個(gè)移位脈沖都使輸出移位寄存器的各位向右移一位,并由TXD引腳輸出。第一次移位時(shí),停止位“1”移入輸出移位寄存器的第9位,以后每次移位左邊都移 入0。當(dāng)停止位移至輸出位時(shí),左邊其余位全為0,當(dāng)檢測(cè)到這一條件時(shí),控制電路進(jìn)行最后一次移位并置TI=1,請(qǐng)求中斷。需要手動(dòng)清零
接收數(shù)據(jù)時(shí),數(shù)據(jù)從右邊移入輸入移位寄存器,在起始位0移到最左邊時(shí),控制電路進(jìn)行最后一次移位。當(dāng)RI=0且SM2=0(或接收到的第9位數(shù)據(jù)為1)時(shí),接收到的數(shù)據(jù)裝入接收緩沖器SBUF和RB8(接收數(shù)據(jù)的第9位),置RI=1,向CPU請(qǐng)求中斷。如果條件不滿足,則數(shù)據(jù)丟失且不置位RI,繼續(xù)搜索RXD引腳的負(fù)跳變。
代碼示例:多機(jī)互聯(lián)
1 TMOD = 0x20; 2 TH1 = 0xFD; 3 TL1 = 0xFD; 4 PCON = 0x00; 5 TR1 = 1; 6 SCON = 0xF8; 7 SBUF = 0x01; 8 while(!TI); 9 TI = 0; 10 P3_5 = 0; 11 SM2 = 0; 12 while(!RI); 13 RI = 0; 14 P2 = SBUF; 15 SM2 = 1; 16 P3_5 = 1;
波特率的計(jì)算:
當(dāng)T1用作波特率發(fā)生器時(shí),最典型的用法是使T1工作再自動(dòng)重裝8位定時(shí)器方式(方式2),溢出率取決于TH1中的計(jì)數(shù)值
常見(jiàn)波特率對(duì)照表
-
單片機(jī)
+關(guān)注
關(guān)注
6039文章
44583瀏覽量
636526 -
串口
+關(guān)注
關(guān)注
14文章
1555瀏覽量
76679
原文標(biāo)題:串口工作原理知識(shí)點(diǎn)匯總
文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論