在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

理解51單片機串口通信的波特率與USB轉串口通信

j4AI_wujianying ? 來源:未知 ? 作者:steve ? 2018-04-21 11:15 ? 次閱讀

串口通信的基本認識

通信分為并行通信和串行通信,并行通信時的數據各個位同時傳送,可以實現字節為單位通信,但通信線多占用資源,成本高。以前用到的的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位數據后,然后檢測停止位,再準備下一個數據接收。

串口數據發送示意圖,實際上是一個時域示意圖,就是信號隨著時間變化的對應關系。比如在單片機的發送引腳上,左邊的是先發生的,右邊的是后發生的,數據位的切換時間就是波特率分之一秒,如果能夠理解時域的概念,后邊很多通信的時序圖就很容易理解了。

RS232

在我們電腦上,一般都會有一個9針的串行接口,這個串行接口叫做RS232接口,它和UART通信有關聯,但是由于現在筆記本電腦不帶9針串口,所以和單片機通信越來越趨于使用USB虛擬串口。

九針串口分工頭和母頭

公頭上5下4,上5從左到右為1.2.3.4.5;下4從左到右為6.7.8.9;

母頭上5下4,上5從左到右為5.4.3.2.1;下4從左到右為9.8.7.6;

RS232接口一共有9個引腳,分別定義是:1、載波檢測DCD;2、接收數據RXD;3、發送數據TXD;4、數據終端準備好DTR;5、信號地線SG;6、數據準備好DSR;7、請求發送RTS;8、清除發送CTS;9、振鈴提示RI。我們要讓這個串口和我們單片機進行通信,我們只需要關心其中的2腳RXD、3腳TXD和5腳GND即可。

雖然這三個引腳的名字和我們單片機上的串口名字一樣,但是卻不能直接和單片機對連通信,這是為什么呢?隨著我們了解的內容越來越多,我們得慢慢知道,不是所有的電路都是5V代表高電平而0V代表低電平的。對于RS232標準來說,它是個反邏輯,也叫做負邏輯。為何叫負邏輯?它的TXD和RXD的電壓,-3V~-15V電壓代表是1,+3~+15V電壓代表是0。低電平代表的是1,而高電平代表的是0,所以稱之為負邏輯。因此電腦的9針RS232串口是不能和單片機直接連接的,需要用一個電平轉換芯片MAX232來完成。

這個芯片就可以實現把標準RS232串口電平轉換成我們單片機能夠識別和承受的UART 0V/5V電平。從這里大家似乎慢慢有點明白了,其實RS232串口和UART串口,它們的協議類型是一樣的,只是電平標準不同而已,而MAX232這個芯片起到的就是中間人的作用,它把UART電平轉換成RS232電平,也把RS232電平轉換成UART電平,從而實現標準RS232接口和單片機UART之間的通信連接。

USB轉串口通信

隨著技術的發展,工業上還有RS232串口通信的大量使用,但是商業技術的應用上,已經慢慢的使用USB轉UART技術取代了RS232串口,絕大多數筆記本電腦已經沒有串口這個東西了,那我們要實現單片機和電腦之間的通信該怎么辦呢?

我們只需要在電路上添加一個USB轉串口芯片,就可以成功實現USB通信協議和標準UART串行通信協議的轉換,在我們的開發板上,我們使用的是CH340T這個芯片。

我們需要用跳線帽把中間和下邊的針短接在一起。右側的CH340T這個電路很簡單,把電源、晶振接好后,6腳和7腳的DP和DM分別接USB口的2個數據引腳上去,3腳和4腳通過跳線接到了我們單片機的TXD和RXD上去。

CH340T的電路里3腳位置加了個4148的二極管,是一個小技巧。因為STC89C52這個單片機下載程序時需要冷啟動,就是先點下載后上電,上電瞬間單片機會先檢測需要不需要下載程序。雖然單片機的VCC是由開關來控制,但是由于CH340T的3腳是輸出引腳,如果沒有此二極管,開關后級單片機在斷電的情況下,CH340T的3腳和單片機的P3.0(即RXD)引腳連在一起,有電流會通過這個引腳流入后級電路并且給后級的電容充電,造成后級有一定幅度的電壓,這個電壓值雖然只有兩三伏左右,但是可能會影響到正常的冷啟動。加了二極管后,一方面不影響通信,另外一個方面還可以消除這種不良影響。這個地方可以暫時作為了解,大家如果自己做這類電路,可以參考一下。

