一、串口通信概念
1、串口通信的作用
串口通信主要用于單片機與外部設備的通信。51單片機自身有圈雙工的異步通信串口。
2、串口通信的通信方式
串口通信基本通信方式有兩種:并行通信和串行通信。
串行通信:傳送數據的各位按順序一位一位發送或者接收
并行通信:傳送數據各位同時發送或接收
3、串行通信的通信方式
串行通信根據幀信息的格式分為異步通信和同步通信
異步通信:一幀數據先用一個起始位“0”表字符開始,然后是5~8位數據,即該字符的代碼,規定低位在前,高位在后,接下來是奇偶校驗位(可以省略),最后一個停止位“1”表示字符結束。
同步通信:發送方在數據或字符前面用1~2字節同步字符指示一幀的開始,同步字符是雙方約定好的,接收方檢測到與規定的同步字符符合時,開始接收數據,發送方按順序連續傳送N個數據,N個數據傳完后,發送1-2字節的校驗碼。
接收端和發送端的同步由時鐘實現。
同步通信省去了字符開始和結束的標志,一幀可以連續傳送若干個數據,所以速度高于異步傳送。
4、通信方向
串口通信的通信方向分為單工、半雙工、全雙工三種。
單工傳送:通信接口只能發送或者接收。
半雙工傳送:通信接口可以接收也可以發送,但是發送和接收不能同時進行。
全雙工傳送:兩機的發送和接收可以同時進行
一般情況下,我們的51單片機采用的為全雙工,通過TXD,RXD兩個通信接口同時進行數據的發送和接收。
需要注意的是,51單片機在實物連線上要反接,一機的TXD應接另一機的RXD,RXD接另一機的TXD。而一些特殊型號的單片機會標注正接,即RXD接RXD,TXD接TXD。
5、串行通信接口的作用
我們單片機內部的CPU只能處理并行數據,要進行串行通信,就必須要接我們的串行接口,按串行通信協議,進行數據的處理。具體的有
A:實現數據格式化
按串行數據格式,對CPU的并行數據進行處理。
B:進行串行數據和并行數據的轉換
發送端,并行轉串行送接收端;
接收端,串行轉并行送CPU;
C:控制數據的傳輸速率
接口應具備對數據傳輸速率----波特率的控制選擇能力(具有波特率發生器)
D:進行傳送錯誤檢測
發送時,接口對傳送數據在的生成奇偶校驗位或校驗碼;在接收時接口檢查校驗位或校驗碼,以確定傳送中是否有誤碼。
51單片機內含的通信接口:
51單片機內含一個全雙工的異步通信接口,通過對串行接口寫控制字可以選擇其數據格式,內含波特率發生器,提供可選波特率,可完成雙機通信或多機通信。
二、串行口的結構和工作原理
1、串行口結構
串行口主要由兩個數據緩沖寄存器SBUF和一個輸入移位寄存器組成,內部還有一個串行控制寄存器SCON和一個波特率發生器(T1定時器或內部時鐘及分頻器組成)
我們串行口發送的數據先逐位進入接收端移位寄存器,再送入接收端SBUF。移位寄存器和SBUF采用了雙緩沖結構,避免兩幀數據發送混亂。
2、串行口工作原理
A:發送機CPU向SBUF寫入數據,啟動發送過程
B:按SCON設定好的控制方式和設定的波特率,由低位到高位一位一位的按移位時鐘發送到電纜線上
C:數據通過電纜線到達接收機
D:接收機按照設定的波特率,按移位時鐘一位一位的由低到高移入SBUF
因此我們的發送機,接收機波特率必須保持一致,才可以正常的收發數據,即發送機移出的剛好被接收機移入。
E:發送機發完一幀數據(發送緩沖器空),硬件置位發送中斷標志位TI(SCON.1)位可作為查詢標志,如果設置為允許中斷,將引起中斷,發送機可再發送下一幀數據。(先發后查)
F:接收機,預先置位REN(SCON.4)即允許接收,再按波特率由低到高進入接收機移位寄存器,數據收齊后(接收緩存器滿),硬件置位RI(SCON.0),可作為查詢標志,如果設置為允許中斷,將引起接收中斷,CPU方可從SBUF中讀入這幀數據。(先查后收)
總結:
① 查詢方式發送的過程:發送一個數據→查詢TI→發送下一個數據(先發后查)
查詢方式接收的過程:查詢RI→讀入一個數據→查詢RI→讀入下一個數據(先查后收)
②通信雙方波特率必須相同
3、波特率的設定
第一種方式:
系統時鐘分頻值
第二種方式:
定時器T1提供(針對基礎51來講)
波特率計算:
當串口工作在工作方式0和2時,波特率固定。
方式0時 fosc / 12
方式2時 SMOD=0 fosc / 32 或 SMOD=1 fosc / 64
方式1時
波特率=(2^SMOD/32)*(單片機時鐘頻率/(256-X)) //X是初值
但一般情況下,我們是先確定波特率,再確定定時計數器初值
三、串行口的控制寄存器
1、串口工作方式寄存器SCON
2、電源控制寄存器PCON
四、串行口的具體應用編程
1、定好波特率
串行口波特率有兩種方式:固定波特率和可選波特率
當使用可變波特率時,應先計算T1的計數初值,并對T1初始化
當使用固定波特率時,選擇方式0、2
2、填寫控制字
對SCON寄存器設置工作方式,若為接受程序,需置為REN=1(允許接收),同時將TI、RI置零(串口中斷標志位)
3、選擇串行通信方式
串行通信可采用兩種方式:查詢方式和中斷方式
TI和RI是一幀數據發送或接收完的標志,可用于查詢;如果允許中斷,可引起中斷。
查詢方式:
發送一個數據→查詢TI→發送下一個數據(先發后查)
查詢RI→讀入一個數據→查詢RI→讀入下一個數據(先查后收)
中斷方式:
發送程序:發送一個數據→等待中斷,在中斷中發送下一個數據
接受程序:等待中斷,在中斷中再接受一個數據
注意:兩種方式中,都要軟件請TI、RI標志位,即用程序語句清0
4、約定標志字符
為了收發雙方的協調,除了兩邊的波特率要保持一致,也可以約定標志字符作為發送數據的起始,先發送標志字符,待對方收到并回應之后,再正式發數據。
當我們采用多機通信時,標志字符就相當于是各個分機的地址
五、查詢方式和中斷方式詳細流程
1、查詢方式
2、中斷方式
六、例程
#include "reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
void UsartInit()
{
SCON=0X50; // 0101 0000 設置為工作方式1
TMOD=0X20; // 0010 0000 設置計數器工作方式2
PCON=0X80; // 1000 0000波特率加倍
TH1=0XF3; //計數器初始值設置,波特率9600
TL1=0XF3;
ES=1; //打開接收中斷
EA=1; //打開總中斷
TR1=1; //打開計數器
}
void main()
{
UsartInit(); //串口初始化
while(1);
}
void Usart() interrupt 4 //串行口中斷
{
u8 receiveData;
receiveData=SBUF;//出去接收到的數據
RI = 0;//清除接收中斷標志位 軟件清零
SBUF=receiveData;//將接收到的數據放入到發送寄存器
while(!TI); //等待發送數據完成
TI=0; //清除發送完成標志位
}
上一篇:51單片機之晶振與定時器
下一篇:基于51單片機的直流電機調速設計
推薦閱讀
史海拾趣
ABCO公司初創時,電子市場競爭激烈,眾多企業爭奪市場份額。面對這樣的環境,ABCO公司創始人憑借對電子技術的深刻理解,以及敏銳的市場洞察力,選擇了專注于某一細分領域——高精度傳感器的研發與生產。通過不斷優化產品設計,提升產品性能,ABCO公司的傳感器逐漸在市場上獲得認可,為公司的起步奠定了堅實基礎。
進入21世紀后,E-T-A公司開始關注智能電路保護技術的研發。公司投入大量資源進行技術創新,成功推出了多款智能電路保護產品。這些產品不僅具有更高的安全性和可靠性,還能實現遠程監控和控制功能,為客戶提供更加便捷和高效的服務。
為了進一步豐富產品線,APEM在1984年開設了新廠,專業生產開關面板。這一舉措不僅擴充了公司的產品種類,也滿足了客戶對多樣化產品的需求。此后,APEM不斷推出新產品,逐步形成了完善的開關和控制面板產品線。
CONTTEK Group GmbH公司深知品質是企業的生命線。因此,公司建立了嚴格的質量管理體系,從原材料的采購到產品的生產、檢測、包裝等每一個環節都進行嚴格把控。這種對品質的執著追求,使得公司的產品贏得了客戶的廣泛信賴和好評。許多知名電子企業都選擇與CONTTEK Group GmbH公司建立長期合作關系,共同推動電子行業的發展。
在市場競爭日益激烈的背景下,ADPOW公司深知品質是生存和發展的關鍵。因此,公司建立了嚴格的質量管理體系,從原材料采購到產品出廠的每一個環節都進行嚴格把控。同時,公司注重品牌建設,通過廣告宣傳、參加展會等方式提升品牌知名度和美譽度。這些舉措有效提升了公司的市場競爭力。
dxf文件中LWPOLYLINE和POLYLINE有什么區別 dxf文件中LWPOLYLINE和POLYLINE有什么區別?另外,POLYLINE部分是否只有由VERTEX連成的線段?… 查看全部問答∨ |
請問有誰做過VGA 轉 RGB的系統沒? 電腦顯卡出來的VGA顯示信號,轉變為RGB數字信號,24位的最好, 就是想用480x272的LCD液晶來顯示電腦輸出的顯示信號呀 ,各位高 手請指點一下,用哪個芯片好?… 查看全部問答∨ |
請問DNW v0.50L版本中UBOOT功能怎么使用? 我將三星帶USB下載功能的Eboot.nbo下到RAM后,進入main menu,然后按U選中USB下載項,再選DNW的USB Port->uboot,選中待下載的NK.BIN ,但下載進度條出來 后沒有任何反應。 請問這是什么原因? … 查看全部問答∨ |
|
我這兒有兩個電路板,基本上一樣,cpu 選用 F149?,F在一個板子可以很容易得燒錄進去,可是另一個同樣的程序卻燒不進去(偶爾可以燒)。估計軟件沒有,連接線出現問題的可能性也很??;那么,板子又能出現什么問題??因為在燒錄程序時,只需要 7根線 ...… 查看全部問答∨ |
|
現在我們設計的是DSP與AMBE-2000連接并進行通信,但由于項目需要,資源緊張,所以可能要改成MCU與AMBE-2000連接。我用的MCU是TI的MSP430系列。 我想問您這樣的話應該怎么實現連接?因為DSP是可以通過McBSP與AMBE相連的,而MCU沒有McBSP的功能 ...… 查看全部問答∨ |
你們誰用個USB芯片D12,用它做了什么呀? 我手上有一顆 , 當初拿到準備做雨刮系統的, 但現在不需要了 我不知道拿它來做什么了 ?… 查看全部問答∨ |