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