IO口模擬UART串口通信

UART串口波特率,常用的值是300、600、1200、2400、4800、9600、14400、19200、28800、38400、57600、115200等速率。IO口模擬UART串行通信程序是一個簡單的演示程序,我們使用串口調試助手下發一個數據,數據加1后,再自動返回。

串口調試助手,這里我們直接使用STC-ISP軟件自帶的串口調試助手,先把串口調試助手的使用給大家說一下,如圖11-6所示。第一步要選擇串口助手菜單,第二步選擇十六進制顯示,第三步選擇十六進制發送,第四步選擇COM口,這個COM口要和自己電腦設備管理器里的那個COM口一致,波特率按我們程序設定好的選擇,我們程序中讓一個數據位持續時間是1/9600秒,那這個地方選擇波特率就是選9600,校驗位選N,數據位8,停止位1。

串口調試助手的實質就是利用電腦上的UART通信接口,發送數據給我們的單片機,也可以把我們的單片機發送的數據接收到這個調試助手界面上。

因為初次接觸通信方面的技術,所以我把后面的IO模擬串口通信程序進行一下解釋,大家可以邊看我的解釋邊看程序,把底層原理先徹底弄懂。

變量定義部分就不用說了,直接看main主函數。首先是對通信的波特率的設定,在這里我們配置的波特率是9600,那么串口調試助手也得是9600。配置波特率的時候,我們用的是定時器T0的模式2。模式2中,不再是TH0代表高8位,TL0代表低8位了,而只有TL0在進行計數,當TL0溢出后,不僅僅會讓TF0變1,而且還會將TH0中的內容重新自動裝到TL0中。這樣有一個好處,就是我們可以把想要的定時器初值提前存在TH0中,當TL0溢出后,TH0自動把初值就重新送入TL0了,全自動的,不需要程序中再給TL0重新賦值了,配置方式很簡單,大家可以自己看下程序并且計算一下初值。

波特率設置好以后,打開中斷,然后等待接收串口調試助手下發的數據。接收數據的時候,首先要進行低電平檢測while (PIN_RXD),若沒有低電平則說明沒有數據,一旦檢測到低電平,就進入啟動接收函數StartRXD()。接收函數最開始啟動半個波特率周期,初學可能這里不是很明白。大家回頭看一下我們的圖11-2里邊的串口數據示意圖,如果在數據位電平變化的時候去讀取,因為時序上的誤差以及信號穩定性的問題很容易讀錯數據,所以我們希望在信號最穩定的時候去讀數據。除了信號變化的那個沿的位置外,其它位置都很穩定,那么我們現在就約定在信號中間位置去讀取電平狀態,這樣能夠保證我們讀的一定是正確的。

一旦讀到了起始信號,我們就把當前狀態設定成接收狀態,并且打開定時器中斷,第一次是半個周期進入中斷后,對起始位進行二次判斷一下,確認一下起始位是低電平,而不是一個干擾信號。以后每經過1/9600秒進入一次中斷,并且把這個引腳的狀態讀到RxdBuf里邊。等待接收完畢之后,我們再把這個RxdBuf加1,再通過TXD引腳發送出去,同樣需要先發一位起始位,然后發8個數據位,再發結束位,發送完畢后,程序運行到while (PIN_RXD),等待第二輪信號接收的開始。

串口通信基本應用

通信的三種基本類型

常見的通信傳輸方式可以分為單工通信、半雙工通信、全雙工通信。

單工通信就是只允許一個方向向另外一個方向傳送信息,而另外一方不能回傳消息。比如:電視遙控器、收音基等

半雙工通信是指數據可以在雙方之間相互傳播,但是同一時刻只能呢個其中一方發給另一方,比如:對講機

全雙工通信是指發送數據同時也能接收數據,兩者同步進行,就如同我們的電話一樣,我們說的同時也可以聽到對方的聲音。

uart模塊介紹

