單片機的串行通訊就是排成一隊走,並行就是排成一列走

2022-05-17     大方老師單片機

原標題:單片機的串行通訊就是排成一隊走,並行就是排成一列走

單片機的串行通訊就是排成一隊走,並行就是排成一列走

///插播一條:我自己在今年年初錄製了一套還比較系統的入門單片機教程,想要的同學找我拿就行了免費的,私信我就可以~點我頭像黑色字體加我地球呺也能領取哦。最近比較閒,帶做畢設,帶學生參加省級或以上比///

主要內容:串行口的結構、串行口4種工作方式、多機通信、波特率的制定方法、串行口的應用。

MCS-51單片機內部有一個全雙工的異步串行口。

全雙工:雙機通信之間可以同時實現發送數據和接收數據。

異步:收發雙方沒有應用同一時鐘來控制數據傳送。傳送的數據是以一幀一幀格式進行的。

串行通信(英語Serial communication)是指在計算機總線或其他數據通道上,每次傳輸一個位元數據,並連續進行以上單次過程的通信方式。與之對應的是並行通信,它在串行埠上通過一次同時傳輸若干位元數據的方式進行通信。

簡言之:串行通訊就是排成一隊走,並行就是排成一列走。

同步串行通信Synchronous serial communication)和異步串行通信Asynchronous serial communication

1)發送端在發送串行數據的同時,提供一個時鐘信號,並按照一定的約定(例如在時鐘信號的上升沿的時候,將數據發送出去)發送數據,接收端根據發送端提供的時鐘信號,以及大家的約定,接收數據。這就是常說的同步串行通信Synchronous serial communicationI2CSPI等有時鐘信號的協議,都屬於這種通信方式。

2)發送端在數據發送之前和之後,通過特定形式的信號(例START信號STOP信號),告訴接收端,可以開始(或者停止)接收數據了。與此同時,收發兩方會約定一個數據發送的速度(就是大名鼎鼎的波特率),發送端在發START信號之後,就按照固定的節奏發送串行數據,與此同時,接收端在收START信號之後,也按照固定的節奏接收串行數據。這就是常說的異步串行通信Asynchronous serial communication)。

串行異步通信是單片機中常用的方式:

數據按幀傳輸,一包數據按幀傳輸,一包起始、數據校驗和停止。依起始、停止保持通信同步。因每幀傳輸都要建立一次同,即需要額外兩個附加位適用於工作速度較低的場合。

串行口的接口及基本原理:

該單片機串行接口是一個可編程的全雙工串行通信接口。它可用作異步通信方式UART),與串行傳送信息的外部設備相連接,或用於通過標準異步通信協議進行全雙工8051多機系統也能通過同步方式,使TTLCMOS移位寄存器來擴I/O口。通過管RXDP3.0,串行數據接收端)和管TXDP3.1,串行數據發送端)與外界通信。

兩個物理上獨立地接收和發送緩衝器,可同時收、發數據(全雙工)。兩個緩衝區公用一個特殊功能寄存器位元組地址SBUF99H),它們有相同名字和地址空間,但不會出現衝突,因為它們兩個一個只能CPU讀出數據,一個只能CPU寫入數據。

控制寄存器共兩個:特殊功能寄存SCON(控制寄存器)PCON(狀態寄存器)。

串行口控制寄存SCON :位元組地98H,可位尋址,格式如圖所示

1SM0SM1串行4種工作方式的選擇位

SM0 SM1

0 0 0同步移位寄存器方式(用於擴I/O口)

0 1 1 8位異步收發,波特率可變(由定時器控制)

1 0 2 9位異步收發,波特率fosc/64fosc/32

1 1 3 9位異步收發,波特率可變(由定時器控制)

1串行口4種工作方式

fosc為晶體震盪器頻率

SM2:多機通信控制位。在方0SM2一定要等0。在方1中,當SM2=1則只有接收到有效停止位時RI1。在方2或方3SM2=1且接收到的第九位數RB8=0RI1

