單片機的串行通訊就是排成一隊走,並行就是排成一列走
///插播一條:我自己在今年年初錄製了一套還比較系統的入門單片機教程,想要的同學找我拿就行了免費的,私信我就可以哦~點我頭像黑色字體加我地球呺也能領取哦。最近比較閒,帶做畢設,帶學生參加省級或以上比賽///
主要內容:串行口的結構、串行口的4種工作方式、多機通信、波特率的制定方法、串行口的應用。
MCS-51單片機內部有一個全雙工的異步串行口。
全雙工:雙機通信之間可以同時實現發送數據和接收數據。
異步:收發雙方沒有應用同一時鐘來控制數據傳送。傳送的數據是以一幀一幀格式進行的。
串行通信(英語:Serial communication)是指在計算機總線或其他數據通道上,每次傳輸一個位元數據,並連續進行以上單次過程的通信方式。與之對應的是並行通信,它在串行埠上通過一次同時傳輸若干位元數據的方式進行通信。
簡言之:串行通訊就是排成一隊走,並行就是排成一列走。
同步串行通信(Synchronous serial communication)和異步串行通信(Asynchronous serial communication)
1)發送端在發送串行數據的同時,提供一個時鐘信號,並按照一定的約定(例如在時鐘信號的上升沿的時候,將數據發送出去)發送數據,接收端根據發送端提供的時鐘信號,以及大家的約定,接收數據。這就是常說的同步串行通信(Synchronous serial communication),I2C、SPI等有時鐘信號的協議,都屬於這種通信方式。
2)發送端在數據發送之前和之後,通過特定形式的信號(例如START信號和STOP信號),告訴接收端,可以開始(或者停止)接收數據了。與此同時,收發兩方會約定一個數據發送的速度(就是大名鼎鼎的波特率),發送端在發送START信號之後,就按照固定的節奏發送串行數據,與此同時,接收端在收到START信號之後,也按照固定的節奏接收串行數據。這就是常說的異步串行通信(Asynchronous serial communication)。
串行異步通信是單片機中常用的方式:
數據按幀傳輸,一包含數據按幀傳輸,一包含起始位、數據校驗和停止。依靠起始位、停止保持通信同步。因每幀傳輸都要建立一次同步,即需要額外兩個附加位適用於工作速度較低的場合。
串行口的接口及基本原理:
該單片機串行接口是一個可編程的全雙工串行通信接口。它可用作異步通信方式(UART),與串行傳送信息的外部設備相連接,或用於通過標準異步通信協議進行全雙工的8051多機系統也能通過同步方式,使用TTL或CMOS移位寄存器來擴充I/O口。通過管腳RXD(P3.0,串行數據接收端)和管腳TXD(P3.1,串行數據發送端)與外界通信。
兩個物理上獨立地接收和發送緩衝器,可同時收、發數據(全雙工)。兩個緩衝區公用一個特殊功能寄存器位元組地址:SBUF(99H),它們有相同名字和地址空間,但不會出現衝突,因為它們兩個一個只能被CPU讀出數據,一個只能被CPU寫入數據。
控制寄存器共兩個:特殊功能寄存器SCON(控制寄存器)和PCON(狀態寄存器)。
串行口控制寄存器SCON :位元組地址98H,可位尋址,格式如圖所示
(1)SM0、SM1——串行口4種工作方式的選擇位
SM0 SM1方式功能說明
0 0 0同步移位寄存器方式(用於擴展I/O口)
0 1 1 8位異步收發,波特率可變(由定時器控制)
1 0 2 9位異步收發,波特率為fosc/64或fosc/32
1 1 3 9位異步收發,波特率可變(由定時器控制)
表1串行口的4種工作方式
其中fosc為晶體震盪器頻率
SM2:多機通信控制位。在方式0時,SM2一定要等於0。在方式1中,當(SM2)=1則只有接收到有效停止位時,RI才置1。在方式2或方式3當(SM2)=1且接收到的第九位數據RB8=0時,RI才置1。
REN:接收允許控制位。由軟體置位以允許接收,又由軟體清0來禁止接收。
TB8: 是要發送數據的第9位。在方式2或方式3中,要發送的第9位數據,根據需要由軟體置1或清0。例如,可約定作為奇偶校驗位,或在多機通信中作為區別地址幀或數據幀的標誌位。
RB8:接收到的數據的第9位。在方式0中不使用RB8。在方式1中,若(SM2)=0,RB8為接收到的停止位。在方式2或方式3中,RB8為接收到的第9位數據。
TI:發送中斷標誌。在方式0中,第8位發送結束時,由硬體置位。在其它方式的發送停止位前,由硬體置位。TI置位既表示一幀信息發送結束,同時也是申請中斷,可根據需要,用軟體查詢的辦法獲得數據已發送完畢的信息,或用中斷的方式來發送下一個數據。TI必須用軟體清0。
RI:接收中斷標誌位。在方式0,當接收完第8位數據後,由硬體置位。在其它方式中,在接收到停止位的中間時刻由硬體置位(例外情況見於SM2的說明)。RI置位表示一幀數據接收完畢,可用查詢的辦法獲知或者用中斷的辦法獲知。RI也必須用軟體清0。
波特率即數據傳送的速率,其定義是每秒鐘傳送的二進位數的位數。例如,數據傳送的速率是120字符/s,而每個字符如上述規定包含10數位,則傳送波特率為1200波特。
波特率:每秒鐘傳送碼元數目,單位波特( Baud)(位/秒( bps)
假設波特率為: 1200b/s
每一位代碼的傳送時間 Td(碼元寬度)為波特率的倒數。
Td=1b/( 1200bs)= 0.833ms
而每個字符格式包含 10個代碼位(1個起始位、1個終止位、8個數據位),傳送一位元組需要 8.33ms。
傳送距離隨波特率增加而減少
波特率制定方法:
·收、發雙方的波特率必須一致。
·串口方式0和方式2的波特率是固定的;
·串口方式1和方式3的波特率是可變的,由T1溢出率確定。
串口各種工作方式下波特率的計算
.方式0時,波特率固定為時鐘頻率fosc的1/12。
.方式2時,波特率僅與SMOD位的值有關。
2定時器T1產生波特率的計算
(1)方式0波特率=時鐘頻率fosc×1/12,不受SMOD位的值的影響。若fosc=12MHz,波特率為fosc/12即1Mb/s。
(2)方式2波特率=(2^SMOD/64)×fosc
若fosc=12MHz: SMOD=0波特率=187.5kb/s;SMOD=1波特率=375kb/s
(3)方式1或方式3時,波特率為:
波特率=(2^SMOD/64)×T1的溢出率
實際設定波特率時,T1常設置為方式2定時(自動裝初值)這種方式不僅操作方便,也可避免因軟體重裝初值而帶來的定時誤差。
由上式可見,波特率隨fosc、SMOD和初值X而變化。
幀格式:
起始位(1位)---低電平;
數據位(8位);
奇偶校驗位(1位,可無校驗位);
停止位(1位)---高電平。
空閒位
串行口的四種工作方式:
1、工作方式0
工作方式0由SCON寄存器SM0\SM1都為低電平決定,用於移位寄存器,I/O口擴展應用。一幀信息包括8位數據位、低位在前,高位在後。波特率固定為fosc/12。
發送:TI=0時,執行MOV SBUF,A將數據寫入發送緩衝寄存器,並啟動發送。TXD端輸出移位脈衝,串行口把SBUF中數據依次從低到高從RXD讀出。一幀數據發送完畢,硬體自動將RI發送中斷標誌位置1,若再次發送需要用指令CLR TI清零。
MOV SBUF,A;啟動發送
JNB TI,$;若TI=0則該指令原地踏步等待發送完畢
CLR TI;請0,清發送中斷標誌位
接收:在RI=0,REN=1時,開始串行接收數據,TXD輸出移位脈衝。將數據以固定波特率接收到SBUF中去,一幀數據接收完畢後,硬體自動將RI置1,若再接收數據需要用MOV A,SBUF讀出數據,然後用指令將RI清零。
JNB RI,$;RI=0則軟體原地踏步,等待接收
CLR RI;清接收中斷標誌位
MOV A,SBUF;將接收數據送入累加器A中
2、工作方式1
一幀信息包括起始位、8位數據位、停止位共10位,低位在前,高位在後。波特率可變,由定時器/計數器T1的輸出率和SMOD(PCON.7)決定。
基本的接收發送指令與方式0同,但是:
(1)當SM2=0時,將接收的數據送入SBUF中,停止位送入RB8中,並置中斷標誌位RI=1.
(2)當SM2=1時,接收停止位=1,將接收的數據送入SBUF並且停止位送入RB8,並置RI=1,否則丟棄接收到的數據。再次接收前需要將RI清0。
波特率計算方法:波特率=(2^SMOD/32)*定時器T1的溢出率
溢出率:定時器在1S內產生溢出的次數。
定時器的溢出率與定時器的工作模式有關,可以改變TMOD寄存器T1方式欄位中的M1\M0兩位。T1定時器工作在方式2時,作為8位定時器自動重載功能。
3、方式2
9位異步通信接口。每幀數據均為11位,1位起始位0,8位數據位(先低位),1位可程控的第9位數據和1位停止位。
方式2波特率=(2^SMOD/64)×fosc
發送前,先根據通訊協議由軟體設置TB8(例如,雙機通訊時的奇偶校驗位或多機通訊時的地址/數據的標誌位)。
SM0、SM1=10,且REN=1。數據由RXD端輸入,接收11位信息。當位檢測到RXD從1到0的負跳變,並判斷起始位有效後,開始收一幀信息。在接收器完第9位數據後,需滿足兩個條件,才能將接收到的數據送入SBUF。
(1)RI=0,意味著接收緩衝器為空。
(2)SM2=0或接收到的第9位數據位RB8=1時。
當上述兩個條件滿足時,接收到的數據送入SBUF(接收緩衝器),第9位數據送入RB8,並置「1」RI。若不滿足兩個條件,接收的信息將被丟棄。
4、方式3
SM0、SM1=11,串口為方式3。波特率可變的9位異步通訊方式,除波特率外,方式3和方式2相同。
多機通信(主動式結構)
要保證主機與所選擇的從機實現可靠地通信,必須保證串口具有識別功能。
SCON中的SM2位就是滿足這一條件而設置的多機通信控制位。
原理:在串行口以方式2(或方式3)接收時,若SM2=1,表示置多機通信功能位,這時有兩種可能:
(1)接收到的第9位數據為1時,數據才裝入SBUF,並置中斷標志RI=1向CPU發出中斷請求;
(2)接收到的第9位數據為0時,則不產生中斷標誌,信息將拋棄。
主機發送信息兩類:一類是地址,用來需要和主機通信的從機,特徵是串行發送的第9位數據TB8為1;另一種是數據,串行傳送的第9位數據TB8=0.
主從機通信的過程如下:
1)使所有的從機工作方式2或3,且SM2=1,REN=1,以便主機發送地址信息,從機接收地址幀信息。
2)主機發送要尋址的從機的地址信息,其中包括8位需要與之通信的從機地址,第9位TB8=1.
3)所有從機接收到地址信息,置RI=1.
4)各從機進行地址比較,對於接收到的地址和自己的地址相同的從機,使SM2=0,準備接收主機隨後發來的數據,對於地址不符合的從機,仍保持SM2=1的狀態,對主機隨後的數據不予理睬,直至發現新的地址幀。
備註:補充RS485差分傳輸特性,所謂差分傳輸,就是發送端在兩條信號線上傳輸幅值相等相位相反的電信號,接收端對接受的兩條線信號作減法運算,這樣獲得幅值翻倍的信號。
特點:從嚴格意義上來講,所有電壓信號都是差分的,因為一個電壓只能是相對於另一個電壓而言的。在某些系統里,"系統地"被用作電壓基準點。當'地'當作電壓測量基準時,這種信號規劃被稱之為單端的。我們使用該術語是因為信號是用單個導體上的電壓來表示的。另一方面,一個差分信號作用在兩個導體上。信號值是兩個導體間的電壓差。儘管不是非常必要,這兩個電壓的平均值還是會經常保持一致。
可以想像,這兩個導體上被同時加入的一個相等的電壓,也就是所謂共模信號,對一個差分放大系統來說是沒有作用的,也就是說,儘管一個差分放大器的輸入有效信號幅度只需要幾毫伏,但它卻可以對一個高達幾伏特的共模信號無動於衷。這個指標叫做差分放大器的共模抑制比(CMRR),一般的運算放大器可以達到90db以上,高精度運放甚至達到120db。