IO口模擬串口通信,讓大家了解了串口通信的本質,但是我們的單片機程序卻需要不停的檢測掃描單片機IO口收到的數據,大量占用了單片機的運行時間。這時候就會有聰明人想了,其實我們并不是很關心通信的過程,我們只需要一個通信的結果,最終得到接收到的數據就行了。這樣我們可以在單片機內部做一個硬件模塊,讓它自動接收數據,接收完了,通知我們一下就可以了,我們的51單片機內部就存在這樣一個UART模塊,要正確使用它,當然還得先把對應的特殊功能寄存器配置好。

51單片機的UART串口的結構由串行口控制寄存器SCON、發送和接收電路三部分構成,先來了解一下串口控制寄存器SCON。

SCON串行控制器的位分配(地址:0x98)

位:符號:復位值: 0:RI:0;1:TI:0;2:RB8:0;3:TB8:0;4:REN:0;5:SM2:0;6:SM1:0;7:SM0:0;

0位RI:接收中斷標志位,當接收電路接收到停止位的中間位置時,RI由硬件置1,必須通過軟件清零

1位TI:發送中斷標志位,當發送電路發送到停止位的中間位置時,TI由硬件置1,必須通過軟件清零。

2位RB8:模式2和3中接收到的第9位數據(很少用),模式1用來接收停止位。

3位TB8:模式2和3中要發送的第9位數據(很少用)。

4位REN:使能串行接收。由軟件置位使能接收,軟件清零則禁止接收。

5位SM2:多機通信控制位(極少用),模式1直接清零。

6位SM1和7位SM0:

這兩位共同決定了串口通信的模式0~模式3共4種模式。我們最常用的就是模式1,也就是SM0=0,SM1=1,下邊我們重點就講模式1,其它模式從略。

對于串口的四種模式,模式1是最常用的,就是我們前邊提到的1位起始位,8位數據位和1位停止位。下面我們就詳細介紹模式1的工作細節和使用方法,至于其它3種模式與此也是大同小異,真正遇到需要使用的時候大家再去查閱相關資料就行了。

在我們使用IO口模擬串口通信的時候,串口的波特率是使用定時器T0的中斷體現出來的。在硬件串口模塊中,有一個專門的波特率發生器用來控制發送和接收數據的速度。對于STC89C52單片機來講,這個波特率發生器只能由定時器T1或定時器T2產生,而不能由定時器T0產生,這和我們模擬的通信是完全不同的概念。

如果用定時器2,需要配置額外的寄存器,默認是使用定時器1的,我們本章內容主要就使用定時器T1作為波特率發生器來講解,方式1下的波特率發生器必須使用定時器T1的模式2,也就是自動重裝載模式,定時器的重載值計算公式為:

TH1 = TL1 = 256 - 晶振值/12 /2/16 /波特率

和波特率有關的還有一個寄存器,是一個電源管理寄存器PCON,他的最高位可以把波特率提高一倍,也就是如果寫PCON |= 0x80以后,計算公式就成了:

TH1 = TL1 = 256 - 晶振值/12 /16 /波特率

公式中數字的含義這里解釋一下,256是8位定時器的溢出值,也就是TL1的溢出值,晶振值在我們的開發板上就是11059200,12是說1個機器周期等于12個時鐘周期,值得關注的是這個16,我們來重點說明。在IO口模擬串口通信接收數據的時候,采集的是這一位數據的中間位置,而實際上串口模塊比我們模擬的要復雜和精確一些。他采取的方式是把一位信號采集16次,其中第7、8、9次取出來,這三次中其中兩次如果是高電平,那么就認定這一位數據是1,如果兩次是低電平,那么就認定這一位是0,這樣一旦受到意外干擾讀錯一次數據,也依然可以保證最終數據的正確性。

串口通信的發送和接收電路在物理上有2個名字相同的SBUF寄存器,它們的地址也都是0x99,但是一個用來做發送緩沖,一個用來做接收緩沖。意思就是說,有2個房間,兩個房間的門牌號是一樣的,其中一個只出人不進人,另外一個只進人不出人,這樣的話,我們就可以實現UART的全雙工通信,相互之間不會產生干擾。但是在邏輯上呢,我們每次只操作SBUF,單片機會自動根據對它執行的是“讀”還是“寫”操作來選擇是接收SBUF還是發送SBUF,后邊通過程序,我們就會徹底了解這個問題。

UART串口程序

一般情況下,我們編寫串口通信程序的基本步驟如下所示:

1、配置串口為模式1。

2、配置定時器T1為模式2,即自動重裝模式。