REN接收允許控制位。由軟體置位以允許接收,又由軟體0來禁止接收。

TB8: 是要發送數據的9位。在方2或方3中,要發送的9位數據,根據需要由軟體10。例如,可約定作為奇偶校驗位,或在多機通信中作為區別地址幀或數據幀的標誌位。

RB8:接收到的數據的9位。在方0中不使RB8。在方1中,若SM2=0RB8為接收到的停止位。在方2或方3RB8為接收到的9位數據。

TI:發送中斷標誌。在方0中,8位發送結束時,由硬體置位。在其它方式的發送停止位前,由硬體置位TI置位既表示一幀信息發送結束,同時也是申請中斷,可根據需要,用軟體查詢的辦法獲得數據已發送完畢的信息,或用中斷的方式來發送下一個數據TI必須用軟體0

RI:接收中斷標誌位。在方0,當接收完8位數據後,由硬體置位。在其它方式中,在接收到停止位的中間時刻由硬體置位(例外情況見SM2的說明)RI置位表示一幀數據接收完畢,可用查詢的辦法獲知或者用中斷的辦法獲知RI也必須用軟體0

波特率即數據傳送的速率,其定義是每秒鐘傳送的二進位數的位數。例如,數據傳送的速率120/s,而每個字符如上述規定包10數位,則傳送波特率1200波特。

波特:每秒鐘傳送碼元數目,單位波特 Baud位/秒 bps

假設波特率為 1200bs

每一位代碼的傳送時 Td(碼元寬)為波特率的倒數。

Td1b 1200bs 0.833ms

而每個字符格式包 10個代碼位1個起始位1個終止位8個數據位),傳送一位元組需 8.33ms

傳送距離隨波特率增加而減少

波特率制定方法:

·收、發雙方的波特率必須一致。

·串口方0和方2的波特率是固定的;

·串口方1和方3的波特率是可變的,T1溢出率確定。

串口各種工作方式下波特率的計算

.0時,波特率固定為時鐘頻率fosc1/12

.2時,波特率僅SMOD位的值有關。

2定時T1產生波特率的計算

1)方0波特=時鐘頻fosc×1/12,不SMOD位的值的影響。fosc=12MHz,波特率fosc/121Mb/s

2)方2波特=2^SMOD/64×fosc

fosc=12MHz: SMOD=0波特=187.5kb/sSMOD=1波特=375kb/s

3)方1或方3時,波特率為:

波特=2^SMOD/64×T1的溢出率

實際設定波特率時T1常設置為方2定時(自動裝初值)這種方式不僅操作方便,也可避免因軟體重裝初值而帶來的定時誤差。

由上式可見,波特率隨foscSMOD和初值X而變化。

幀格式:

起始位(1位---低電平;

數據位(8位);

奇偶校驗位(1位,可無校驗位);

停止位(1位---高電平。

空閒位

串行口的四種工作方式:

1、工作方0

工作方0SCON寄存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 TI0,清發送中斷標誌位

接收:RI=0,REN=1時,開始串行接收數據TXD輸出移位脈衝。將數據以固定波特率接收SBUF中去,一幀數據接收完畢後,硬體自動RI1,若再接收數據需要MOV A,SBUF讀出數據,然後用指令RI清零。

JNB RI,$;RI=0則軟體原地踏步,等待接收

CLR RI;清接收中斷標誌位

MOV A,SBUF;將接收數據送入累加A

2、工作方1

一幀信息包括起始位8位數據位、停止位10位,低位在前,高位在後。波特率可變,由定時/計數T1的輸出率SMODPCON.7)決定。

基本的接收發送指令與方0同,但是:

1SM2=0時,將接收的數據送SBUF中,停止位送RB8中,並置中斷標誌RI=1.

2SM2=1時,接收停止=1,將接收的數據送SBUF並且停止位送RB8,並RI=1,否則丟棄接收到的數據。再次接收前需要RI0

波特率計算方法:波特=2^SMOD/32*定時T1的溢出率

溢出率:定時器1S內產生溢出的次數。

定時器的溢出率與定時器的工作模式有關,可以改TMOD寄存T1方式欄位中M1\M0兩位T1定時器工作在方2時,作8位定時器自動重載功能。

3、方2

9位異步通信接口。每幀數據均111位起始08位數據位(先低位)1位可程控的9位數據1位停止位。

2波特=2^SMOD/64×fosc

發送前,先根據通訊協議由軟體設TB8(例如,雙機通訊時的奇偶校驗位或多機通訊時的地/數據的標誌位)。

SM0SM1=10REN=1。數據RXD端輸入,接11位信息。當位檢測RXD10的負跳變,並判斷起始位有效後,開始收一幀信息。在接收器完9位數據後,需滿足兩個條件,才能將接收到的數據送SBUF

1RI=0,意味著接收緩衝器為空。

2SM2=0或接收到的9位數據RB8=1時。

當上述兩個條件滿足時,接收到的數據送SBUF(接收緩衝器),9位數據送RB8,並1RI。若不滿足兩個條件,接收的信息將被丟棄。

4、方3

SM0SM1=11,串口為方3。波特率可變9位異步通訊方式,除波特率外,方3和方2相同。

多機通信(主動式結構)

要保證主機與所選擇的從機實現可靠地通信,必須保證串口具有識別功能。

SCONSM2位就是滿足這一條件而設置的多機通信控制位。

原理:在串行口以方2(或方3)接收時,SM2=1,表示置多機通信功能位,這時有兩種可能:

1)接收到的9位數據1時,數據才裝SBUF,並置中斷標RI=1CPU發出中斷請求;

2)接收到的9位數據0時,則不產生中斷標誌,信息將拋棄。

主機發送信息兩類:一類是地址,用來需要和主機通信的從機,特徵是串行發送的9位數TB81;另一種是數據,串行傳送的9位數TB8=0.

主從機通信的過程如下:

1)使所有的從機工作方23SM2=1REN=1,以便主機發送地址信息,從機接收地址幀信息。

2)主機發送要尋址的從機的地址信息,其中包8位需要與之通信的從機地址,9TB8=1.

3)所有從機接收到地址信息,RI=1.

4)各從機進行地址比較,對於接收到的地址和自己的地址相同的從機,使SM2=0,準備接收主機隨後發來的數據,對於地址不符合的從機,仍保SM2=1的狀態,對主機隨後的數據不予理睬,直至發現新的地址幀。

備註:補充RS485差分傳輸特性,所謂差分傳輸,就是發送端在兩條信號線上傳輸幅值相等相位相反的電信號,接收端對接受的兩條線信號作減法運算,這樣獲得幅值翻倍的信號。

特點:從嚴格意義上來講,所有電壓信號都是差分的,因為一個電壓只能是相對於另一個電壓而言的。在某些系統里"系統"被用作電壓基準點。''當作電壓測量基準時,這種信號規劃被稱之為單端的。我們使用該術語是因為信號是用單個導體上的電壓來表示的另一方面,一個差分信號作用在兩個導體上。信號值是兩個導體間的電壓差。儘管不是非常必要,這兩個電壓的平均值還是會經常保持一致。

可以想像,這兩個導體上被同時加入的一個相等的電壓,也就是所謂共模信號,對一個差分放大系統來說是沒有作用的,也就是說,儘管一個差分放大器的輸入有效信號幅度只需要幾毫伏,但它卻可以對一個高達幾伏特的共模信號無動於衷。這個指標叫做差分放大器的共模抑制比CMRR),一般的運算放大器可以達90db以上,高精度運放甚至達120db

文章來源: https://twgreatdaily.com/6cec4fa8aeb1db07688481a170ec9222.html