串口通信的基本認識
通信分為并行通信和串行通信,并行通信時的數據各個位同時傳送,可以實現字節為單位通信,但通信線多占用資源,成本高。以前用到的的P1=0x55,一次給P1口的8個管腳分別賦值,同時進行信號輸出,類似于8個車道可以過去8輛車,這樣的形式是并行的,一般稱P0,P1,P2,P3為51單片機的4組并行總線。
串行通信,就是一個車道,一個只能通過一輛車,如果一個0x55這樣一個字節的數據要傳輸過去的話,假如低位在前,高位在后的話,那發送方式是:0-1-0-1-0-1-0-1,一位一位的進行傳輸,要發送8次才能發送完一個字節
STC89C52有兩個引腳是專門用來做串口通信的,一個是P3.0(RXD),一個是P3.1(TXD),他們組成的通信接口就是串行接口,簡稱串口。用于兩個單片機進行UART通信。兩單片機通信接口連接方式:RXD——TXD,TXD——RXD。
單片機1的TXD發送通道接到單片機2的RXD接收通道,單片機的1的RXD接收通道接到單片機2的TXD發送通道,從而實現相互通信。
當單片機1想給單片機2發送數據,比如發送了0xCE,用二進制表示就是11001110,在串口通信過程中,是低位先發,高位后發的原則,那么就是讓TXD首先拉低電平,持續一段時間,發送一位0,然后拉高電平,持續一段時間,發送一位1,繼續拉高,在持續一段時間,發送一位1,一直把8位二進制數11001110全部發送完畢,這里涉及到一個問題,就是持續的一個時間段時間“到底是多少”。因而便引入通信中非常重要的一個概念波特率,也叫做比特率。
波特率
波特率就是發送二進制數據位的速率,習慣用baud表示,即我們發送一位二進制數據持續的時間=1/baud。在通信之前,單片機1和單片機2首先都要明確約定好他們之間的通信波特率,必須保持一致,收發雙方才能正常通信。
約定好速度之后,我們還要考慮第二個問題,數據什么時候是起始,什么時候是結束?提前和延遲結束都會接收錯誤。在uart通信的時候,一個字節是8位,規定當沒有通信信號發生時,通信線路保持高電平,當數據發送前,先發一位0表示起始位,然后發送8位數據位,數據位是先低再高,數位位發送完后才呢個后再發送一位1表示停止位,這樣我們要發送的8位數據,實際上我們發送了10位,多出來兩位其中一個是起始位,一個是停止位。而接受方一直保持的高電平,一旦檢測到一位低電平,準備開始接受數據,接受8位數據后,然后檢測停止位,再準備下一個數據接收。 串口數據發送示意圖,實際上是一個時域示意圖,就是信號隨著時間變化的對應關系。比如在單片機的發送引腳上,左邊的是先發生的,右邊的是后發生的,數據位的切換時間就是波特率分之一秒,如果能夠理解時域的概念,后邊很多通信的時序圖就很容易理解了。
手把手教你單片機串口通信-基礎篇
http://www.zg4o1577.cn/bbs/dpj-107804-1.html
|