3、根據波特率計算TH1和TL1的初值,如果有需要可以使用PCON進行波特率加倍。

4、打開定時器控制寄存器TR1,讓定時器跑起來。

這里還要特別注意一下,就是在使用T1做波特率發生器的時候,千萬不要再使能T1的中斷了。

我們先來看一下由IO口模擬串口通信直接改為使用硬件UART模塊時的程序代碼,看看程序是不是簡單了很多,因為大部分的工作硬件模塊都替我們做了。程序功能和IO口模擬的是完全一樣的。

通信實例與ASCLL碼

先拋開我們使用的漢字不談,那么我們常用的字符就包含了0~9的數字、A~Z/a~z的字母、還有各種標點符號等。那么在單片機系統里面我們怎么來表示它們呢?ASCII碼(American Standard Code for Information Interchange,即美國信息互換標準代碼)可以完成這個使命:我們知道,在單片機中一個字節的數據可以有0~255共256個值,我們取其中的0~127共128個值賦予了它另外一層涵義

我們用字符格式發送一個小寫的a,返回一個十六進制的0x61,數碼管上顯示的也是61,ASCII碼表里字符a對應十進制是97,等于十六進制的0x61;我們再用字符格式發送一個數字1,返回一個十六進制的0x31,數碼管上顯示的也是31,ASCII表里字符1對應的十進制是49,等于十六進制的0x31。這下大家就該清楚了:所謂的十六進制發送和十六進制接收,都是按字節數據的真實值進行的;而字符格式發送和字符格式接收,是按ASCII碼表中字符形式進行的,但它實際上最終傳輸的還是一個字節數據。這個表格,當然不需要大家去記住,理解它,用的時候過來查就行了。


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6059

    文章

    44822

    瀏覽量

    644939
  • 串口通信
    +關注

    關注

    34

    文章

    1633

    瀏覽量

    56409

原文標題:深入理解51單片機串口通信

