RS232串口通信詳解
串口是計(jì)算機(jī)上一種非常通用的設(shè)備通信協(xié)議。
---------------------------------
串口的引腳定義:
9芯 信號(hào)方向來(lái)自 縮寫 描述 1 調(diào)制解調(diào)器 CD 載波檢測(cè) 2 調(diào)制解調(diào)器 RXD 接收數(shù)據(jù) 3 PC TXD 發(fā)送數(shù)據(jù) 4 PC DTR 數(shù)據(jù)終端準(zhǔn)備好 5
GND 信號(hào)地 6 調(diào)制解調(diào)器 DSR 通訊設(shè)備準(zhǔn)備好 7 PC RTS 請(qǐng)求發(fā)送 8 調(diào)制解調(diào)器 CTS 允許發(fā)送 9 調(diào)制解調(diào)器 RI 響鈴指示器 兩個(gè)串口連接時(shí),接收數(shù)據(jù)針腳與發(fā)送數(shù)據(jù)針腳相連,彼此交叉,信號(hào)地對(duì)應(yīng)相接即可。
---------------------------------
串口的電氣特性:
1)RS-232串口通信最遠(yuǎn)距離是50英尺
2)RS232可做到雙向傳輸,全雙工通訊,最高傳輸速率20kbps
3)RS-232C上傳送的數(shù)字量采用負(fù)邏輯,且與地對(duì)稱
邏輯1:-3 ~-15V
邏輯0:+3~+15V
所以與單片機(jī)連接時(shí)常常需要加入電平轉(zhuǎn)換芯片:
---------------------------------
串口通信參數(shù):
a)波特率:RS-232-C標(biāo)準(zhǔn)規(guī)定的數(shù)據(jù)傳輸速率為每秒50、75、 100、150、300、600、1200、2400、4800、9600、19200波特。
b)數(shù)據(jù)位:標(biāo)準(zhǔn)的值是5、7和8位,如何設(shè)置取決于你想傳送的信息。比如,標(biāo)準(zhǔn)的ASCII碼是0~127(7位);擴(kuò)展的ASCII碼是0~255(8位)。
c)停止位:用于表示單個(gè)包的最后一位,典型的值為1,1.5和2位。由于數(shù)是在傳輸線上定時(shí)的,并且每一個(gè)設(shè)備有其自己的時(shí)鐘,很可能在通信中兩臺(tái)設(shè)備間出現(xiàn)了小小的不同步。因此停止位不僅僅是表示傳輸?shù)慕Y(jié)束,并且提供計(jì)算機(jī)校正時(shí)鐘同步的機(jī)會(huì)。
d)奇偶校驗(yàn)位:在串口通信中一種簡(jiǎn)單的檢錯(cuò)方式。對(duì)于偶和奇校驗(yàn)的情況,串口會(huì)設(shè)置校驗(yàn)位(數(shù)據(jù)位后面的一位),用一個(gè)值確保傳輸?shù)臄?shù)據(jù)有偶個(gè)或者奇?zhèn)€邏輯高位。例如,如果數(shù)據(jù)是011,那么對(duì)于偶校驗(yàn),校驗(yàn)位為0,保證邏輯高的位數(shù)是偶數(shù)個(gè)。如果是奇校驗(yàn),校驗(yàn)位位1,這樣就有3個(gè)邏輯高位。
---------------------------------
串口通信的傳輸格式:
串行通信中,線路空閑時(shí),線路的TTL電平總是高,經(jīng)反向RS232的電平總是低。一個(gè)數(shù)據(jù)的開始RS232線路為高電平,結(jié)束時(shí)Rs232為低電平。數(shù)據(jù)總是從低位向高位一位一位的傳輸。示波器讀數(shù)時(shí),左邊是數(shù)據(jù)的高位。
例如,對(duì)于16進(jìn)制數(shù)據(jù)55aaH,當(dāng)采用8位數(shù)據(jù)位、1位停止位傳輸時(shí),它在信號(hào)線上的波形如圖1(TTL電平)和圖2(RS-232電平)所示。
55H=01010101B,取反后10101010B,加入一個(gè)起始位1,一個(gè)停止位0,55H的數(shù)據(jù)格式為1010101010B;
aaH=10101010B,取反后01010101B,加入一個(gè)起始位1,一個(gè)停止位0,55H的數(shù)據(jù)格式為1101010100B;
---------------------------------
串口通信的接收過(guò)程:
(異步通信:接收器和發(fā)送器有各自的時(shí)鐘;同步通信:發(fā)送器和接收器由同一個(gè)時(shí)鐘源控制。RS232是異步通信)
(1)開始通信時(shí),信號(hào)線為空閑(邏輯1),當(dāng)檢測(cè)到由1到0的跳變時(shí),開始對(duì)“接收時(shí)鐘”計(jì)數(shù)。
(2)當(dāng)計(jì)到8個(gè)時(shí)鐘時(shí),對(duì)輸入信號(hào)進(jìn)行檢測(cè),若仍為低電平,則確認(rèn)這是“起始位”,而不是干擾信號(hào)。
(3)接收端檢測(cè)到起始位后,隔16個(gè)接收時(shí)鐘,對(duì)輸入信號(hào)檢測(cè)一次,把對(duì)應(yīng)的值作為D0位數(shù)據(jù)。若為邏輯1, 作為數(shù)據(jù)位1;若為邏輯0,作為數(shù)據(jù)位0。
(4)再隔16個(gè)接收時(shí)鐘,對(duì)輸入信號(hào)檢測(cè)一次,把對(duì)應(yīng)的值作為D1位數(shù)據(jù)。….,直到全部數(shù)據(jù)位都輸入。
(5)檢測(cè)校驗(yàn)位P(如果有的話)。
(6)接收到規(guī)定的數(shù)據(jù)位個(gè)數(shù)和校驗(yàn)位后,通信接口電路希望收到停止位S(邏輯1),若此時(shí)未收到邏輯1,說(shuō)明出現(xiàn)了錯(cuò)誤,在狀態(tài)寄存器中置“幀錯(cuò)誤”標(biāo)志。若沒有錯(cuò)誤,對(duì)全部數(shù)據(jù)位進(jìn)行奇偶校驗(yàn),無(wú)校驗(yàn)錯(cuò)時(shí),把數(shù)據(jù)位從移位寄存器中送數(shù)據(jù)輸入寄存器。若校驗(yàn)錯(cuò),在狀態(tài)寄存器中置奇偶錯(cuò)標(biāo)志。
(7)本幀信息全部接收完,把線路上出現(xiàn)的高電平作為空閑位。
(8)當(dāng)信號(hào)再次變?yōu)榈蜁r(shí),開始進(jìn)入下一幀的檢測(cè)。
---------------------------------
單片機(jī)常用11.0592M的的晶振,這個(gè)奇怪?jǐn)?shù)字是有來(lái)歷的:
波特率為9600BPS每位位寬t1=1/9600s
晶振周期t2=1/11.0592/1000000S
單片機(jī)機(jī)器周期t3=12*t2
t1/t3=96
即對(duì)于9600BPS的串口,單片機(jī)對(duì)其以96倍的速率進(jìn)行采樣。
如果單片機(jī)晶振用的不正確,會(huì)對(duì)串口接受產(chǎn)生誤碼。
---------------------------------
RS485和RS422
RS485總線,在要求通信距離為幾十米到上千米時(shí),廣泛采用RS-485 串行總線標(biāo)準(zhǔn)。RS485采用平衡發(fā)送和差分接收,因此具有抑制共模干擾的能力。加上總線收發(fā)器具有高靈敏度,能檢測(cè)低至200mV的電壓,故傳輸信號(hào)能在千米以外得到恢復(fù)。RS485采用半雙工工作方式,任何時(shí)候只能有一點(diǎn)處于發(fā)送狀態(tài),因此,發(fā)送電路須由使能信號(hào)加以控制。RS485用于多點(diǎn)互連時(shí)非常方便,可以省掉許多信號(hào)線。應(yīng)用RS485可以聯(lián)網(wǎng)構(gòu)成分布式系統(tǒng),其允許最多并聯(lián)32臺(tái)驅(qū)動(dòng)器和32臺(tái)接收器。
RS422總線,RS485和RS422電路原理基本相同,都是以差動(dòng)方式發(fā)送和接受,不需要數(shù)字地線。差動(dòng)工作是同速率條件下傳輸距離遠(yuǎn)的根本原因,這正是二者與RS232的根本區(qū)別,因?yàn)?strong>RS232是單端輸入輸出,雙工工作時(shí)至少需要數(shù)字地線發(fā)送線和接受線三條線(異步傳輸),還可以加其它控制線完成同步等功能。RS422通過(guò)兩對(duì)雙絞線可以全雙工工作收發(fā)互不影響,而RS485只能半雙工工作,發(fā)收不能同時(shí)進(jìn)行,但它只需要一對(duì)雙絞線。RS422和RS485在19kpbs下能傳輸1200米。用新型收發(fā)器線路上可連接臺(tái)設(shè)備。