文章出處:【微信號:wujianying_danpianji,微信公眾號:單片機精講吳鑒鷹】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    STM32單片機串口波特率計算方法

    不管是什么單片機,在使用串口通信的時候,有一個非常重要的參數:波特率。什么是波特率波特率就是每
    的頭像 發表于 01-05 09:59 ?2.9w次閱讀
    STM32<b class='flag-5'>單片機</b>的<b class='flag-5'>串口</b><b class='flag-5'>波特率</b>計算方法

    什么是串口波特率串口波特率的分類及應用詳解

    什么是串口波特率串口波特率是指串口通信系統中傳輸數據的速率。在UART
    的頭像 發表于 08-08 10:09 ?6622次閱讀
    什么是<b class='flag-5'>串口</b><b class='flag-5'>波特率</b>?<b class='flag-5'>串口</b><b class='flag-5'>波特率</b>的分類及應用詳解

    串口通信波特率與初值

    在用51單片機串口通信的時候涉及到波特率與初值的計算問題、下面有個計算小工具,便于你計算。。。。拿出來分享下。。。。
    發表于 12-05 22:49

    51單片機串口通信波特率定時計算器

    本人在無聊期間,用VC寫了一個的51單片機串口通信波特率定時計算器,在此分享,有需要的可以下載,高手莫見笑..
    發表于 04-09 22:45

    USB串口的特殊波特率通信

    、9600、14400、19200、28800、38400、57600、115200、230400。USB串口的特殊波特率通信是指300到230400之間但是不同于以上數字的任意
    發表于 10-14 13:17

    深入理解51單片機串口通信通信實例

    全文首先闡述了串口通信的原理及RS232相關概述,其次介紹了USB串口通信與IO口模擬UART
    發表于 04-19 16:52 ?2.8w次閱讀
    深入<b class='flag-5'>理解</b><b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>串口</b><b class='flag-5'>通信</b>及<b class='flag-5'>通信</b>實例

    51單片機串口初值和波特率計算器應用程序免費下載

    本文檔的主要內容詳細介紹的是51單片機串口初值和波特率計算器應用程序免費下載。
    發表于 10-15 08:00 ?10次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>串口</b>初值和<b class='flag-5'>波特率</b>計算器應用程序免費下載

    如何將藍牙模塊進入AT模式來調整波特率進行手機與單片機藍牙串口通信

    本文檔的主要內容詳細介紹的是如何將藍牙模塊進入AT模式來調整波特率進行手機與單片機藍牙串口通信
    發表于 04-17 17:27 ?10次下載
    如何將藍牙模塊進入AT模式來調整<b class='flag-5'>波特率</b>進行手機與<b class='flag-5'>單片機</b>藍牙<b class='flag-5'>串口</b><b class='flag-5'>通信</b>

    51單片機串口波特率的計算方法說明

    本文檔的主要內容詳細介紹的是51單片機串口波特率的計算方法說明。對于11.0592M晶振 bot=256-(11059200/9600/32) 此處
    發表于 07-11 17:40 ?4次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>串口</b><b class='flag-5'>波特率</b>的計算方法說明

    51單片機串口通信

    51單片機串口通信文章目錄51單片機串口
    發表于 11-18 14:06 ?22次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>串口</b><b class='flag-5'>通信</b>

    51單片機--串口操作上機實驗 及 常用波特率初值表

    單片機與PC通信在上位機上用串口調試助手發送一個字符,單片機收到字符后返回給上位“I GET
    發表于 11-23 16:36 ?1次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>--<b class='flag-5'>串口</b>操作上機實驗 及 常用<b class='flag-5'>波特率</b>初值表

    STM32 USB虛擬串口波特率問題(含源碼)

    ,需要將單片機真實串口(這里以USART1為例)的收發數據與USB口進行交互。用過USB虛擬串口的朋友可能知道,要實現該功能,還存在以下問題
    發表于 12-28 19:51 ?21次下載
    STM32 <b class='flag-5'>USB</b>虛擬<b class='flag-5'>串口</b><b class='flag-5'>波特率</b>問題(含源碼)

    USB串口線的極限波特率

    網店上有許多 USB 串口線,按芯片來分,有以下幾種: CP2104 PL2303 CH340 采用 CH340 芯片的串口線,性能比較穩定,價格上貴一些。在一般
    發表于 01-12 19:23 ?7次下載
    <b class='flag-5'>USB</b><b class='flag-5'>轉</b><b class='flag-5'>串口</b>線的極限<b class='flag-5'>波特率</b>

    什么是串口波特率串口通信為什么要設置波特率

    在電子設備的世界中,數據是通過各種方式進行傳輸的。其中,串口通信是一種常見的數據傳輸方式,它以其簡單、可靠和廣泛的特性,成為了電子設備間通信的重要手段。而在串口
    的頭像 發表于 11-03 08:21 ?6382次閱讀
    什么是<b class='flag-5'>串口</b><b class='flag-5'>波特率</b>?<b class='flag-5'>串口</b><b class='flag-5'>通信</b>為什么要設置<b class='flag-5'>波特率</b>?

    什么是串口波特率串口通信為什么要設置波特率

    什么是串口波特率串口通信為什么要設置波特率波特率與比特
    的頭像 發表于 01-22 16:10 ?2623次閱讀
    主站蜘蛛池模板: 四虎影院最新网址 | 网站大全黄免费 | 国产在线一区视频 | 成 人色 网 站 欧美大片在线观看 | 成年人一级片 | 国产一级大片免费看 | bt磁力在线搜索 | 在线观看黄日本高清视频 | 777奇米影音| 男人资源在线 | 无遮挡很爽很污很黄在线网站 | 无遮挡很污很爽很黄的网站 | 夜夜爱夜夜操 | 成成人看片在线 | 亚洲天堂ww | 老汉色视频| 免费观看的黄色网址 | 国产看午夜精品理论片 | 中文三级视频 | 亚洲mv在线观看 | 国产四虎精品 | 青青热久免费精品视频在线观看 | 天天爽夜夜爽精品视频一 | 亚洲综合色吧 | 在线视频精品视频 | 欧美三级在线观看视频 | 久国产精品久久精品国产四虎 | 色偷偷女男人的天堂亚洲网 | 在线免费视频网站 | 国产精品欧美久久久久天天影视 | 日本免费人成黄页网观看视频 | 国产欧美久久久精品影院 | 在线你懂得 | 国产精品国产午夜免费福利看 | 五月婷婷电影 | 午夜国产精品久久影院 | 中文字幕在线色 | 亚洲第二色 | 天天操人人爱 | 最新大黄网站免费 | 五月天亚洲婷婷 |